Systemd-networkd

Материал из ALT Linux Wiki

systemd-networkd — системная служба для управления сетевыми настройками. Её задачей является обнаружение и настройка сетевых устройств по мере их появления, а также создание виртуальных сетевых интерфейсов.

systemd/udev автоматически назначает постоянные имена для обнаруженных Ethernet, WLAN и WWAN-интерфейсов, список которых можно увидеть по команде networkctl.

Чтобы изменения файлов конфигурации вступили в силу, необходимо перезапустить службу systemd-networkd или выполнить команду # networkctl reload.

Конфигурационные файлы

Конфигурационные файлы сетевых служб systemd хранятся в каталоге /etc/systemd/network.

Существует четыре типа конфигурационных файлов:

  • .network — описывают параметры сети: IP, маршруты, DNS и другие;
  • .link — описывают физические параметры каждого интерфейса: имя, MAC, MTU и т.д.;
  • .netdev — описывают виртуальные интерфейсы, мосты;
  • networkd.conf — содержит общие параметры из конфигурационных файлов других типов, справедливые для всех сетей и интерфейсов, находится в /etc/systemd.

Файл .network

Ниже приведены некоторые параметры основных секций такого файла (подробнее см. man systemd.network(5)).

Секция [Match]

Определяет, может ли такой сетевой файл быть применен к заданному устройству.

Параметр Описание Пример
MACAddress= Разделённый пробелами список MAC-адресов (в шестнадцатеричном формате); в качестве внутреннего разделителя в адресах можно использовать двоеточия, дефисы и точки 08:00:27:4c:fc:4a
08-00-27-ae-ad-d5
Type= Разделённый пробелами список типов интерфейсов (как в выводе команды networkctl) ether wlan
Name= Разделённый пробелами список названий интерфейсов (можно указывать шаблоны с подстановочными символами в стиле командной оболочки). Символ ! в начале инвертирует результаты поиска. enp0s3
SSID= Разделённый пробелами список SSID подключенных беспроводных локальных сетей. Символ ! в начале инвертирует результаты поиска.
Host= Имя хоста или machine ID
Virtualization= Проверка на работу в виртуальной среде, и при необходимости — её конкретной реализации
(Virtualization=false — для хост-системы, Virtualization=true — для контейнера или ВМ)
qemu

Секция [Network]

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

Памятка: номинально systemd принимает за логическую истину значения 1, yes, on и true, а за ложь — 0, no, off и false.
Но лучше ограничиться одними yes/no, поскольку в части параметров типа DHCP, LinkLocalAddressing и некоторых иных, помимо этих значений (а также ipv4/ipv6) другие просто не работают.
Параметр Описание Пример
Description= Описание устройства
DHCP= Включает поддержку клиентов DHCPv4 и/или DHCPv6.
Принимает значения «yes», «no» (по умолчанию), «ipv4» или «ipv6». Дополнительные настройки DHCP устанавливаются в секциях [DHCPv4] или [DHCPv6].
ipv4
DHCPServer= Запуск сервера DHCPv4. Принимает значения «yes», «no» (по умолчанию). Дополнительные настройки DHCP-сервера можно задать в секции [DHCPServer] true
LinkLocalAddressing= Включает автоконфигурацию локального адреса канала.
Принимает значения «yes», «no», «ipv4» или «ipv6».
Локальный адрес канала IPv6 настраивается при значениях «yes» или «ipv6».
Локальный адрес канала IPv4 настраивается при значениях «yes» или «ipv4» и если автоконфигурация DHCPv4 в течение некоторого времени не удалась.
Данный параметр позволяет избежать появления в системе адреса IPv6.
Address= Статический IPv4 или IPv6 адрес и длина его префикса, разделенные символом «/». Этот параметр можно указать несколько раз. Этот параметр заменяет секцию [Address], если та содержит только ключ Address=. Опция обязательна, если не используется DHCP. Если указано значение 0.0.0.0 (для IPv4) или :: (для IPv6), то будет выделен неиспользуемый блок адресов заданного размера. Длина префикса не может быть меньше 8 для IPv4 и 64 для IPv6. 192.168.0.196/24
Gateway= Адрес шлюза. Этот параметр заменяет секцию [Route], если та содержит только ключ Gateway= без указания Destination=. Параметр можно указать более одного раза. 192.168.0.1
DNS= Адрес DNS-сервера. Параметр можно указать более одного раза. 8.8.8.8
Domains= Разделённый пробелами список доменов, которые должны разрешаться с использованием DNS-сервера. Каждый элемент в списке должен представлять собой доменное имя, возможно, с префиксом тильды («~»).
IPForward= Управляет пересылкой входящих пакетов на другой интерфейс в соответствии с таблицей маршрутизации. Если этот параметр включен, входящие пакеты на любом сетевом интерфейсе будут пересылаться на любые другие интерфейсы в соответствии с таблицей маршрутизации. Принимает логическое значение или значения «ipv4» или «ipv6», которые включают пересылку IP-пакетов только для указанного семейства адресов.
Не работает в systemd >= 256; в этих версиях systemd-networkd нужно использовать параметры IPv4Forwarding= и/или IPv6Forwarding= — либо в конкретном файле .network, либо глобально в networkd.conf.
false
IPMasquerade= Если опция включена, то при пересылке пакетов IP-адрес источника подменяется адресом локального сетевого интерфейса. Принимает одно из значений «ipv4», «ipv6», «both» или «no». По умолчанию «no». Если этот параметр включен, IPForward= автоматически устанавливается в одно из значений «ipv4», «ipv6» или «yes».
IPv6AcceptRA= Принимает логическое значение. Управляет поддержкой приема объявления маршрутизатора IPv6 (RA) для интерфейса. Если параметр имеет значение «true», RA принимаются; если «false», RA игнорируются. false

Секция [Route]

Таких секций может быть указано несколько — для каждой сети назначения.

Параметр Описание Пример
Destination= Сеть, до которой строится маршрут. 172.16.1.0/24
Gateway= Шлюз, через который в эту сеть стучаться. 192.168.0.2

Секция [DHCPv4]

Принимает настройки от DHCP-сервера.

Параметр Описание Пример
UseDomains= Использование полученного от DHCP-сервера домена в качестве адреса для DNS-поиска.
Если задано значение route, полученное доменное имя будет использоваться только для маршрутизации DNS-запросов, но не для поиска.
true
UseDNS= Объявление DNS-сервера при работе DHCP-сервера. yes
AllowList= Разделённый пробелами список IPv4-адресов, DHCP-предложения от которых принимать.
DenyList= Разделённый пробелами список IPv4-адресов, DHCP-предложения от которых отклонять.
При настроенном параметре AllowList= данный параметр игнорируется.
192.168.0.1 192.168.0.128/25

Секция [DHCPServer]

Отправляет настройки DHCP-клиентам.

Об этой секции крайне мало информации в руководствах, так что приведённые здесь параметры по большей части выцарапаны из исходников, а их описания, умолчания и примеры либо получены опытным путём, либо просеяны через поисковики.
Параметр Описание Пример (умолчание)
PoolOffset= С какого адреса в последнем октете данной подсети выдавать адреса. (0)
PoolSize= Сколько динамических адресов выделить в свободную раздачу. (0)
DefaultLeaseTimeSec= Умолчальный срок выдачи аренды, сек. (3600)
MaxLeaseTimeSec= Предельный срок выдачи аренды, сек. (43200)
PersistLeases= Cохранять ли информацию о выданных в аренду динамических адресах. (no)
EmitDNS= Сообщать ли клиенту адреса серверов разрешения доменных имён. yes
DNS= Адреса серверов разрешения доменных имён. 8.8.4.4 1.0.0.1
EmitLPR= Сообщать ли клиенту адреса серверов печати. (no)
LPR= Адреса серверов печати.
EmitPOP3= Сообщать ли клиенту адреса серверов приёма почты. (no)
POP3= Адреса серверов приёма почты.
EmitSMTP= Сообщать ли клиенту адреса серверов отправки почты. (no)
SMTP= Адреса серверов отправки почты.
EmitSIP= Сообщать ли клиенту адреса серверов телефонии. yes
SIP= Адреса серверов телефонии. 192.168.10.7
EmitRouter= Сообщать ли клиенту адреса маршрутизаторов. (no)
Router= Адреса маршрутизаторов.
EmitNTP= Сообщать ли клиенту адреса серверов точного времени. yes
NTP= Адреса серверов точного времени. 195.2.64.5 ntp1.zenon.net
EmitTimezone= Сообщать ли клиенту часовой пояс сети. yes
Timezone= Имя часового пояса. Europe/Moscow
SendVendorOption= Отправка по DHCPv4 в одном случае vendor-специфичных, а в другом — необработанных опций. Оба параметра можно указывать по нескольку раз в виде строки разделённых двоеточием значений option:type:value, которые могут принимать:
  • № опции — целое число от 1 до 254.
  • Тип данныхuint8, uint16, uint32, ipv4address, ipv6address или string.
  • Сами данные — строка со значением опции (спецсимволы экранировать escape-последовательностями языка «C»).

Пример: SendOption=119:string:\x07example\x03com\x00

При указании пустой строки заданные ранее опции очищаются.
SendOption=

Секция [DHCPServerStaticLease]

Таких секций может быть столько, скольки устройствам следует присвоить постоянные адреса.

Параметр Описание Пример
MACAddress= Аппаратный адрес устройства, которому всегда следует назначать одинаковый IP-адрес. 01:23:45:67:89:ab
Address= Статически присваиваемый устройству IP-адрес. 192.168.0.193

Пример скрипта для просмотра выданных адресов (потребуется установить пакет jq):

/usr/local/bin/leases  
#!/bin/sh
# https://askubuntu.com/questions/1415200/where-does-systemd-networkd-keep-dhcp-leases-when-acting-as-dhcpserver

NET=wifi
NUM=`ip -o li sh $NET`
ORG=org.freedesktop.network1

busctl -j get-property $ORG /${ORG//.//}/link/${NUM%%:*} $ORG.DHCPServer Leases |
jq -r  'def bytehex: [(./16|floor), .%16] | map(if . < 10 then 48 + . else . + 87 end) | implode;
    def formatentry:
        (.[2]|map(tostring)|join(".")) as $ip | (.[1][1:]|map(bytehex)|join(":")) as $mac | "\($ip)\t\($mac)";
    .data[] | formatentry' | sort -V

Файл .netdev

В таких файлах прописывается создание виртуальных сетевых интерфейсов. Ниже приведены некоторые параметры (подробнее см. man systemd.netdev(5)).

Секция [Match]

Определяет, может ли такой сетевой файл быть применен к заданному устройству.

Параметр Описание Пример
Host= Имя хоста или machine ID
Virtualization= Проверка на работу в виртуальной среде, и при необходимости — её конкретной реализации
(Virtualization=false — для хост-системы, Virtualization=true — для работы в контейнере или ВМ)
qemu

Секция [Netdev]

Параметр Описание Пример
Description= Описание netdev
Name= Имя интерфейса, используемое при создании файла netdev. Параметр обязателен. ipv4
Kind= Вид интерфейса. Например, bridge, bond, vlan, veth, sit и т.д. Параметр обязателен bridge
MTUBytes= Максимальная единица передачи в байтах, которую можно установить для устройства.
MACAddress= Указывает MAC-адрес, который будет использоваться устройством, или принимает специальное значение «none». Если установлено значение «none», systemd-networkd не запрашивает MAC-адрес устройства, и ядро назначит случайный MAC-адрес. Для устройств «tun», «tap» или «l2tp» параметр MACAddress= в секции [NetDev] не поддерживается и игнорируется (следует указать его в секции [Link] соответствующего файла systemd.network). Если эта опция не установлена, устройство «vlan» наследует MAC-адрес главного интерфейса. Для других типов сетевых устройств, если эта опция не установлена, MAC-адрес генерируется на основе имени интерфейса и идентификатора машины. none

Секция [Bond]

Применяется для сетевых связок/объединений.

Параметр Описание Пример
Mode= Режим объединения («balance-rr» — по умолчанию, «balance-alb», «balance-tlb», «balance-xor», «broadcast», «active-backup» или «802.3ad»). active-backup
TransmitHashPolicy= Политика хеширования передачи («layer2», «layer3+4», «layer2+3», «encap2+3» или «encap3+4»), используемой для выбора подчиненного устройства в режимах «balance-tlb», «balance-xor» и «802.3ad». layer3+4
LACPTransmitRate= Интервал отправки управляющих пакетов LACPDU по каналу LACP:
  • каждую секунду (fast) или
  • каждые 30 секунд (slow — по умолчанию).
fast
MIIMonitorSec= Периодичность MII мониторинга (мс). 0 (по умолчанию) отключает мониторинг канала MII. Округляется до ближайшей миллисекунды.
UpDelaySec= Задержка (мс, по умолчанию — 0) перед поднятием линка при обнаружении восстановления канала. Округляется до кратного MIIMonitorSec=. 0
DownDelaySec= Задержка (мс, по умолчанию — 0) перед отключением линка при обнаружении падения канала. Округляется до кратного MIIMonitorSec=. 0
AdSelect= Логика выбора агрегата 802.3ad («stable», «bandwidth» или «count»).
AdActorSystemPriority= Системный приоритет 802.3ad (число в диапазоне 1..65535).
AdUserPortKey= Определяемая пользователем часть ключа порта 802.3ad (число в диапазоне 0..1023).

Пример настройки:

/etc/systemd/network/25-bond.netdev  
[NetDev]
Name=bond1
Kind=bond

[Bond]
Mode=802.3ad
TransmitHashPolicy=layer3+4
MIIMonitorSec=1s
LACPTransmitRate=fast

Секция [VLAN]

Применяется только для сетевых устройств типа «vlan».

Параметр Описание Пример
Id= Идентификатор VLAN (целое число в диапазоне 1..4094). Параметр обязателен. 100
Protocol= Протокол интерфейса VLAN («802.1q» или «802.1ad»). По умолчанию используется значение ядра. 802.1q

Пример настройки:

/etc/systemd/network/30-vlan.netdev  
[Match]
Virtualization=no

[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100

Файл .link

Такие файлы выступают в качестве альтернативы пользовательским правилам udev и применяются при обнаружении менеджером нового устройства. Их можно использовать (но не всегда срабатывает) вместо редактирования правил udev для назначения интерфейсу нового имени. Файл состоит из секций [Match] и [Link]. Ниже приведены основные параметры обеих секций (подробнее см. man systemd.link(5)).

Секция [Match]

Определяет, может ли файл .link быть применен к заданному устройству.

Параметр Описание Пример
MACAddress= Разделённый пробелами список MAC-адресов (в шестнадцатеричном формате); в качестве внутреннего разделителя в адресах можно использовать двоеточия, дефисы и точки 08:00:27:4c:fc:4a 08-00-27-ae-ad:d5
Type= Разделённый пробелами список типов интерфейсов (как в выводе команды networkctl) ether wlan
Host= Имя хоста или machine ID
Virtualization= Проверка на работу в виртуальном окружении, и, при необходимости, проверка, конкретной реализации виртуального окружения (Virtualization=false — для хост-системы, Virtualization=true — для работы в контейнере или ВМ) qemu

Секция [Link]

Параметр Описание Пример
MACAddressPolicy= Политика, согласно которой должен быть установлен MAC-адрес («persistent», «random» или «none»). none
MACAddress= Использование конкретного адреса. Чтобы этот параметр вступил в силу, MACAddressPolicy= должен быть не задан, пуст или иметь значение «none».
NamePolicy= Политики выбора и назначения имён интерфейсов — например, kernel, keep и т.д.

Глобальный файл networkd.conf

В этом файле можно для всех интерфейсов и сетевых подключений указать некоторые параметры, свойственные файлам типа .network и .link.

Секция [Network]

Параметр Описание Пример
IPv4Forwarding= Управляют пересылкой на другой интерфейс входящих IPv4- и IPv6-пакетов соответственно. Если включено, входящие пакеты на любом сетевом интерфейсе будут пересылаться на любые другие интерфейсы сообразно таблице маршрутизации.

Принимают логическое значение.

Выставляют соответствующие sysctl-параметры:

  • net.ipv4.conf.default.forwarding и net.ipv4.conf.all.forwarding;
  • net.ipv6.conf.default.forwarding и net.ipv6.conf.all.forwarding.

Появились в systemd 256.

false
IPv6Forwarding= false

Подробнее см. man networkd.conf(5).

Примеры

Переключение с etcnet/NetworkManager на systemd-networkd

Подготовка

  1. Установка пакета systemd-timesyncd, который пригодится сразу после переезда, автоматически тянет за собой собственно systemd-networkd:
    # apt-get install -y systemd-timesyncd
  2. Дабы оставить возможность отката, вместо сноса etcnet пока достаточно просто переименовать его каталог:
    # mv -f /etc/net /etc/net.old
  3. Создать в каталоге /etc/systemd/network/ пару файлов автонастройки по DHCP для проводных (lan.network) и беспроводных (wifi.network) интерфейсов (предварительно удостоверившись в отсутствии настроенных на статические адреса туннелей, вланов, мостов и т.п.) со следующим содержимым:
    [Match]
    Name = X* # вместо "Х" — "e" для lan.network и "w" для wifi.network
    
    [Network]
    DHCP = ipv4
    

Проводная сеть

Пора переключиться с etcnet/NetworkManager на systemd-networkd:

# systemctl disable --now network NetworkManager && systemctl enable --now systemd-networkd

Для проверки работоспособности нового сервиса следует перезагрузиться с воткнутым сетевым кабелем (поскольку Wi-Fi ещё не настроен) и сразу после перезагрузки — убедиться, что адрес получен каким-то из интерфейсов:

$ networkctl
$ ip -o a | awk '!/inet6|lo /'
...или ровненько:
$ ip -o a | sed '/inet6/d;/lo /d;s|\s*inet|  \tinet|;s|brd|\tbrd|;s|scope|\tscope|;s|\\\s*|\t|'

Беспроводная сеть

Для подключения к Wi-Fi понадобится...

  1. Создать конфиг, например /etc/wpa_supplicant/wpa_supplicant-wlan0.conf:
     ctrl_interface=/run/wpa_supplicant
     ctrl_interface_group=wheel
     eapol_version=2
     fast_reauth=1
     ## Только для бродкомов ##
     #preassoc_mac_addr=0
     #mac_addr=0
     ##########################
    
  2. Добавить в этот файл точку доступа, не светя пароль в настройках:
    # wpa_passphrase "BSSID" "пароль" | sed '/#/d' >>/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
  3. Включить авторизацию: # systemctl enable wpa_supplicant@wlan0
  4. Перезагрузиться с выдернутым сетевым кабелем и вышеописанным способом проверить работоспособность уже Wi-Fi.

Для отключения Wi-Fi достаточно остановить авторизацию: # systemctl stop wpa_supplicant@wlan0

DNS

С получением ДНС-серверов по сети прекрасно справляется systemd-resolved, который нужно установить, запустить и нацелиться на /run/systemd/resolve/resolv.conf символьной ссылкой /etc/resolv.conf, заменив ею файл openresolv'а:

# apt-get install systemd-resolved
# systemctl enable --now systemd-resolved
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Для закрепления имени компьютера можно создать файл /etc/sysctl.d/sysname.conf со следующим содержимым:

kernel.hostname = <имя компьютера>
kernel.domainname = <имя домена> # опционально

Уборка

Если всё получилось, можно:

  • вернуть на место каталог /etc/net:
    # mv -f /etc/net.old /etc/net
  • удалить ненужные более openresolv и etcnet:
    # apt-get remove etcnet openresolv
Внимание! вместе с openresolv'ом приведённая команда тянет за собой NetworkManager и другие зависимости — чистит как пылесос!
  • перезагрузиться.

Заключение

Преимущества такого подхода к настройке сети:

  • работает в любом современном дистрибутиве linux в отличие от дистроспецифичных netplan, upstart, etcnet и пр.;
  • Wi-Fi подключается ещё при загрузке подобно проводному соединению, а не после входа юзера в иксы, как с NetworkManager;
  • ключи от точек доступа из системы не выудить, поскольку в конфиге — только их хэши.

Данная заметка — лишь первый шаг в освоении systemd-networkd и малая часть того, чем я пользуюсь и что он вообще умеет:

  • поднимать связки интерфейсов (bonds),
  • делить тегированные вланы,
  • строить мосты и туннели всех со всеми,
  • пробрасывать сети второго уровня поверх третьего,
  • выступать не только клиентом DHCP, но и его сервером (пусть и с минимумом настроек),
  • прибивать отдельные статические маршруты через винегрет интерфейсов и даже заполнять для них пространные таблицы маршрутизации…

…и многое другое.

Проводной интерфейс

Настройки сетевых интерфейсов могут изменяться через ЦУС (модуль Ethernet-интерфейсы), в этом случае создаются файлы конфигурации вида /etc/systemd/network/alterator-<интерфейс>.network.
Например, /etc/systemd/network/alterator-enp0s3.network.
Получение настроек по DHCP Назначение статики
[Match]
Name = enp0s3

[Network]
DHCP = ipv4
LinkLocalAddressing = no
IPv6AcceptRA = false

[DHCPv4]
UseDomains = true
UseDNS = yes
[Match]
Name = enp0s3

[Network]
IPv6AcceptRA = false
Address = 192.168.0.196/24
Gateway = 192.168.0.1
NTP = 192.168.0.100
DNS = 8.8.8.8
Domains = test.alt

Сетевой мост с DHCP

Для создания моста на интерфейсе enp0s8 следует выполнить следующие действия:

  1. Создать виртуальный интерфейс моста. Для этого создать файл, например, /etc/systemd/network/20-bridge.netdev со следующим содержимым:
    [NetDev]
    Name = vmbr0
    Kind = bridge
    MACAddress = 08:00:27:43:79:7b
    
    Можно не задавать MAC-адрес, в этом случае он будет сгенерирован на основе названия интерфейса и идентификатора машины.
  2. Перезапустить systemd-networkd.service, чтобы настройки вступили в силу: # systemctl restart systemd-networkd
  3. Проверка:
    $ ip a
    3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 08:00:27:43:79:7a brd ff:ff:ff:ff:ff:ff
    4: vmbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether 08:00:27:43:79:7b brd ff:ff:ff:ff:ff:ff
    
    Интерфейс vmbr0 обнаружен, но выключен (DOWN).
  4. Привязать реальный интерфейс (в примере — enp0s8) к виртуальному мосту. Для этого создать файл, например, /etc/systemd/network/20-bridge.network со следующим содержимым:
    [Match]
    Name = enp0s8
    
    [Network]
    Bridge = vmbr0
    
    Реальному сетевому интерфейсу не должно быть назначено никакого IP-адреса.
  5. Указать сетевые настройки виртуального моста. Для этого создать файл, например, /etc/systemd/network/20-bridge-dhcp.network со следующим содержимым:
    [Match]
    Name = vmbr0
    
    [Network]
    DHCP = ipv4
    
  6. Перезапустить systemd-networkd.service, чтобы настройки вступили в силу: # systemctl restart systemd-networkd
  7. Проверка:
    $ ip a
    3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP group default qlen 1000
        link/ether 08:00:27:43:79:7a brd ff:ff:ff:ff:ff:ff
    4: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 08:00:27:43:79:7b brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.189/24 metric 1024 brd 192.168.0.255 scope global dynamic vmbr0
           valid_lft 258385sec preferred_lft 258385sec
        inet6 fd47:d11e:43c1:0:a00:27ff:fe43:797b/64 scope global mngtmpaddr noprefixroute 
           valid_lft forever preferred_lft forever
        inet6 fe80::a00:27ff:fe43:797b/64 scope link 
           valid_lft forever preferred_lft forever
    

Объединение/связка (bonding) сетевых интерфейсов

1) Создать связку bond0 с режимом работы active-backup и задать для неё сетевые настройки:

/etc/systemd/network/bond0.netdev /etc/systemd/network/bond0.network
[NetDev]
Name = bond0
Kind = bond

[Bond]
Mode = active-backup
PrimaryReselectPolicy = always
MIIMonitorSec = 10s
[Match]
Name = bond0

[Network]
DHCP = ipv4

2) Включить в связку только enp0s8 и enp0s9 (первые два столбца) либо все интерфейсы по маске скопом (третий):

enp0s8.network enp0s9.network enp0.network
[Match]
Name = enp0s8

[Network]
Bond = bond0
PrimarySlave = true
[Match]
Name = enp0s9

[Network]
Bond=bond0
[Match]
Name = enp0s*

[Network]
Bond = bond0

3) Перезапустить systemd-networkd или перечитать настройки через # networkctl reload

4) Пример проверки командой networkctl:

Все кабели на месте Кабель от интерфейса enp0s8 отключён
IDX LINK   TYPE     OPERATIONAL SETUP     
  1 lo     loopback carrier     unmanaged
  2 enp0s3 ether    routable    configured
  3 enp0s8 ether    enslaved    configured
  4 enp0s9 ether    enslaved    configured
  6 bond0  bond     routable    configured

5 links listed.
IDX LINK   TYPE     OPERATIONAL      SETUP     
  1 lo     loopback carrier          unmanaged
  2 enp0s3 ether    routable         configured
  3 enp0s8 ether    no-carrier       configured
  4 enp0s9 ether    enslaved         configured
  6 bond0  bond     degraded-carrier configured

5 links listed.

VLAN

В данном примере создадим два VLAN-интерфейса с идентификаторами 100 и 200 на интерфейсе enp0s3.

1) Привязать сетевой интерфейс к VLAN-ам, для чего в его файл (например, /etc/systemd/network/enp0s3.network) добавить имена будущих VLAN-интерфейсов:

[Match]
Name = enp0s3

[Network]
DHCP = ipv4
LinkLocalAddressing = no
IPv6AcceptRA = false
VLAN = vlan100
VLAN = vlan200

[DHCPv4]
UseDomains = true
UseDNS = yes

2) Создать эту пару VLAN-интерфейсов:

/etc/systemd/network/vlan100.netdev /etc/systemd/network/vlan200.netdev
[NetDev]
Name = vlan100
Kind = vlan

[VLAN]
Id = 100
[NetDev]
Name = vlan200
Kind = vlan

[VLAN]
Id = 200

3) Указать сетевые настройки для каждой VLAN:

/etc/systemd/network/vlan100.network /etc/systemd/network/vlan200.network
[Match]
Name = vlan100

[Network]
DHCP = no

[Address]
Address = 192.168.30.25/25
[Match]
Name = vlan200

[Network]
DHCP = no

[Address]
Address = 192.168.30.145/25

4) Перезапустить службу для вступления настроек в силу: # systemctl restart systemd-networkd

5) Проверка:

$ ip -br a
lo              UNKNOWN  127.0.0.1/8       ::1/128 
enp0s3          UP       192.168.0.196/24  fe80::a00:27ff:fe85:1f31/64 
vlan100@enp0s3  UP       192.168.30.25/25  fe80::a00:27ff:fe43:79aa/64 
vlan200@enp0s3  UP       192.168.30.145/25 fe80::a00:27ff:fe85:1f31/64
  • или
$ networkctl 
IDX LINK    TYPE     OPERATIONAL SETUP      
  1 lo      loopback carrier     unmanaged
  2 enp0s3  ether    routable    configured 
  3 vlan100 vlan     routable    configured 
  4 vlan200 vlan     routable    configured 

4 links listed.

Ссылки

Настройка сети для контейнера nspawn

Туннелирование через WireGuard (в т.ч. посредством systemd-networkd)

Проброс L2 поверх L3 посредством VXLAN

Благодарности

Заготовку статьи вчерне накропал @NeuroFreak по следам моей ему помощи с настройкой домашней сети на лаптопе. Мне оставалось её вычитать, отрихтовать, дополнить и структурировать (на данный момент это вся первая часть раздела примеров, а также секции [Route], [DHCPServer] и [DHCPServerStaticLease]).

После чего подключились и другие, наполняя статью таблицами параметров и примерами настроек.

Обратная связь