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

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

Ссылки по теме

- systemd (Русский)
- systemd-nspawn
- Network bridge
- Настройка сети
- Настройка беспроводной сети

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

Эта статья или раздел нуждается в переводе

Примечания: Дополните перевод разделов в которых это требуется: Использование с контейнерами, Уведомление, Статические 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

Смотрите `man systemd-resolved`, `man resolved.conf` и 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

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

Файлы настроек расположены в `/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)
- `Host=` имя хоста машины
- `Virtualization=` проверить, является ли система выполненной в виртуализированной среде или нет. `Virtualization=no` ключ будет применяться только на вашей машине, в то время как `Virtualization=yes` применяются к любому контейнеру или VM.

#### [Network] раздел

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

- `DHCP=` включает поддержку DHCPv4 и/или DHCPv6. Принимает: `yes`, `no`, `ipv4` или `ipv6`
- `DNS=` является DNS адрес сервера. Вы можете указать этот параметр более одного раза
- `Bridge=` это имя моста, чтобы добавить ссылку на
- `IPForward=` позволяет перенаправление IP, выполняя перенаправление в соответствии с таблицей маршрутизации, и необходим для создания Internet sharing. Принимает: `yes`, `no`, `ipv4`, `ipv6` или `kernel`. Обратите внимание, что `IPForward` по умолчанию имеет значение 0, что означает, что если вы не зададите настройки для `IPForward` в вашем файле .network, у вашего интерфейса будет выключена IP-переадресация, даже если вы включили её с помощью `sysctl` или прописали в `/proc/sys`. 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.

#### [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`. Для исчерпывающего списка варианттов, обратитесь к `man 1 systemd-nspawn`. Обратите внимание, если вы хотите, использовать автоматическую настройку DNS от DHCP, то Вам необходимо включить `systemd-resolved` и символьную ссылку `/run/systemd/resolve/resolv.conf` на `/etc/resolv.conf`. Для большей информации, смотрите `systemd-resolved.service(8)`.

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

Причина: Слишком много пунктов для совета, некоторые из них очень похожи, так что они могут быть объединены. (обсуждение: 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
- 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

Когда, включен и запущен `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 для его настройки, вам нужно включить `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:

- на хосте

Правильность информации, представленной в этой статье или разделе, оспаривается

Причина: 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

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

- systemd.networkd man page
- Tom Gundersen, main systemd-networkd developer, G+ home page
- Tom Gundersen posts on Core OS blog
- How to set up systemd-networkd with wpa_supplicant (WonderWoofy's walkthrough on Arch forums)

Categories:

- Network configuration (Русский)
- Virtualization (Русский)
- Русский