Systemd-networkd
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]
Определяет способ настройки устройства.
Но лучше ограничиться одними 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, которые могут принимать:
Пример: |
При указании пустой строки заданные ранее опции очищаются. |
| 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 |
| 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-параметры:
Появились в systemd 256. |
false |
| IPv6Forwarding= | false |
Подробнее см. man networkd.conf(5).
Примеры
Переключение с etcnet/NetworkManager на systemd-networkd
Подготовка
- Установка пакета systemd-timesyncd, который пригодится сразу после переезда, автоматически тянет за собой собственно
systemd-networkd:- # apt-get install -y systemd-timesyncd
- Дабы оставить возможность отката, вместо сноса
etcnetпока достаточно просто переименовать его каталог:- # mv -f /etc/net /etc/net.old
- Создать в каталоге /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 понадобится...
- Создать конфиг, например
/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 ##########################
- Добавить в этот файл точку доступа, не светя пароль в настройках:
# wpa_passphrase "BSSID" "пароль" | sed '/#/d' >>/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
- Включить авторизацию: # systemctl enable wpa_supplicant@wlan0
- Перезагрузиться с выдернутым сетевым кабелем и вышеописанным способом проверить работоспособность уже 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, но и его сервером (пусть и с минимумом настроек),
- прибивать отдельные статические маршруты через винегрет интерфейсов и даже заполнять для них пространные таблицы маршрутизации…
…и многое другое.
Проводной интерфейс
/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 следует выполнить следующие действия:
- Создать виртуальный интерфейс моста. Для этого создать файл, например, /etc/systemd/network/20-bridge.netdev со следующим содержимым:
[NetDev] Name = vmbr0 Kind = bridge MACAddress = 08:00:27:43:79:7b
- Можно не задавать MAC-адрес, в этом случае он будет сгенерирован на основе названия интерфейса и идентификатора машины.
- Перезапустить systemd-networkd.service, чтобы настройки вступили в силу: # systemctl restart systemd-networkd
- Проверка:
$ 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).
- Привязать реальный интерфейс (в примере — enp0s8) к виртуальному мосту. Для этого создать файл, например, /etc/systemd/network/20-bridge.network со следующим содержимым:
[Match] Name = enp0s8 [Network] Bridge = vmbr0
- Реальному сетевому интерфейсу не должно быть назначено никакого IP-адреса.
- Указать сетевые настройки виртуального моста. Для этого создать файл, например, /etc/systemd/network/20-bridge-dhcp.network со следующим содержимым:
[Match] Name = vmbr0 [Network] DHCP = ipv4
- Перезапустить systemd-networkd.service, чтобы настройки вступили в силу: # systemctl restart systemd-networkd
- Проверка:
$ 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]).
После чего подключились и другие, наполняя статью таблицами параметров и примерами настроек.