Библиотека сайта rus-linux.net
Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux
Оригинал: How to switch from NetworkManager to systemd-networkd on Linux
Автор: Dan Nanni
Дата публикации: 31 августа 2015 г.
Перевод: А.Панин
Дата перевода: 25 июля 2016 г.
Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux
Процесс внедрения компонентов системы инициализации systemd в различные дистрибутивы Linux вызывает неоднозначные оценки и зачастую сопровождается полемикой между ее сторонниками и противниками. Тем не менее, на сегодняшний день в большинстве наиболее популярных дистрибутивов Linux используемой по умолчанию системой инициализации является именно systemd.
Называемая автором "постоянно совершенствуемой, никогда не завершающей свое развитие и изменяющейся по мере развития технологий", система инициализации systemd была спроектирована не как отдельный демон инициализации, а как сложная система и платформа для управления системными службами, которая предоставляет развивающуюся экосистему с эквивалентами основных системных демонов, библиотек и утилит.
Одним из многих дополнительных компонентов systemd является менеджер сетевых соединений systemd-networkd, который отвечает за конфигурацию сетевых интерфейсов в рамках экосистемы systemd. С помощью sytemd-networkd вы можете настроить интерфейсы устройств, работающих с сетями, в которых используются как серверы DHCP, так и статическая адресация. Он также может использоваться для настройки виртуальных сетевых интерфейсов, позволяющих реализовать мосты, туннели или виртуальные сети. systemd-networkd не может непосредственно работать с беспроводными сетями, но вы всегда можете воспользоваться службой wpa_supplicant для настройки адаптеров беспроводных сетей, после чего передать управление сетевыми интерфейсами этих адаптеров systemd-networkd.
Во многих дистрибутивах Linux для управления сетевыми соединениями использовался и используется по сей день широко известный менеджер сетевых соединений NetworkManager. При сравнении менеджеров сетевых соединений NetworkManager и systemd-networkd несложно прийти к выводу о том, что последний является менее стабильным и функциональным. Например, он не обладает логикой, реализованной в менеджере сетевых соединений NetworkManager и позволяющей поддерживать постоянное соединение вашего компьютера с сетью по доступному в данный момент сетевому интерфейсу из заданного пользователем множества сетевых интерфейсов. Он не позволяет использовать хуки во время активации и деактивации сетевых интерфейсов для создания дополнительных сценариев. При этом systemd-networkd отлично интегрирован с остальными компонентами systemd (такими, как системная служба resolved, предназначенная для разрешения доменных имен по протоколу DNS, системная служба timesyncd, предназначенная для синхронизации времени по протоколу NTP и системная служба udevd, предназначенная для отслеживания состояния аппаратных устройств), поэтому со временем он может начать играть более важную роль в окружении systemd.
Если вас не смущает направление развития системы инициализации systemd, вы вполне можете рассмотреть возможность замены менеджера сетевых соединений NetworkManager на systemd-networkd. Если же вы являетесь убежденным противником systemd и довольны работой NetworkManager или базовых компонентов вашего дистрибутива для управления сетевыми соединениями, вам ничего не придется делать.
Те из читателей, которые все же решили попробовать systemd-networkd в работе, смогут найти в данной статье описание методики замены менеджера сетевых соединений NetworkManager на systemd-networkd в Linux.
Начальные требования
Компонент systemd-networkd поставляется в составе пакета systemd начиная с версии 210. Исходя из этого, он может быть задействован в таких дистрибутивах, как Debian 8 "Jessie" (systemd 215), Fedora 21 (systemd 217), Ubuntu 15.04 (systemd 219) или их более новых версиях.
Если вы работаете с другим дистрибутивом, вам стоит проверить версию пакета systemd перед тем, как приступать к выполнению описанных в статье операций.
$ systemctl --version
Переход с NetworkManager на systemd-networkd
Процесс перехода с NetworkManager на systemd-networkd (как и обратный процесс) не связан с какими-либо трудностями.
Во-первых, следует деактивировать системную службу NetworkManager и активировать системную службу systemd-networkd следующим образом:
$ sudo systemctl disable NetworkManager $ sudo systemctl enable systemd-networkd
Вам также потребуется активировать системную службу systemd-resolved, которая используется systemd-networkd для разрешения доменных имен. Данная системная служба по своей сути является кэштрующим DNS-сервером:
$ sudo systemctl enable systemd-resolved $ sudo systemctl start systemd-resolved
После запуска системная служба systemd-resolved создаст свой собственный файл resolv.conf
в одной из поддиректорий директории /run/systemd
. Однако, обычной практикой является сохранение этого файла по пути /etc/resolv.conf
, причем многие сетевые приложения все еще используют именно файл /etc/resolv.conf
. Исходя из этого, вам придется создать символьную ссылку с именем /etc/resolv.conf
следующим образом:
$ sudo rm /etc/resolv.conf $ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Настройка сетевых соединений с помощью systemd-networkd
Для настройки сетевых соединений, которые будут устанавливаться с помощью менеджера сетевых соединений systemd-networkd, вам придется добавить информацию о каждом из этих соединений в текстовый файл с расширением .network
. Все конфигурационные файлы рассматриваемого менеджера сетевых соединений должны храниться в директории /etc/systemd/network
, откуда они впоследствии будут загружаться. В том случае, если в директории будет сохранено множество конфигурационных файлов, systemd-networkd отсортирует их имена в лексическом порядке, после чего загрузит и обработает их по очереди.
Давайте начнем с создания директории /etc/systemd/network:
$ sudo mkdir /etc/systemd/network
Подключение к сети с сервером DHCP
Для начала настроим соединение с сетью с сервером DHCP. Для этого нам придется создать следующий конфигурационный файл. Имя файла может быть произвольным, но следует помнить о том, что перед загрузкой конфигурационных файлов менеджер сетевых соединений осуществляет сортировку их имен в лексическом порядке.
$ sudo vi /etc/systemd/network/20-dhcp.network
[Match] Name=enp3* [Network] DHCP=yes
Как несложно увидеть выше, каждый файл конфигурации сетевого соединения содержит одну или несколько "секций", причем перед каждой из секций присутствует заголовок [XXX]. Каждая секция содержит одну или большее количество пар ключ/значение. Секция [Match]
описывает сетевое устройство или множество устройств, настройка которых осуществляется с помощью данного файла конфигурации. Например, данный файл конфигурации относится к любому сетевому интерфейсу, имя которого начинается с enp3
(например, enp3s0
, enp3s1
, enp3s2
и.т.д.). Именно к этим интерфейсам применяется конфигурация сетевого соединения на основе сервера DHCP, описанная в секции [Network]
.
Подключение к сети со статической адресацией
Если вы хотите установить статический IP-адрес для сетевого интерфейса, вы можете создать следующий файл конфигурации:
$ sudo vi /etc/systemd/network/10-static-enp3s0.network
[Match] Name=enp3s0 [Network] Address=192.168.10.50/24 Gateway=192.168.10.1 DNS=8.8.8.8
Как вы можете догадаться, для сетевого интерфейса enp3s0
будет установлен статический IP-адрес 192.168.10.50/24
, адрес основного шлюза 192.168.10.1
и адрес сервера доменных имен 8.8.8.8
. В данном случае имеется одна тонкость, которая заключается в том, что фактически имя сетевого интерфейса enp3s0
совпадает с шаблоном имени сетевого интерфейса, который был задан ранее при настройке соединения с сетью с сервером DHCP. Однако, ввиду того, что файл конфигурации с именем "10-static-enp3s0.network"
будет обработан перед файлом конфигурации с именем "20-dhcp.network"
в соответствии с порядком следования символов, статическая конфигурация сетевого соединения будет иметь приоритет перед конфигурацией сетевого соединения с использованием сервера DHCP в случае сетевого интерфейса enp3s0
.
После того, как вы закончите создание файлов конфигурации, вам придется перезапустить системную службу systemd-networkd или перезагрузить систему.
$ sudo systemctl restart systemd-networkd
Вы можете проверить состояние описанных системных служб с помощью следующих команд:
$ systemctl status systemd-networkd $ systemctl status systemd-resolved
Настройка виртуальных сетевых устройств с помощью systemd-networkd
Демон systemd-networkd также позволяет настраивать виртуальные сетевые устройства для организации сетевых мостов, виртуальных локальных сетей, туннелей, оверлейных сетей, агрегированных соединений и.т.д. Вы должны настраивать виртуальные устройства с помощью конфигурационных файлов с расширением .netdev
.
Ниже я продемонстрирую методику настройки сетевого интерфейса для организации сетевого моста.
Настройка сетевого моста в Linux
Если вы желаете настроить сетевой мост в Linux (представленный сетевым интерфейсом br0
) и добавить физический сетевой интерфейс (eth1
) в этот мост, вы можете создать следующий конфигурационный файл:
$ sudo vi /etc/systemd/network/bridge-br0.netdev
[NetDev] Name=br0 Kind=bridge
После этого вам придется настроить интерфейс сетевого моста br0
и вспомогательный сетевой интерфейс eth1
с помощью конфигурационных файлов с расширением .network
следующего содержания:
$ sudo vi /etc/systemd/network/bridge-br0-slave.network
[Match] Name=eth1 [Network] Bridge=br0
$ sudo vi /etc/systemd/network/bridge-br0.network
[Match] Name=br0 [Network] Address=192.168.10.100/24 Gateway=192.168.10.1 DNS=8.8.8.8
Наконец, нужно будет перезапустить системную службу systemd-networkd:
$ sudo systemctl restart systemd-networkd
Впоследствии вы сможете воспользоваться инструментом brctl
для проверки корректности создания интерфейса сетевого моста br0
.
Заключение
Хотя systemd и считается системой инициализации для Linux, без сомнения рано или поздно в ее составе должен был появиться инструмент для управления сетевыми соединениями, аналогичный systemd-networkd. На данном этапе, однако, менеджер сетевых соединений systemd-networkd больше подходит для серверов, которые работают с относительно стабильными конфигурациями сетевых интерфейсов. В случае настольных компьютеров и ноутбуков, которые работают с непостоянными конфигурациями проводных и беспроводных соединений, менеджер сетевых соединений NetworkManager все так же остается предпочтительным выбором.
Если вы хотите узнать немного больше о менеджере сетевых соединений systemd-networkd, вы можете обратиться к его