Ubuntu18+: Настройка сети в Linux с помощью netplan
Пробуем включить сеть через командную строку
Смотрим название нашего интерфейса (в нашем случае ens18):
|
1 |
ip link |
Затем прописываем наши настройки:
|
1 2 3 |
ifconfig ens18 199.164.54.222 netmask 255.255.255.0 up sudo route add default gw 199.164.54.1 sudo resolvectl dns ens18 8.8.8.8 8.8.4.4 |
Затем проверьте соединение командой:
|
1 |
ping 8.8.8.8 |
Установка утилиты netplan
Начиная с Ubuntu 18.04 конфигурирование сети выполняется с помощью утилиты netplan. В других системах на базе deb, например, Debian, она может быть установлена командой:
|
1 2 |
sudo apt update sudo apt install netplan.io |
Если не работает можно попробовать переставить:
|
1 |
sudo apt reinstall netplan.io |
After installation, ensure the netplan executable’s location is included in your system’s PATH environment variable. The netplan executable is typically located in /usr/sbin/. You can check your PATH by running:
1 echo $PATHIf /usr/sbin/ is not listed, you might need to add it or ensure your shell configuration loads the correct PATH for sudo commands. Check for upgrade issues.
Рассмотрим принцип и примеры настройки сети с помощью netplan.
Конфигурационный файл
Файл для настройки сети находится в каталоге /etc/netplan/. Имя файла может быть любым, на конце должно быть расширение yaml, например:
|
1 |
vi /etc/netplan/00-installer-config.yaml |
* чаще всего, это файл 00-installer-config.yaml, 01-netcfg.yaml или 50-cloud-init.yaml.
YAML представляет из себя текстовый формат файла. Вложенные параметры должны иметь отступы табуляциями или пробелами, количество которых имеет важное значение (если поставить лишний пробел у одного из нескольких параметров, мы получим сообщение об ошибке «expected mapping»).
Простая настройка сети
Разберем пример настройки 3-х сетевых интерфейсов. Два из них будут с IP-адресами назначенными вручную (static IP), один — по DHCP.
Приводим файл к следующему виду:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
network: version: 2 renderer: networkd ethernets: ens3: dhcp4: true ens7: dhcp4: false addresses: - 192.168.122.195/24 routes: - to: default via: 192.168.122.1 mtu: 1500 nameservers: addresses: - 8.8.8.8 - 77.88.8.8 search: [ dmosk.local ] ens9: dhcp4: false addresses: - 192.168.1.10/24 - 192.168.1.20/24 nameservers: addresses: - 8.8.8.8 - 77.88.8.8 search: [ dmosk.local, dmosk.ru ] |
* где:
- version — версия YAML. На момент обновления статьи, была 2.
- renderer — менеджер сети (networkd или NetworkManager).
- ethernets — настройка сетевых адаптеров ethernet.
- ens3, ens7, ens9 — настройки для соответствующих сетевых адаптеров. В данном примере мы настраиваем 3 сетевых адаптера.
- dhcp4 — будет ли получать сетевой адаптер IP-адрес автоматически. Возможны варианты yes/true — получать адрес автоматически; no/false — адрес должен быть назначен вручную.
- addresses — задает IP-адреса через запятую.
- routes — настройка маршрутов. Для шлюза по умолчанию используем опцию и значение to: default. Ранее использовалась директива gateway4, но теперь она считается устаревшей (при применении настройки с ней система вернет предупреждение gateway4 has been deprecated, use default routes instead). Также обратите внимание на вариант с 0.0.0.0 — в более ранних версиях системы вариат с default выдаст ошибку, и нужно использовать конфигурацию с четыремя нулями.
- mtu — при желании, можно задать значение MTU.
- nameservers — настройка серверов имен (DNS).
- nameservers addresses — указываем серверы DNS. Обратите внимание на разный формат записи для ens7 и ens9. Приемлемы оба варианта.
- nameservers search — дописывает окончание домена, если мы обращаемся к узлу сети только по его имени. Стоит обратить внимание, что мы можем указать несколько доменов через запятую.
Применение настроек
Для применения настроек необходимо запустить команду netplan. Ее синтаксис:
netplan <опции> <команда>
Для проверки нашего конфигурационного файла вводим:
|
1 |
netplan --debug generate |
Для применения настроек вводим:
|
1 |
netplan apply |
* данную команду мы вводим также для перечитывания настроек и перезапуска сети (вместо привычных restart и reload).
Статический маршрут
Статический маршрут задается для конкретного интерфейса, также в конфигурационном файле netplan, например:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
network: version: 2 renderer: networkd ethernets: ens9: dhcp4: false addresses: 192.168.1.10/24 nameservers: addresses: - 8.8.8.8 - 77.88.8.8 routes: - to: 192.168.0.0/24 via: 192.168.1.1 on-link: true |
* в данном примере мы настроили маршрут для сетевого интерфейса ens9. Данная настройка задается параметром routes:
- to — направление маршрута (в какую сеть мы должны попадать). В данном примере, 192.168.0.0/24.
- via — через какой шлюз мы попадаем в сеть to.
- on-link — активация маршрута при поднятии линка на сетевом интерфейсе.
Объединение интерфейсов (bonds)
С помощью bonds мы можем объединить интерфейсы с целью обеспечения отказоустойчивости и/или повышения пропускной способности.
Пример настройки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
network: version: 2 renderer: networkd ethernets: ens2f0: {} ens2f1: {} bonds: bond0: dhcp4: false interfaces: - ens2f0 - ens2f1 parameters: mode: active-backup addresses: - 192.168.122.195/24 gateway4: 192.168.122.1 mtu: 1500 nameservers: addresses: - 8.8.8.8 - 77.88.8.8 |
* в данном примере мы объединяем физические интерфейсы ens2f0 и ens2f1; настройка parameters mode указываем на тип объединения — доступны варианты:
- balance-rr (задействуются оба интерфейса по очереди, распределение пакетов по принципу Round Robin).
- active-backup (используется только один интерфейс, второй активируется в случае неработоспособности первого).
- balance-xor (задействуются оба интерфейса по очереди, распределение пакетов на основе политики хеширования xmit_hash_policy).
- broadcast (задействуются оба интерфейса одновременно, пакеты передаются все интерфейсы).
- 802.3ad (задействуются оба интерфейса по очереди, распределение пакетов на основе политики хеширования xmit_hash_policy)
- balance-tlb (задействуются оба интерфейса по очереди, пакеты распределяются в соответствии с текущей нагрузкой)
Сетевой мост (bridge)
Сетевой мост позволяет пропускать сетевой трафик через другой сетевой адаптер. Это можно применить, например, для организации хоста виртуальных машин (для трансфера трафика к виртуальным машинам KVM через единственный сетевой интерфейс сервера).
Пример настройки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
network: version: 2 renderer: networkd ethernets: ens2f0: {} bridges: br0: macaddress: ce:ce:ce:45:45:45 interfaces: - ens2f0 addresses: - 192.168.1.15/24 gateway4: nameservers: addresses: - 77.88.8.8 - 8.8.8.8 mtu: 1500 parameters: stp: true forward-delay: 4 dhcp4: false dhcp6: false |
* где:
- bridges — настройки для интерфейсов bridge.
- bridges br0 — настройка интерфейса br0.
- macaddress — физический адрес (MAC) интерфейса. Настройка важна для некоторых провайдеров VPS — без нее бридж может не заработать.
- interfaces — перечисление интерфейсов, из которых собираем мост. В данном примере ens2f0.
- addresses, gateway4, nameservers — сетевые настройки (IP-адрес, шлюз, сервер имен).
- mtu — одноименный параметр. Для сетей ethernet обычно равен 1500.
- parameters stp — включает или отключает устранение петель в сети. В данном примере включено.
- parameters forward-delay — время в секундах в течение которого мост будет оставаться в состояниях «Listening» и «Learning».
- dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса. В нашем случае, отключает.
Подробнее про настройку сетвого моста для KVM в инструкции Настройка KVM на Ubuntu Server.
Vlan
Также мы можем настроить тегированный интерфейс vlan:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
network: version: 2 renderer: networkd ethernets: ens3: {} vlans: vlan5: id: 5 link: ens3 dhcp4: false addresses: [10.0.0.15/24] gateway: 10.0.0.1 |
* в данном примере мы настроили интерфейс с тегом 5 на физическом адаптере ens3.
WiFi
Для подключения к беспроводной сети задаем следующие настройки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
network: version: 2 renderer: networkd wifis: wlp2s0b1: dhcp4: false dhcp6: false addresses: - 192.168.2.10/24 routes: - to: default via: 192.168.2.1 nameservers: addresses: - 192.168.2.1 - 77.88.8.8 access-points: "<имя WiFi сети (SSID)>": password: "wifi_password" |
* где:
- wifis — определяет настойки для WiFi.
- wlp2s0b1 — настройка для беспроводного сетевого адаптера.
- dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса.
- addresses, routes, nameservers — настройка сети (IP-адрес, шлюз, сервер DNS).
- access-points — настройка для подключения к беспроводной сети.
- <имя WiFi сети (SSID)> — имя беспроводной сети, к которой будем подключаться.
- password — пароль для подключения к беспроводной сети.
Если мы не знаем точное имя нашей WiFi сети, можно провести сканирование с помощью утилиты wireless-tools:
|
1 |
apt install wireless-tools |
|
1 |
iwlist wlp2s0b1 scan | grep ESSID |
* данная команда с помощью сетевого интерфейса wlp2s0b1 выполнит сканирование сетей и выведет список имен (ESSID).
Если система не подключается к WiFi переходим к возможному решению.
Несколько IP-адресов
Если нужно задать несколько IP-адресов на одном сетевом адаптере, просто перечисляем их:
|
1 2 3 4 5 6 7 8 9 |
network: version: 2 renderer: networkd ethernets: ens7: dhcp4: false addresses: - 1.2.3.4/24 - 5.6.7.8/24 |
* в данном примере сетевому адаптеру ens7 будут назначены адреса 1.2.3.4 и 5.6.7.8.
Отключение netplan и возврат к interfaces
При желании, мы можем вернуть привычный принцип настройки сети. Для этого выполним несколько шагов.
1. Открываем настройку grub:
|
1 |
vi /etc/default/grub |
2. Находим опцию GRUB_CMDLINE_LINUX и дописываем в нее параметр:
|
1 |
GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true" |
* если GRUB_CMDLINE_LINUX содержит другие настройки, то наш параметр добавляем через пробел.
3. Устанавливаем пакет ifupdown:
|
1 |
apt install ifupdown |
4. Настраиваем сеть в файле:
|
1 |
vi /etc/network/interfaces |
… например:
|
1 2 3 4 5 |
auto lo iface lo inet loopback auto ens5 iface ens5 inet dhcp |
или
|
1 2 3 4 5 6 |
auto ens5 iface ens5 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 |
* в данном примере мы настраиваем сетевой интерфейс ens5 на автоматическое получение IP-адреса.
5. Применяем настройки загрузчика:
|
1 |
update-grub |
И перезагружаем систему:
|
1 |
shutdown -r now |
Возможные ошибки
1. Error in network definition *.yaml line xxx column yyy: expected mapping
Ошибка появляется при проверке (generate) или применении (apply) настроек сети.
Причина: ошибка синтаксиса YAML.
Решение: внимательно смотрим на количество отступов, которое сделано для строки xxx. Количество пробелов должно точно соответствовать количеству в других строках. Если параметр вложенный, он также должен отделяться от родителя нужным количеством пробелов. Пример неправильной настройки:
|
1 2 3 |
network: version: 2 renderer: networkd |
* обратите внимание, что version имеет 4 пробела для отступа, а renderer — 2. Так как version и renderer равнозначные параметры для родителя network, они должны иметь одинаковое количество пробелов.
2. wpa_supplicant: No such file or directory
Компьютер не подключается к сети WiFi. Если ввести команду просмотра лога:
|
1 |
journalctl -xe |
… то можно увидеть ошибку:
|
1 |
/sbin/wpa_supplicant: No such file or directory |
Причина: система при настройке подключения к беспроводной сети пытается использовать утилиту wpa_supplicant, которой нет в системе.
Решение: устанавливаем wpa_supplicant:
|
1 |
apt install wpasupplicant |
Перезапустим конфигурацию сети:
|
1 |
netplan apply |
3. WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
his means that some part of your network configuration expects Open vSwitch (OVS), but its database service (ovsdb-server) is not running or install.
Install service:
|
1 |
sudo apt install openvswitch-switch |
Start or enable the service:
|
1 2 |
sudo systemctl start ovsdb-server sudo systemctl enable ovsdb-server |
If Open vSwitch is not required for your system/networking setup, you may want to remove its related config or uninstall it:
|
1 |
sudo apt remove openvswitch-switch |