Приложение Е. Netplan
Настройки сети при помощи netplan
Введение
В Ubuntu-18.04 файл для настройки сети находится в каталоге /etc/netplan/ (варианты размещения файла конфигурации: {etc|run|lib}/netplan/*.yaml)и имеет расширение .yaml. Официальная документация по всем командам и настройкам netplan приведена сайте https://netplan.io/.
YAML имеет структурированный текстовый формат файла. Вложенные параметры должны иметь отступы табуляциями или пробелами, количество которых имеет важное значение. Очень важно соблюдать табуляцию и не смешивать табуляцию и пробелы. Как правило, в отступах используются 4 пробела для вложенных параметров.
Основные команды для применения настроек netplan:
- netplan apply — применить настройки;
- netplan try — попробовать применить настройки с возможностью отмены;
- netplan ip leases interface — просмотреть настройки interface (например, enp3s0);
- netplan ifupdown-migrate — осуществить преобразование старых настроек /etc/network/interfaces в формат netplan;
- netplan generate — создать из файла с расширением .yaml специфичную конфигурацию для сетевого менеджера (network-manager или systemd-network). Для вывода отладочных сообщений использовать команду
netplan--debug generate.
Базовые настройки
Пример конфигурации:
# /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system network: version: 2 renderer: networkd ethernets: enp3s0: addresses: [] dhcp4: true optional: true
Конфигурация разделяется на следующие секции:
- network — начало конфигурации;
- version — объявляет версию yaml, на котором представлена конфигурация;
- renderer — указывает netplan, в какую программу передать управление, например networkd (systemd-network);
- ethernets — декларирует физические проводные интерфейсы. В нём определяются сетевые интерфейсы, которые реально подключены, например, enp3s0. Для данного интерфейса указывается список статических адресов addresses (один или несколько), включается dhcp4 для dhcp клиента IPv4 (получение IP-адресов по dhcp в ecss недопустимо, по умолчанию отключено);
- optional — параметр, означающий, что не нужно выдерживать время при загрузке/перезагрузке системы, чтобы интерфейс был полностью работоспособен. Значение параметра по умолчанию — false, поддерживается только networkd.
Настройка интерфейсов
Общие настройки для физических интерфейсов
- match (mapping) — выбор интерфейсов по критерию. Все определяемые свойства должны совпасть для применения в конфигурации;
- macaddress (scalar) — MAC-адрес устройства;
- set-name (scalar) — установка уникального имени интерфейса;
- driver (scalar) — указание имени драйвера ядра, указывает на свойство DRIVER udev. Совпадение (match) поддерживается только для networkd;
- wakeonlan (bool) — включение компьютера удаленно по сети, работает только при указании MAC-адреса устройства.
Общие настройки для всех типов
- renderer (scalar) — выбор бэкенда;
- dhcp4 (bool) — получение настроек сети по dhcp IPv4;
- dhcp6 (bool) — получение настроек сети по dhcp IPv6;
- addresses (sequence of scalar) — список сетевых адресов вида a.b.c.d/mask для IPv4 или "2001:1::/64" для IPv6;
- gateway4 (scalar) — шлюз для IPv4;
- gateway6 (scalar) — шлюз для IPv6;
- nameservers (mapping) — настройка dns;
- optional (bool) — определение, является ли интерфейс обязательным при старте;
- routes (mapping) — настройка маршрутизации.
Маршрутизация
- vlans: — объявление блока настройки vlan;
- vlan1 (как пример): — произвольное имя vlan-интерфейса;
- id: — тег vlan;
- link: — интерфейс, через который vlan будет доступен;
- routes: — объявление блока описания маршрутов;
- to: — задается подсеть/маска, до которой необходим маршрут;
- via: — указывается шлюз, через которой будет доступна наша подсеть;
- on-link: — указывается, что необходимо прописывать маршруты всегда при поднятии линка.
Bond (Агрегация)
Bond — агрегирование физических интерфейсов в логические.
Основные параметры :
- interfaces (sequence of scalar) — список физических интерфейсов, которые необходимо объединить в один;
- parameters (mapping) — настройки агрегации.
Блок параметров
Ниже приведены некоторые параметры режима агрегации, полный перечень — в официальной документации.
- parameters (mapping):
- mode (scalar) — режим агрегации: balance-rr (по умолчанию), active-backup, balance-xor, broadcast, 802.3ad, balance-tlb, balance-alb;
- mii-monitor-interval (scalar) — интервал мониторинга интерфейса (живой или нет). По умолчанию — 0 (в миллисекундах);
- down-delay (scalar) — задержка перед отключением. По умолчанию — 0 (в миллисекундах);
- up-delay (scalar) — задержка перед включением. По умолчанию — 0 (в миллисекундах);
- lacp-rate (fast|slow) — только в 802.3ad. Скорость передачи LACPDU. Возможные значения — slow (30 секунд — по умолчанию) и fast (каждую секунду).
Режим агрегации mode определяет политику поведения объединенных интерфейсов. Возможные значения:
balance-rr | Политика round-robin. Пакеты отправляются последовательно, начиная с первого доступного интерфейса и заканчивая последним. Эта политика применяется для балансировки нагрузки и отказоустойчивости. |
active-backup | Политика активный-резервный. Только один сетевой интерфейс из объединённых будет активным. Другой интерфейс может стать активным только в том случае, когда упадёт текущий активный интерфейс. При такой политике MAC-адрес bond-интерфейса виден снаружи только через один сетевой порт во избежание появления проблем с коммутатором. Эта политика применяется для отказоустойчивости. |
balance-xor | Политика XOR. Передача распределяется между сетевыми картами, используя формулу: [(«MAC-адрес источника» XOR «MAC-адрес назначения») по модулю «число интерфейсов»]. Получается, что одна и та же сетевая карта передаёт пакеты одним и тем же получателям. Опционально распределение передачи может быть основано и на политике «xmit_hash». Политика XOR применяется для балансировки нагрузки и отказоустойчивости. |
broadcast | Широковещательная политика. Передает всё на все сетевые интерфейсы. Эта политика применяется для отказоустойчивости. |
802.3ad | Политика агрегирования каналов по стандарту IEEE 802.3ad. Создаются агрегированные группы сетевых карт с одинаковой скоростью и дуплексом. При таком объединении передача задействует все каналы в активной агрегации согласно стандарту IEEE 802.3ad. Выбор, через какой интерфейс отправлять пакет, определяется политикой. По умолчанию это XOR-политика, можно использовать «xmit_hash» политику. Требования: 1. Поддержка Ethtool в драйвере для получения информации о скорости и дуплексе на каждом сетевом интерфейсе; 2. Поддержка на коммутаторе стандарта IEEE 802.3ad; 3. Настройка на коммутаторе. |
balance-tlb | Политика адаптивной балансировки нагрузки передачи. Исходящий трафик распределяется в зависимости от загруженности каждой сетевой карты (определяется скоростью загрузки). Не требует дополнительной настройки на коммутаторе. Входящий трафик приходит на текущую сетевую карту. Если она выходит из строя, то другая сетевая карта берёт себе MAC-адрес вышедшей из строя карты. Требование: поддержка Ethtool в драйвере для получения информации о скорости загрузки на каждом сетевом интерфейсе. |
balance-alb | Политика адаптивной балансировки нагрузки. Включает в себя политику balance-tlb и осуществляет балансировку входящего трафика. Не требует дополнительной настройки на коммутаторе. Балансировка входящего трафика достигается путём ARP-переговоров. Драйвер bonding перехватывает ARP-ответы, отправляемые с локальных сетевых карт наружу, и переписывает MAC-адрес источника на один из уникальных MAC-адресов сетевой карты, участвующей в объединении. Таким образом, различные пиры используют различные MAC-адреса сервера. Балансировка входящего трафика распределяется последовательно (round-robin) между интерфейсами. Требования: 1. Поддержка Ethtool в драйвере для получения информации о скорости загрузки на каждом сетевом интерфейсе; 2. Поддержка в драйвере замены MAC-адреса на включенном устройстве; 3. Возможно, придётся корректировать значение параметра updelay равным или большим, чем значение задержки на коммутаторе (чтобы ARP-ответы не были заблокированы на коммутаторе при переподключении линка либо при добавлении новой сетевой карты в bonding). |
Важно: на коммутаторах должны быть сделаны настройки в соответствии с выбранным режимом агрегации линков.
Пример простой настройки сети с линк-агрегацией:
network: version: 2 renderer: networkd ethernets: enp0s3 dhcp4: no enp0s8: dhcp4: no bonds: bond-ssw: dhcp4: no interfaces: - enp0s3 - enp0s8 parameters: mode: 802.3ad mii-monitor-interval: 1 optional: true addresses: - 10.0.3.10/24
где:
- bonds: — блок, поясняющий, что будет происходить настройка bonding;
- bond-ssw: — произвольное имя интерфейса;
- interfaces: — набор интерфейсов, собираемых в bonding;
- parameters: — описание блока настройки параметров;
- mode: — указывается мод, по которому будет работать bonding;
- mii-monitor-interval: — задается интервал мониторинга 1 секунда.
Пример настройки с несколькими интерфейсами с vlan
Для определения vlan служит секция "vlans", в ней определяются имена новых vlan'ов. У vlan есть 2 обязательных аргумента:
- id (scalar) — номер vlan;
- link (scalar) — родительский интерфейс.
Пример с комментариями в тексте файла:
# Пример конфигурации для настройки ECSS-10
# В варианте, когда каждый хост подключен к коммутаторам выделенным линком
# Коммутаторы организованы в erps-кольцо
# netplan for ecss1
network:
version: 2 # Версия
renderer: networkd # systemd
ethernets: # настройка сетевых интерфейсов
enp1s0f0: # Наименование интерфейса. Может быть иным
dhcp4: no # Отключаем настройку по dhcp
dhcp6: no # Отключаем настройку по dhcp v6
enp3s0f0:
dhcp4: no
dhcp6: no
enp3s0f1:
dhcp4: no
dhcp6: no
enp4s0f0:
dhcp4: no
dhcp6: no
enp4s0f1:
dhcp4: no
dhcp6: no
bonds: # Связываем физические интерфейсы в бонды для отказоустойчивости
bond1: # Наименование бонда
interfaces: # Перечисляем интерфейсы, которые входят в данный бонд
- enp1s0f0
- enp1s0f1
link-local: [] # Отключает link-local адреса
accept-ra: no # Не отвечать на Router Advertisements сообщения
parameters: # Параметры агрегации
mode: active-backup # Рекомендуемый режим для линков, подключенных к коммутаторам в ERPS-кольце
primary: enp1s0f0 # Основной интерфейс
mii-monitor-interval: 100ms # Задает интервал контроля mii-интерфейса
up-delay: 100ms
down-delay: 200ms
lacp-rate: fast
optional: false # Не ждем поднятия интерфейса при загрузке системы
vlans: # Настраиваем vlan
bond1.2: # Название интерфейса, как оно будет определяться в системе
id: 2 # тег vlan
link: bond1 # На каком интерфейсе будет добавляться тег
link-local:
- ipv4
accept-ra: no
addresses:
- 192.168.2.21/24 #Адреса
bond1.3:
id: 3 # mgm internal vlan 3
link: bond1
addresses:
- 192.168.1.21/24
gateway4: 192.168.1.203 # Шлюз по умолчанию
nameservers: # Адреса серверов DNS
addresses:
- 192.168.1.203
bond1.476:
id: 476 # mgm techology net vlan 476
link: bond1
addresses:
- 10.16.33.21/24
routes: # Маршрутизация
- to: 10.16.0.0/16
via: 10.16.33.254 # Адрес шлюза в данную подсеть
on-link: true # Определяет, что указанные маршруты непосредственно связаны с интерфейсом
- to: 10.136.16.0/24
via: 10.16.33.254
on-link: true