В systemd доступна служба systemd-networkd, которую можно использовать для настройки сетевых параметров хоста. В этой статье мы рассмотрим пример как использовать systemd-networkd для настройки сети на примере Debian/Ubuntu.
Проверьте, что версия systemd в Linux не ниже 210:
$ systemctl --version
По умолчанию в современных дистрибутивах Linux для настройки сети используется более тяжелый Network Manager. Как правило Network Manager удобно использовать на десктопных компьютерах, т.к. он имеет GUI для всех графических сред, поддерживает простую работу с с беспроводными WLAN интерфейсами, позволяет управлять VPN подключениями. На серверах Linux Network Manager использовать нецелесообразно из-за высокого потребления ресурсов (20 Мб vs 2 Мб для systemd-networkd).
Проверьте, что NetworkManager запущен:
$ nmcli connection
$ systemctl status NetworkManager
Отключите его:
$ sudo systemctl stop NetworkManager
$ sudo systemctl disable NetworkManager
Если у вас есть сети настроенные через /etc/network, нужно отключить применение сетевых настроек из файла /etc/network/interfaces. Проще всего просто переименовать это файл:
$ sudo mv /etc/network/interfaces /etc/network/interfaces.save
Конфигурационные файлы systemd-networkd можно поместить в директорию /etc/systemd/network или в /usr/lib/systemd/network (более низкий приоритет).
Есть три типа конфигурационных файлов:
- .link – описывают физические параметры интерфейсов (имя, MAC, настройки MTU)
- .netdev – используются для описания виртуальных интерфейсов, и мостов
- .network – содержат сетевые настройки интерфейса (IP, DNS, шлюз)
Создадим конфигурационный файл со статическими сетевыми настройками для интерфейса enp0s3 (имя файла может быть любое, главное указать правильно расширение):
$ sudo mcedit /etc/systemd/network/lan-static.network
[Match] Name=ens33 [Network] Description=Local network Address=192.168.100.22/24 Gateway=192.168.100.1 DNS=192.168.100.10 192.168.110.10 Domains=vmblog.local LinkLocalAddressing=no NTP=time.google.com # Если вы хотите использовать DHCP, оставьте только параметр DHCP=yes
В секции [match] можно указать следующие ключи:
- Name= имя сетевого интерфейса (например enp2s0, en*). Можно получить имя интерфейса с помощью команды
ip a
- Host= имя компьютера
- Virtualization = no (проверить, запущена ли ОС в виртуализированной среде)
- MACAddress=11:22:33:44:55:66
В одной секции [Match] может быть несколько условий. Сетевой профиль примениться, если выполнены все условия из этой секции.
Включите службу systemd-networkd:
$ sudo systemctl enable systemd-networkd
$ sudo systemctl start systemd-networkd
Проверьте статус сетевых интерфейсов:
$ networkctl list
Выведите сетевые настройки:
$ networkctl status
После внесения изменения в конфигурационные файлы с сетевыми настройками нужно перезапускать networkd:
$ sudo systemctl restart systemd-networkd
Вывести лог systemd-networkd:
$ journalctl -u systemd-networkd.service