# Работа с командной строкой Linux. Часть четвертая.
### Тема: Знакомство с Linux.
##### Цель работы: Научиться: работать в командной строке.
##### Необходимые материалы: Пк с доступом в интернет. Виртуальные машины с Linux Debian и Ubuntu.
## Настройка сетевых интерфейсов
**Студент должен уметь настраивать сетевые интерфейсы в основных debian подобных операционных системах Linux.**
#### (ifupdown) Настройка сетевых интерфейсов в Debian.
Сетевые параметры в OC Debian задаються с помощью networking через конфигурацию файла: `/etc/network/interfaces`. Чтобы настроить сетевой интерфейс нужно знать его название для этого можно использовать команду **ip a** в примере название интерфейс **eth0**.
Основные параметры задаються следующим образом:
```conf!=
auto eth0
iface eth0 inet static
address 192.168.1.35
gateway 192.168.1.1
netmask 255.255.255.0
```
- auto указанный интерфейс необходимо запускать автоматически при загрузке системы
- iface интерфейс eth0 находится в диапазоне адресов IPv4 со статическим ip
- address статический ip адрес
- gateway шлюз по-умолчанию
- netmask маска сети
Для того чтобы обновить сетевые настройки после изменения файла нужно перезагрузить сетевую службу:
```bash!
systemctl restart networking.service
```
:::warning
Про управление службами, демонами в Linux в узнаете в последующих работах.
:::
Для того чтобы интерфейс получал ip адресс по dhcp нужно в конфиге указать следующие:
```conf!
auto eth0
iface eth0 inet dhcp
```
После необходимо перезагрузить сетевую службу и запросить ip адрес у dhcp сервера.
```bash!
systemctl restart networking.service
dhclient -v eth0
```
#### (netplan) Настройка сетевых интерфейсов в Ubuntu.
Начиная с релиза Ubuntu 17.10, для управления конфигурацией сети используется утилита **Netplan**. Раньше для этих целей применялся скрипт ifupdown, конфигурационные файлы которого находились в папке /etc/network/interfaces.
Вы можете найти новые файлы конфигурации в /etc/netplan/*.yaml. Сервер Ubuntu генерирует конфигурационный файл Netplan для system-networkd под названием 01-netcfg.yaml, а рабочий стол Ubuntu генерирует конфигурационный файл Netplan для Network-Manager под названием 01-network-manager-all.yaml.
Если у вас несколько интерфейсов, используйте 02-network-manager-all.yaml для второго интерфейса. Netplan применяет конфигурацию в числовом порядке. Это означает, что 01 файл будет применен раньше 02 файла.
Теперь перейдем к конфигурации сети. Чтобы настроить статическую или динамическую IP-адресацию в Ubuntu, выполните следующие шаги:
Сначала найдите имя активного сетевого интерфейса, который вы хотите настроить. Для этого выполните следующую команду:
```bash!
ip a
```
Файл конфигурации Netplan по умолчанию находится в каталоге /etc/netplan. Вы можете найти его с помощью следующей команды:
```bash!
ls /etc/netplan/
```
Чтобы просмотреть содержимое файла сетевой конфигурации Netplan, выполните следующую команду:
```bash!
cat /etc/netplan/*.yaml
```
Теперь вам нужно открыть файл конфигурации в любом редакторе:
```
nano /etc/netplan/*.yaml
```
Обновите файл конфигурации в соответствии с вашими сетевыми потребностями. Для статической IP-адресации добавьте IP-адрес, шлюз, информацию DNS, а для динамической IP-адресации нет необходимости добавлять эту информацию, так как она будет получена от DHCP-сервера. Для редактирования файла конфигурации используйте следующий синтаксис.
```netplan
network:
Version: 2
Renderer: NetworkManager/ networkd
ethernets:
DEVICE_NAME:
Dhcp4: yes/no
Addresses: [IP_ADDRESS/NETMASK]
Gateway: GATEWAY
Nameservers:
Addresses: [NAMESERVER_1, NAMESERVER_2]
```
Где
- DEVICE_NAME - Имя интерфейса.
- Dhcp4 - да или нет в зависимости от динамической или статической IP-адресации
- Addresses - IP-адрес устройства в префиксной нотации. Не используйте маску сети.
- Gateway - IP-адрес шлюза для подключения к внешней сети.
- Nameservers - Адреса серверов имен DNS.
:::danger
Обратите внимание, что файлы YAML довольно строго относятся к отступам. Используйте для отступов пробелы, а не табуляцию. В противном случае вы столкнетесь с ошибкой.
:::
#### Настройка статического IP-адреса в Ubuntu
Чтобы вручную настроить IP-адрес, используйте приведенный выше синтаксис конфигурационного файла и добавьте IP-адрес, шлюз и информацию о DNS-сервере. Здесь вы можете увидеть пример конфигурации для статической IP-адресации:
```netplan
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.1.25/24
nameservers:
addresses:
- 192.168.1.1
gateway4: 192.168.1.1
```
Так же возможен вариант с перечислением, визуально он проще воспринимается:
```netplan
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: false
addresses: [192.168.122.250/24]
nameservers:
addresses: [192.168.122.1,192.168.122.2]
gateway4: 192.168.122.1
```
#### Настройка динамического IP-адреса в Ubuntu
Чтобы получить IP-адресацию от DHCP-сервера, используйте тот же вышеприведенный синтаксис конфигурационного файла. Но не добавляйте IP-адрес, шлюз и информацию о DNS-сервере.
Здесь вы можете увидеть пример конфигурации для динамической IP-адресации:
```netplan
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: true
```
После завершения настройки статического или динамического IP, сохраните и выйдите из файла конфигурации.
#### Тестирование конфигурации
Прежде чем применять какие-либо изменения, мы протестируем конфигурационный файл. Выполните следующую команду от имени sudo для тестирования конфигурации:
```bash!
netplan try
```
Если проблем нет, то будет выдано сообщение о принятии конфигурации. Если конфигурационный файл не пройдет проверку, он будет возвращен к предыдущей рабочей конфигурации
#### Применение конфигурации
Теперь примените новые конфигурации, выполнив следующую команду от имени sudo:
```
netplan apply
```
Если вы видите какую-либо ошибку, попробуйте выполнить отладку, чтобы выяснить проблему. Чтобы запустить отладку, выполните следующую команду от имени sudo:
```
netplan -d apply
```
#### Перезапуск сетевой службы
После успешного применения всех конфигураций перезапустите службу Network-Manager, выполнив следующую команду:
```bash!
systemctl restart network-manager
```
Если вы используете Ubuntu Server, вместо этого выполните следующую команду:
```bash!
systemctl restart system-networkd
```
#### Вернуть в Ubuntu ifupdown
Сперва отключим netplan в загрузчики grub:
```bash!
sudo nano /etc/default/grub
```
И приводим строку `GRUB_CMDLINE_LINUX` к следующему виду:
```bash!=
GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true"
```
После этого обновляем параметры grub.
```bash!
sudo update-grub
```
Устанавливаем сервис networking, для этого нам необходимо установить пакет ifupdown:
```bash!
sudo apt update
sudo apt install ifupdown
```
Редактируем / создаем файл /etc/network/interfaces.
Удаляем конфиг netplan.
```bash
sudo rm -rf /etc/netplan/*.ymal
```
После чего перезагружаем систему:
```bash
sudo reboot
```
## Сетевые утилиты
**Студент должен уметь использовать базовый инструментарий OC для работы с сетью.**
### Диагностика сети
Для диагностики сети используються следующие популярные утилиты:
- **`ping`** Проверить доступность хоста в сети.
- **`taceroute`** - Отслеживание маршрута до хоста.
- **`nmap`** - Сканирование портов и определение сервисов на хосте.
- **`netstat`** - Показать сетевую статистику. Часто используеться с ключами "tuna" позволяет посмотреть открытые tcp порты на хосте.
- **`nslookup`** - Выполнить DNS-запрос для определения IP-адреса и имени хоста.
- **`ip a`** - Показывает параметры сетевых интерфейсов
Как использовать эти утилиты?
Утилитой **ping** удобно проверять доступность сети интернет, помимо доступности какого либо хоста в сети. Для этого можно выполнить команду ping на один из адресов dns гугла к примеру 8.8.8.8 это глобальный ip адрес и если ping идет то доступ к интернету есть.
Утилиту **taceroute** стоит использовать к примеру для того чтобы узнать где происходит обрыв соединения. Эта утилиты показывает путь пакета до хоста - тоесть промежуточные узлы (маршрутизирующие устройства), также она показывает время которое было затраченно на перемещения пакета от точки к точки, можно узнать где происходят наибольшие задержки и тд.
Утилита **nmap** используеться для сканирования устройств на открытые порты, она может быть полезна тогда когда вы хотите проверить а открыт ли порт для нужной программы, к примеру вы установили веб-сервер и уверены что все настроили правильно но покакой-то причине сайт не открываеться с ошибкой 404, можно проверить открыт ли порт 80 и 443 для протоколов http/s и если порты закрыты открыть их и тогда все будет работать или же исключить эту проблему и искать другую.
Утилита **netstat** также позволяет видеть сетевую статистику по которой можно понять что к примеру не так в сети. К примеру можно обнуружить неожиданной активное соединение которое может быть связанно с вредоносным ПО.
Утилита **`nslookup`** позволит вам узнать коректно ли работает DNS. К примеру у вас не получаеться зайти на сайт, вы выполняете команду ping и узнаете что доступ в интернет есть, тогда стоит проверить работает ли dns это можно сделать этой утилитой.
:::spoiler Про DNS.
:::info
DNS (Domain Name System) - это система, используемая в компьютерных сетях и интернете для преобразования человеко-читаемых доменных имен, таких как "www.example.com", в IP-адреса, которые используются компьютерами для определения местоположения других компьютеров и служб в сети. DNS выполняет важную функцию в сетях, обеспечивая удобство для пользователей, которые могут использовать знакомые доменные имена вместо запоминания числовых IP-адресов.
:::
#### Другие полезные утилиты
Также вам стоит знать следующие полезные утилиты:
- **wget** - Загрузить файл из Интернета по ссылке. Крайне полезная утилита к примеру когда вам нужно скачать архив по ссылки или какой либо другой файл вы можете скопировать прямую ссылку на файл и вставить ее после wget и файл будет загружен в текущую директорию.
- **curl** - Позволяет выполнить http запрос, часто используеться для диагностики веб-серверов и приложений, вы уже работали с этой утилитой выполняя запросы на сайт cheat.sh.
## Практическая часть.
1. Создайте клонн виртуальной машины Ubuntu Server название для машины srv2. А для первой укажите srv1. Эти названия нужно изменить внутри программы виртуализации. Hostname у вас все также ваша фамилия. Для различия можете изменит его указав к примеру srv1_фамилия.
2. У вас должно быть 3 виртуальные машины 2 Ubuntu Server и 1 Debian. Для каждой из машин вам нужно добавить по сетевому интерфейсу (внутряння сеть), название внутреней сети vlanN - где N ваш номер по журналу. Виртуальные машины должны быть в одной программе виртуализации.
3. Ваша задача настроить добавленные интерфейсы используя статику, таким образом чтобы на srv1 был настроен netplan, для srv2 и debian networking, в качестве внутренней сети используйте подсеть 192.168.N.0/24 - где N номер по журналу.
4. Проверьте чтобы проходил ping между виртуальными машиными по внутренним интерфейсам.
5. Проведите сетевую разведку на какой-нибудь сервер в интеренете. Для этого выбирете любой сайт из интернета, узнайте на каких или каком IP адресе обслуживаеться данный сайт, используюя одну из сетевых утилит. Узнайте какие порты открыты у данного сервера? Также опишите маршрут до данного сервера.
6. Скопируйте ссылку на эту практическую работу и используя команду **wget** скачайте эту страницу себе на debian. В качесте названия файла укажите `lesson4_network.html`. Найдите данный файл в файловом менеджере в Linux если он у вас графический и откройте файл в браузере. Если Linux у вас консольный то выведите содержимое файла в консоль командой less пролистайте его и сделайте вывод.