Настройка сетевой конфигурации с помощью systemd-networkd

В составе базовых служб systemd имеется служба systemd-networkd, позволяющая унифицировать процедуры настройки сетевой конфигурации в разных современных операционных системах Linux. Функционал systemd-networkd доступен в systemd версии 210 и выше.

systemctl --version

Типы файлов конфигурации

Настраиваемые конфигурационные файлы systemd-networkd должны размещаться в каталоге /etc/systemd/network

Связать MAC с именем сетевого интерфейса

Файлы *.link в обязательном порядке создавать необходимости нет. Они нужны лишь в тех случаях, когда мы хотим каким-либо образом изменить физические параметры интерфейсов.

nano /etc/systemd/network/90-nic1-port0.link

[Match]
MACAddress=00:15:5d:b5:f4:01
 
[Link]
Name=nic1-port0

DHCP ipv4

Если мы изменили имя интерфейса с помощью *.link-файла, то при последующей настройке этого интерфейса в *.network-файле в параметре Name должно фигурировать именно изменённое имя интерфейса. То есть не eth0 а nic1-port0

nano /etc/systemd/network/80-lan0-dhcp.network

[Match]
Name=eth0
 
[Network]
DHCP=ipv4
LinkLocalAddressing=no
[Match]
Name=nic1-port0
 
[Network]
DHCP=ipv4
LinkLocalAddressing=no
[Match]
Name=eth*
 
[Network]
DHCP=ipv4
DHCP=ipv6

Опция LinkLocalAddressing поможет избежать появления в системе IPv6 адреса, если есть желание отключить IPv6 в системе полностью.

Static IP

nano /etc/systemd/network/50-lan0-static.network

[Match]
Name=enp8s0
 
[Network]
Description=Local network
Address=192.168.1.20/24
Gateway=192.168.1.1
DNS=192.168.1.1 192.168.2.1
Domains=sub1.holding.com sub2.holding.com
LinkLocalAddressing=no

Отключить применение сетевых настроек из файла /etc/network/interfaces

mv /etc/network/interfaces /etc/network/interfaces.save

Включить systemd-networkd

systemctl enable systemd-networkd

systemctl start systemd-networkd

После этого изменения сразу всупают в силу.

Проверка

journalctl -u systemd-networkd.service | networkctl list | networkctl status

DNS

apt install systemd-resolved -y

ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

systemctl enable --now systemd-resolved

systemctl restart systemd-networkd

resolvectl status

В случае проблем: использовать прямой DNS без systemd-resolved

rm -f /etc/resolv.conf

echo "nameserver 8.8.8.8" > /etc/resolv.conf

echo "nameserver 8.8.4.4" >> /etc/resolv.conf