systemd-networkd (Русский)

From ArchWiki
Jump to: navigation, search

Состояние перевода: На этой странице представлен перевод статьи Systemd-networkd. Дата последней синхронизации: 28 февраля 2016. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Дополните перевод разделов в которых это требуется: Использование с контейнерами, Уведомление, Статические IP-сети (обсуждение: Talk:Systemd-networkd (Русский)#)

systemd-networkd - это системный демон, который управляет сетевыми настройками. По мере появления он обнаруживает и настраивает сетевые устройства, также может создавать виртуальные сетевые устройства. Эта служба может быть особенно полезной для установки сложных сетевых настроек, для контейнера управляемым Systemd-nspawn или для виртуальных машин. А также отлично работает на простом соединении.

Основы использования

Пакет systemd является частью установки Arch по умолчанию, и содержит все необходимые файлы для работы в проводной сети. Беспроводные адаптеры могут быть установлены другими службами, такими как wpa_supplicant, они будут рассмотрены далее в этой статье.

Обязательные службы и установки

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

  • systemd-networkd.service
  • systemd-resolved.service
Примечание: systemd-resolved на самом деле требуется, только если вы указали записи DNS в файлах .network или если вы хотите получить адреса DNS от DHCP клиента networkd.

Для совместимости с resolv.conf, удалите или переименуйте существующий файл и создайте следующую символическую ссылку:

# ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

Для того, чтобы использовать локальную DNS-заглушку распознающую systemd-resolved (и, следовательно, использовать LLMNR и DNS слияние каждого интерфейса), замените dns с resolve в /etc/nsswitch.conf:

hosts: files resolve myhostname

Смотрите systemd-resolved(8), resolved.conf(5) и Systemd README.

Примечание: Systemd's resolve не может найти локальный домен, когда дается только имя хоста, даже когда UseDomains=yes или Domains=[domain-list] присутствует в соответствующем файле .network, и что файл производит ожидаемый search [domain-list] в resolv.conf. Если вы столкнулись с этой проблемой:
  • Переключитесь на использование полного доменного имени
  • Используйте разрешения имен хостов /etc/hosts
  • Откатитесь назад, используя glibc's dns вместо systemd's resolve

Примеры настроек

Все настройки этого раздела хранятся в foo.network в /etc/systemd/network. Для получения полного списка опций и порядка обработки, см. #Файлы настроек и страницу man systemd.network.

Systemd/udev автоматически назначает предсказуемые, стабильные имена сетевого интерфейса для всех локальных Ethernet, WLAN, и WWAN интерфейсов. Воспользуйтесь networkctl list, - список устройств в системе.

После внесения изменений в файл настройки, перезагрузите демон networkd.

# systemctl restart systemd-networkd 
Примечание: В приведенных ниже примерах, enp1s0 это проводной адаптер, а wlp2s0 беспроводной адаптер. Эти имена могут быть другими в разных системах.

Проводной адаптер с DHCP

/etc/systemd/network/wired.network
[Match]
Name=enp1s0

[Network]
DHCP=ipv4

Проводной адаптер использующий статический IP

/etc/systemd/network/wired.network
[Match]
Name=enp1s0

[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1

Для больших вариантов, таких как сети с указанием DNS-серверов и широковещательного адреса, смотрите страницу man systemd.network(5).

Беспроводной адаптер

Для того, чтобы подключиться к беспроводной сети с systemd-networkd, беспроводной адаптер настраивается с другой службой, например потребуется wpa_supplicant. В этом примере, соответствующий файл службы Systemd, которая должна быть включена в wpa_supplicant@wlp2s0.service.

/etc/systemd/network/wireless.network
[Match]
Name=wlp2s0

[Network]
DHCP=ipv4

Если беспроводной адаптер имеет статический IP-адрес, настройка является такой же (кроме имени интерфейса) как в проводном адаптере.

Проводные и беспроводные адаптеры на одной машине

Такая настройка проводной и беспроводной связи DHCP IP (использующих Metric директивы) даст возможность ядру решать на лету, какой из них использовать. Таким образом, когда проводное соединение отключено, никакого обрыва соединения не будет.

Маршрут метрики ядра (также как настройка ip) решает, какой маршрут использовать для исходящих пакетов, в тех случаях, когда установлено несколько Match. Это происходит в том случае, когда оба устройства (проводное и беспроводное) в системе имеют активные соединения. Чтобы разорвать связь, ядро использует метрики. Если одно из соединений завершается, другое автоматически выигрывает без наличия разрывов (текущие трансферты могут до сих пор не справиться с этим хорошо, но это в другом слое OSI).

Примечание: Опция Metric для статических маршрутов, а опция RouteMetric для не использующих статические маршруты.
/etc/systemd/network/wired.network
[Match]
Name=enp1s0

[Network]
DHCP=ipv4

[DHCP]
RouteMetric=10
/etc/systemd/network/wireless.network
[Match]
Name=wlp2s0

[Network]
DHCP=ipv4

[DHCP]
RouteMetric=20

IPv6 расширения конфиденциальности

Примечание: Broken on v228 https://github.com/systemd/systemd/issues/2242

Файлы настроек

Файлы настроек расположены в /usr/lib/systemd/network, в динамическом каталоге выполнения сети /run/systemd/network и локальном каталоге сетевого администрирования /etc/systemd/network. Файлы в /etc/systemd/network имеют самый высокий приоритет.

Существуют три типа файлов настройки.

  • .network файлы. Они будут применять сетевую настройку для matching (совпадения) устройства
  • .netdev файлы. Они создадут virtual network device для среды matching
  • .link файлы. Когда появится сетевое устройство, udev сначала посмотрит matching файла .link

Все они следуют тем же правилам:

  • Если все условия в [Match] разделе совпали, профиль будет активирован
  • Пустая секция [Match] означает, что профиль будет применяться в любом случае (можно сравнить с шуткой *)
  • Каждая запись с синтаксисом NAME=VALUE является ключевой
  • все файлы настроек вместе сортируются и обрабатываются в лексическом порядке, независимо от каталога, в котором они живут
  • файлы с одинаковым именем сменяют друг друга
Совет:
  • переопределить системный файл /usr/lib/systemd/network на постоянную основу (то есть даже после обновления) можно поместив файл с таким же именем в каталог /etc/systemd/network и создав для него символьную ссылку в /dev/null
  • символ * можно использовать в VALUE (например, значению en* будет соответствовать любое устройство Ethernet)
  • в соответствии с информацией, данной в этом сообщении Arch-general, лучше всего выставлять параметры для конкретных сетевых контейнеров внутри контейнера при помощи файлов networkd

Файлы network

Эти файлы направлены на установку переменных сетевых настроек, в основном для серверов и контейнеров.

Ниже приводится основная структура файла МойПрофиль.network:

/etc/systemd/network/МойПрофиль.network
[Match]
вертикальный список ключей

[Network]
вертикальный список ключей

[Address]
вертикальный список ключей

[Route]
вертикальный список ключей

[Match] раздел

Наиболее распространенные ключи:

  • Name= имя устройства (например Br0, enp4s0, en*)
  • Host= имя хоста машины
  • Virtualization= проверить, является ли система выполненной в виртуализированной среде или нет. Virtualization=no ключ будет применяться только на вашей машине, в то время как Virtualization=yes применяются к любому контейнеру или VM.

[Network] раздел

Наиболее распространенные ключи:

  • DHCP= включает поддержку DHCPv4 и/или DHCPv6. Принимает: yes, no, ipv4 или ipv6
  • DNS= является DNS адрес сервера. Вы можете указать этот параметр более одного раза
  • Bridge= это имя моста, чтобы добавить ссылку на
  • IPForward= по умолчанию no. Это разрешает IP forwarding, выполняя пересылку в соответствии с таблицей маршрутизации и необходим для настройк Internet sharing. Заметим, что включение IPForward= относится ко всем сетевым интерфейсам.
  • Domains= список доменов, используемых для разрешения имен DNS хоста.

Для подробностей, смотрите systemd.network(5).

[Address] раздел

Большинство общих ключ в разделе [Address]:

  • Address= статический IPv4 или IPv6 адрес и его длина префикса, разделенных символом / (например 192.168.1.90/24). Эта опция обязательна, если не используется DHCP

[Route] раздел

Большинство общих ключ в разделе [Route]:

  • Gateway= это адрес шлюза вашей машины. Эта опция обязательна если не используется DHCP.

Обратитесь к systemd.network(5) для исчерпывающего списка ключей.

Совет: you can put the Address= and Gateway= keys in the [Network] section as a short-hand if Address= contains only an Address key and Gateway= section contains only a Gateway key

Файлы NetDev

Эти файлы будут создавать виртуальные сетевые устройства.

Ниже приводится основная структура файлаMydevice.netdev:

/etc/systemd/network/MyDevice.netdev
[Match]
вертикальный список ключей

[NetDev]
вертикальный список ключей

[Match] раздел

Большинство общих ключ в Host= и Virtualization=

[Netdev] раздел

Наиболее распространенные ключи:

  • Name= это имя интерфейса, используемое при создании netdev. Эта опция обязательна
  • Kind= это вид netdev. Например, поддерживаются: bridge, bond, vlan, veth, sit, и т.д. Эта опция обязательна

Чтобы увидеть исчерпывающий перечень ключей, обратитесь к странице справочного руководства systemd.netdev(5)

Файлы link

Эти файлы являются альтернативой пользовательским правилам udev и будут применяться при как появлении устройства.

Ниже приводится основная структура файла МоеУстройство.link:

/etc/systemd/network/МоеУстройство.link
[Match]
вертикальный список ключей

[Link]
вертикальный список ключей

Раздел [Match] будет определять, если данный связующий файл может быть применён к данному устройству, когда раздел [Link] определяет настройку устройства.

[Match] раздел

Наиболее распространенные ключи MACAddress=, Host= и Virtualization=.

Type= тип устройства (например vlan)

[Link] раздел

Наиболее распространенные ключи:

MACAddressPolicy= либо persistent когда оборудование имеет постоянный MAC-адрес (должно быть на большинстве аппаратных) или random, который даёт случайный MAC-адрес устройства.

MACAddress= должен использоваться, когда не указан MACAddressPolicy=

Примечание: Системе, как правило, /usr/lib/systemd/network/99-default.link достаточно для большинства случаев.

Использование с контейнерами

Служба доступна с systemd >= 210. Хотите сипользовать #Основы использования systemctl|включение и запуск systemd-networkd.service на хосте и контейнере.

Для отладки, настоятельно рекомендуется установить пакеты bridge-utils, net-tools и iproute2.

Если вы используете systemd-nspawn, вам, возможно, потребуется изменить systemd-nspawn@.service и добавить параметры загрузки в строку ExecStart. Для исчерпывающего списка варианттов, обратитесь к systemd-nspawn(1). Обратите внимание, если вы хотите, использовать автоматическую настройку DNS от DHCP, то Вам необходимо включить systemd-resolved и символьную ссылку /run/systemd/resolve/resolv.conf на /etc/resolv.conf. Для большей информации, смотрите systemd-resolved.service(8).

Tango-mail-mark-junk.pngЭта статья или раздел нуждается в улучшении грамматики, форматирования или стиля.Tango-mail-mark-junk.png

Причина: Слишком много пунктов для совета, некоторые из них очень похожи, так что они могут быть объединены. (обсуждение: Talk:Systemd-networkd (Русский)#)
Совет: Before you start to configure your container network, it is useful to:
  • disable all your netctl services. This will avoid any potential conflicts with systemd-networkd and make all your configurations easier to test. Furthermore, odds are high you will end with few or even no netctl activated profiles. The netctl list command will output a list of all your profiles, with the activated one being starred.
  • disable the systemd-nspawn@.service and use the systemd-nspawn -bnD /path_to/your_container/ command as root to boot the container. To log off and shutdown inside the container systemctl poweroff is used as root. Once the network setting meets your requirements, enable and start systemd-nspawn@.service
  • disable the dhcpcd.service if enabled on your system, since it activates dhcpcd on all interfaces
  • make sure you have no netctl profiles activated in the container, and ensure that systemd-networkd.service is neither enabled nor started
  • make sure you do not have any iptables rules which can block traffic
  • * make sure packet forwarding is enabled if you want to let containers access the internet. Make sure that your .network file does not accidentally turn off forwarding because if you do not have a IPForward=1 setting in it, systemd-networkd will turn off forwarding on this interface, even if you have it enabled globally.
  • when the daemon is started the systemd networkctl command displays the status of network interfaces.
Примечание: For the set-up described below,
  • we will limit the output of the ip a command to the concerned interfaces
  • we assume the host is your main OS you are booting to and the container is your guest virtual machine
  • all interface names and IP addresses are only examples

Основная DHCP сеть

Такая настройка включит DHCP IP для хоста и контейнера. В этом случае, обе системы будут иметь одинаковый IP, поскольку они разделяют одни и те же интерфейсы.

/etc/systemd/network/MyDhcp.network
[Match]
Name=en*

[Network]
DHCP=ipv4

Когда, включен[broken link: invalid section] и запущен systemd-networkd.service в вашем контейнере.

Вы, конечно, можете заменить en* на полное имя вашего сетевого устройства, получив его на выходе команды ip link.

  • на хосте и контейнере:
$ ip a
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.72/24 brd 192.168.1.255 scope global enp7s0
       valid_lft forever preferred_lft forever
    inet6 fe80::16da:e9ff:feb5:7a88/64 scope link 
       valid_lft forever preferred_lft forever

По умолчанию имя хоста, полученное от DHCP-сервера будет использоваться в качестве переходного хоста.

Чтобы изменить его добавьте UseHostname=false в раздел [DHCPv4]

/etc/systemd/network/MyDhcp.network
[DHCPv4]
UseHostname=false

Если вы не хотите настраивать DNS в /etc/resolv.conf и хотите полагаться на DHCP для его настройки, вам нужно включить[broken link: invalid section] systemd-resolved.service и сделать символическую ссылку /run/systemd/resolve/resolv.conf на /etc/resolv.conf

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

Для подробной информации смотрите systemd-resolved.service(8).

DHCP с двумя различными IP

Интерфейс моста

Создайте интерфейс виртуального мост

/etc/systemd/network/MyBridge.netdev
[NetDev]
Name=br0
Kind=bridge

На хосте и контейнере:

$ ip a
3: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether ae:bd:35:ea:0c:c9 brd ff:ff:ff:ff:ff:ff

Обратите внимание что интерфейс br0 в списке, но не работает (DOWN).

Привязать Ethernet для моста

Измените /etc/systemd/network/MyDhcp.network, чтобы удалить DHCP, мосту необходим интерфейс для привязки не с IP, а также добавьте ключ, чтобы связать это устройство для BR0, давайте изменим свое название на одно более актуальное.

/etc/systemd/network/MyEth.network
[Match]
Name=en*

[Network]
Bridge=br0

Сетевой мост

Создание сетевого профиля для моста

/etc/systemd/network/MyBridge.network
[Match]
Name=br0

[Network]
DHCP=ipv4

Добавить опцию для загрузки контейнера

Поскольку мы хотим, дать выделенный IP для хоста и контейнера, мы должны Отключить сеть контейнера от хоста. Чтобы сделать это, добавьте опцию --network-bridge=br0 в вашу команду загрузки контейнера.

# systemd-nspawn --network-bridge=br0 -bD /path_to/my_container

Результат

  • на хосте
$ ip a
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.87/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::16da:e9ff:feb5:7a88/64 scope link 
       valid_lft forever preferred_lft forever
6: vb-MyContainer: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether d2:7c:97:97:37:25 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d07c:97ff:fe97:3725/64 scope link 
       valid_lft forever preferred_lft forever
  • на контейнере
$ ip a
2: host0: <BROADCAST,MULTICAST,ALLMULTI,AUTOMEDIA,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 5e:96:85:83:a8:5d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.73/24 brd 192.168.1.255 scope global host0
       valid_lft forever preferred_lft forever
    inet6 fe80::5c96:85ff:fe83:a85d/64 scope link 
       valid_lft forever preferred_lft forever

Уведомление

  • we have now one IP address for Br0 on the host, and one for host0 in the container
  • two new interfaces have appeared: vb-MyContainer in the host and host0 in the container. This comes as a result of the --network-bridge=br0 option. This option implies another option, --network-veth. This means a virtual Ethernet link has been created between host and container.
  • the DHCP address on host0 comes from the system /usr/lib/systemd/network/80-container-host0.network file.
  • на хосте
$ brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.14dae9b57a88	no		enp7s0
							vb-MyContainer

Приведенный выше вывод команды подтверждает, что мы имеем мост с двумя переплетёнными/связанными интерфейсами.

  • на хосте
$ ip route
default via 192.168.1.254 dev br0 
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.87
  • на контейнере
$ ip route
default via 192.168.1.254 dev host0 
192.168.1.0/24 dev host0  proto kernel  scope link  src 192.168.1.73

the above command outputs confirm we have activated br0 and host0 interfaces with an IP address and Gateway 192.168.1.254. The gateway address has been automatically grabbed by systemd-networkd

$ cat /run/systemd/resolve/resolv.conf
nameserver 192.168.1.254

Статические IP-сети

Установка статического IP для каждого устройства может быть полезна в случае развертывания веб-служб (например, FTP, HTTP, SSH). Each device will keep the same MAC address across reboots if your system /usr/lib/systemd/network/99-default.link file has the MACAddressPolicy=persistent option (it has by default). Thus, you will easily route any service on your Gateway to the desired device. First, we shall get rid of the system /usr/lib/systemd/network/80-container-host0.network file. To do it in a permanent way (e.g even after upgrades), do the following on container. This will mask the file /usr/lib/systemd/network/80-container-host0.network since files of the same name in /etc/systemd/network take priority over /usr/lib/systemd/network.

# ln -sf /dev/null /etc/systemd/network/80-container-host0.network

Then, enable and start systemd-networkd on your container.

The needed configuration files:

  • на хосте

Tango-emblem-important.pngПравильность информации, представленной в этой статье или разделе, оспариваетсяTango-emblem-important.png

Причина: In the listing of configuration files, /etc/systemd/network/MyBridge.netdev has the .netdev extension. But, the MyBridge.network example file has the .network extension. (обсуждение: Talk:Systemd-networkd (Русский)#)
/etc/systemd/network/MyBridge.netdev
/etc/systemd/network/MyEth.network

Измените MyBridge.network

/etc/systemd/network/MyBridge.network
[Match]
Name=br0

[Network]
DNS=192.168.1.254
Address=192.168.1.87/24
Gateway=192.168.1.254
  • на контейнере
/etc/systemd/network/MyVeth.network
[Match]
Name=host0

[Network]
DNS=192.168.1.254
Address=192.168.1.94/24
Gateway=192.168.1.254

Смотрите также