Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Раздел для тем в стадии оформления.

Автор темы
symon2014

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение symon2014 » 11 окт 2016, 04:25

Как заменить менеджер сетевых соединений 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 создаст свой собственный файл 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, вы можете обратиться к его официальной странице руководства с полным списком поддерживаемых секций и ключей файлов конфигурации.

Аватара пользователя

StarMAUGLI
Сообщения: 1650
Зарегистрирован: 10 сен 2016, 07:16
Решено: 19
Откуда: Москва
Благодарил (а): 698 раз
Поблагодарили: 187 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение StarMAUGLI » 08 сен 2018, 15:57

1. Как узнать что у меня именно сейчас работает? Подозреваю, что глюки с сетью которые я имею вызваны тем, что у меня установлены оба менеджера.
2. В статье описано как запустить system-network вместо NetworkManager'а. А как провернуть обратную задачу? (установить NM вместо s-n)

Аватара пользователя

Dja
Сообщения: 7068
Зарегистрирован: 27 авг 2016, 17:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 741 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение Dja » 08 сен 2018, 16:05

StarMAUGLI, Сhkservice - Утилита для управления systemd-юнитами (Пост Chocobo #49050)
Смотрим что включено и запущено. И делаем соответствующие действия (Оставляем активированным и включенным нужное и выключаем и дезактивируем ненужное). Вкл network-манагер, выкл - другой

Аватара пользователя

StarMAUGLI
Сообщения: 1650
Зарегистрирован: 10 сен 2016, 07:16
Решено: 19
Откуда: Москва
Благодарил (а): 698 раз
Поблагодарили: 187 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение StarMAUGLI » 08 сен 2018, 16:21

Dja, уж послал, так послал: 497 строк в этом чексервисе... еще что ли три сервиса где-нибудь нарыть для ровного счета? :-D
ОК
В любом случае - спасибо. Буду пробовать. :dash2:

Аватара пользователя

Dja
Сообщения: 7068
Зарегистрирован: 27 авг 2016, 17:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 741 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение Dja » 08 сен 2018, 16:25

StarMAUGLI, ну так никто не мешает взять 2 строки с первого поста.
Я думаю должно быть что-то типа

Код: Выделить всё

sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
Но там в интерфейсе это сделать проще.

Аватара пользователя

StarMAUGLI
Сообщения: 1650
Зарегистрирован: 10 сен 2016, 07:16
Решено: 19
Откуда: Москва
Благодарил (а): 698 раз
Поблагодарили: 187 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение StarMAUGLI » 08 сен 2018, 16:32

Dja писал(а):
08 сен 2018, 16:25
Я думаю должно быть что-то типа
и это все?
Что бы наоборот включить вон целая статья на много букв.

Аватара пользователя

Dja
Сообщения: 7068
Зарегистрирован: 27 авг 2016, 17:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1368 раз
Поблагодарили: 741 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение Dja » 08 сен 2018, 16:34

symon2014 писал(а):
11 окт 2016, 04:25
Процесс перехода с NetworkManager на systemd-networkd (как и обратный процесс) не связан с какими-либо трудностями.

Во-первых, следует деактивировать системную службу NetworkManager и активировать системную службу systemd-networkd следующим образом:

$ sudo systemctl disable NetworkManager
$ sudo systemctl enable systemd-networkd
Как видим так и есть.

Аватара пользователя

StarMAUGLI
Сообщения: 1650
Зарегистрирован: 10 сен 2016, 07:16
Решено: 19
Откуда: Москва
Благодарил (а): 698 раз
Поблагодарили: 187 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение StarMAUGLI » 08 сен 2018, 17:21

Dja, вроде теперь работает NM
посмотрю как будет в течение времени (лучше/хуже?)

Аватара пользователя

StarMAUGLI
Сообщения: 1650
Зарегистрирован: 10 сен 2016, 07:16
Решено: 19
Откуда: Москва
Благодарил (а): 698 раз
Поблагодарили: 187 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение StarMAUGLI » 07 сен 2020, 07:10

После перехода на systemd-networkd (выполнения рекомендаций статьи) открываю системный монитор, а там все равно висит Network Manager. Можно ли его в этом случае "прибить" средствами самого системного монитора? сеть не отвалится?

UPD: Не дождался ответа. Попробовал. Оказалось - можно. Все продолжило работать. Последнее время нетворк-менеджер все равно все время рвал связь.

Аватара пользователя

slant
Сообщения: 4723
Зарегистрирован: 21 июн 2017, 15:09
Решено: 107
Благодарил (а): 54 раза
Поблагодарили: 2101 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение slant » 07 сен 2020, 13:57

1. NetworkManager довольно лояльно относится к соединениям настроенным не через него а чем то другим. Просто показывает их, но не управляет.
2. Раздел про мосты в инструкции - совершенно бесполезен в текущем виде. Пример моста с одним интерфейсом = сферический куб в киселе. :) С равным итогом можно весь текущий раздел сократить до одной фразы "Так же с помощью systemd-networkd можно настраивать мосты."

Аватара пользователя

symon2014
Сообщения: 5994
Зарегистрирован: 16 дек 2017, 18:59
Решено: 40
Откуда: Феодосия
Благодарил (а): 32 раза
Поблагодарили: 758 раз

Как заменить менеджер сетевых соединений NetworkManager на systemd-networkd в Linux

Сообщение symon2014 » 07 сен 2020, 15:49

:hoho: Откопали потерянный мной в прошлой жизни и брошенный в Песочнице некропост. :-D
:close:

Вернуться в «Песочница»