Настройки сети при помощи 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, and 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-адрес вышедшей из строя карты. 
Требования:
1. Поддержка 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

Пример настройки виртуальных интерфейсов:

    vlans:
        vdev:
            id: 101
            link: net1
            addresses:
                - 10.0.1.10/24
        vprod:
            id: 102
            link: net2
            addresses:
                - 10.0.2.10/24
        vtest:
            id: 103
            link: net3
            addresses:
                - 10.0.3.10/24
        vmgmt:
            id: 104
            link: net4
            addresses:
                - 10.0.4.10/24

Для определения 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
        enp1s0f1:
            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

CODE