Настройки сети при помощи netplan

Введение

В Ubuntu-18.04 файл для настройки сети находится в каталоге /etc/netplan/ (варианты размещения файла конфигурации: {etc|run|lib}/netplan/*.yaml)и имеет расширение .yaml. Официальная документация по всем командам и настройкам netplan приведена сайте https://netplan.io/.

YAML имеет структурированный текстовый формат файла. Вложенные параметры должны иметь отступы табуляциями или пробелами, количество которых имеет важное значение. Очень важно соблюдать табуляцию и не смешивать табуляцию и пробелы. Как правило, в отступах используются 4 пробела для вложенных параметров.

Основные команды для применения настроек netplan:

Базовые настройки

Пример конфигурации:

   # /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

Конфигурация разделяется на следующие секции:

Настройка интерфейсов

Общие настройки для физических интерфейсов

Общие настройки для всех типов

Маршрутизация

Bond (Агрегация)

Bond — агрегирование физических интерфейсов в логические.

Основные параметры :

Блок параметров

Ниже приведены некоторые параметры режима агрегации, полный перечень — в официальной документации.

Режим агрегации 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

где:

Пример настройки с несколькими интерфейсами с vlan

Для определения vlan служит секция "vlans", в ней определяются имена новых vlan'ов. У vlan есть 2 обязательных аргумента:

Пример с комментариями в тексте файла:


# Пример конфигурации для настройки 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