arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
591 lines (388 loc) • 37 kB
Markdown
Ссылки по теме
* [systemd (Русский)](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Systemd (Русский)")
* [systemd-nspawn](/index.php/Systemd-nspawn "Systemd-nspawn")
* [Network bridge](/index.php/Network_bridge "Network bridge")
* [Настройка сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8 "Настройка сети")
* [Настройка беспроводной сети](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B1%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8 "Настройка беспроводной сети")
**Состояние перевода:** На этой странице представлен перевод статьи [Systemd-networkd](/index.php/Systemd-networkd "Systemd-networkd"). Дата последней синхронизации: 28 февраля 2016\. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Systemd-networkd&diff=0&oldid=423358).
*systemd-networkd* - это системный демон, который управляет сетевыми настройками. По мере появления он обнаруживает и настраивает сетевые устройства, также может создавать виртуальные сетевые устройства. Эта служба может быть особенно полезной для установки сложных сетевых настроек, для контейнера управляемым [Systemd-nspawn](/index.php/Systemd-nspawn "Systemd-nspawn") или для виртуальных машин. А также отлично работает на простом соединении.
## Contents
* [1 Основы использования](#.D0.9E.D1.81.D0.BD.D0.BE.D0.B2.D1.8B_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F)
* [1.1 Обязательные службы и установки](#.D0.9E.D0.B1.D1.8F.D0.B7.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D1.81.D0.BB.D1.83.D0.B6.D0.B1.D1.8B_.D0.B8_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B8)
* [1.2 Примеры настроек](#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA)
* [1.2.1 Проводной адаптер с DHCP](#.D0.9F.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.BD.D0.BE.D0.B9_.D0.B0.D0.B4.D0.B0.D0.BF.D1.82.D0.B5.D1.80_.D1.81_DHCP)
* [1.2.2 Проводной адаптер использующий статический IP](#.D0.9F.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.BD.D0.BE.D0.B9_.D0.B0.D0.B4.D0.B0.D0.BF.D1.82.D0.B5.D1.80_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D1.8E.D1.89.D0.B8.D0.B9_.D1.81.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_IP)
* [1.2.3 Беспроводной адаптер](#.D0.91.D0.B5.D1.81.D0.BF.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.BD.D0.BE.D0.B9_.D0.B0.D0.B4.D0.B0.D0.BF.D1.82.D0.B5.D1.80)
* [1.2.4 Проводные и беспроводные адаптеры на одной машине](#.D0.9F.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.BD.D1.8B.D0.B5_.D0.B8_.D0.B1.D0.B5.D1.81.D0.BF.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.BD.D1.8B.D0.B5_.D0.B0.D0.B4.D0.B0.D0.BF.D1.82.D0.B5.D1.80.D1.8B_.D0.BD.D0.B0_.D0.BE.D0.B4.D0.BD.D0.BE.D0.B9_.D0.BC.D0.B0.D1.88.D0.B8.D0.BD.D0.B5)
* [1.2.5 IPv6 расширения конфиденциальности](#IPv6_.D1.80.D0.B0.D1.81.D1.88.D0.B8.D1.80.D0.B5.D0.BD.D0.B8.D1.8F_.D0.BA.D0.BE.D0.BD.D1.84.D0.B8.D0.B4.D0.B5.D0.BD.D1.86.D0.B8.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8)
* [2 Файлы настроек](#.D0.A4.D0.B0.D0.B9.D0.BB.D1.8B_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA)
* [2.1 Файлы network](#.D0.A4.D0.B0.D0.B9.D0.BB.D1.8B_network)
* [2.1.1 [Match] раздел](#.5BMatch.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB)
* [2.1.2 [Network] раздел](#.5BNetwork.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB)
* [2.1.3 [Address] раздел](#.5BAddress.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB)
* [2.1.4 [Route] раздел](#.5BRoute.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB)
* [2.2 Файлы NetDev](#.D0.A4.D0.B0.D0.B9.D0.BB.D1.8B_NetDev)
* [2.2.1 [Match] раздел](#.5BMatch.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB_2)
* [2.2.2 [Netdev] раздел](#.5BNetdev.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB)
* [2.3 Файлы link](#.D0.A4.D0.B0.D0.B9.D0.BB.D1.8B_link)
* [2.3.1 [Match] раздел](#.5BMatch.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB_3)
* [2.3.2 [Link] раздел](#.5BLink.5D_.D1.80.D0.B0.D0.B7.D0.B4.D0.B5.D0.BB)
* [3 Использование с контейнерами](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.81_.D0.BA.D0.BE.D0.BD.D1.82.D0.B5.D0.B9.D0.BD.D0.B5.D1.80.D0.B0.D0.BC.D0.B8)
* [3.1 Основная DHCP сеть](#.D0.9E.D1.81.D0.BD.D0.BE.D0.B2.D0.BD.D0.B0.D1.8F_DHCP_.D1.81.D0.B5.D1.82.D1.8C)
* [3.2 DHCP с двумя различными IP](#DHCP_.D1.81_.D0.B4.D0.B2.D1.83.D0.BC.D1.8F_.D1.80.D0.B0.D0.B7.D0.BB.D0.B8.D1.87.D0.BD.D1.8B.D0.BC.D0.B8_IP)
* [3.2.1 Интерфейс моста](#.D0.98.D0.BD.D1.82.D0.B5.D1.80.D1.84.D0.B5.D0.B9.D1.81_.D0.BC.D0.BE.D1.81.D1.82.D0.B0)
* [3.2.2 Привязать Ethernet для моста](#.D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.B0.D1.82.D1.8C_Ethernet_.D0.B4.D0.BB.D1.8F_.D0.BC.D0.BE.D1.81.D1.82.D0.B0)
* [3.2.3 Сетевой мост](#.D0.A1.D0.B5.D1.82.D0.B5.D0.B2.D0.BE.D0.B9_.D0.BC.D0.BE.D1.81.D1.82)
* [3.2.4 Добавить опцию для загрузки контейнера](#.D0.94.D0.BE.D0.B1.D0.B0.D0.B2.D0.B8.D1.82.D1.8C_.D0.BE.D0.BF.D1.86.D0.B8.D1.8E_.D0.B4.D0.BB.D1.8F_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B8_.D0.BA.D0.BE.D0.BD.D1.82.D0.B5.D0.B9.D0.BD.D0.B5.D1.80.D0.B0)
* [3.2.5 Результат](#.D0.A0.D0.B5.D0.B7.D1.83.D0.BB.D1.8C.D1.82.D0.B0.D1.82)
* [3.2.6 Уведомление](#.D0.A3.D0.B2.D0.B5.D0.B4.D0.BE.D0.BC.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5)
* [3.3 Статические IP-сети](#.D0.A1.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B5_IP-.D1.81.D0.B5.D1.82.D0.B8)
* [4 Смотрите также](#.D0.A1.D0.BC.D0.BE.D1.82.D1.80.D0.B8.D1.82.D0.B5_.D1.82.D0.B0.D0.BA.D0.B6.D0.B5)
## Основы использования
Пакет [systemd](https://www.archlinux.org/packages/?name=systemd) является частью установки Arch по умолчанию, и содержит все необходимые файлы для работы в проводной сети. Беспроводные адаптеры могут быть установлены другими службами, такими как [wpa_supplicant](/index.php/Wpa_supplicant "Wpa supplicant"), они будут рассмотрены далее в этой статье.
### Обязательные службы и установки
Чтобы использовать *systemd-networkd*, [запустите](/index.php/%D0%97%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Запустите") следующие две службы и [включите](/index.php/%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D0%B5 "Включите") их работу при загрузке системы:
* `systemd-networkd.service`
* `systemd-resolved.service`
**Примечание:** *systemd-resolved* на самом деле требуется, только если вы указали записи DNS в файлах *.network* или если вы хотите получить адреса DNS от DHCP клиента networkd.
Для совместимости с [resolv.conf](/index.php/Resolv.conf "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)](https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd-resolved.8), [resolved.conf(5)](https://jlk.fjfi.cvut.cz/arch/manpages/man/resolved.conf.5) и [Systemd README](https://github.com/systemd/systemd/blob/master/README#L205).
**Примечание:** 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`. Для получения полного списка опций и порядка обработки, см. [#Файлы настроек](#.D0.A4.D0.B0.D0.B9.D0.BB.D1.8B_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA) и страницу 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](/index.php/Wpa_supplicant_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Wpa supplicant (Русский)"). В этом примере, соответствующий файл службы Systemd, которая должна быть включена в `wpa_supplicant@wlp2s0.service`.
`/etc/systemd/network/*wireless*.network`
```
[Match]
Name=wlp2s0
[Network]
DHCP=ipv4
```
Если беспроводной адаптер имеет статический IP-адрес, настройка является такой же (кроме имени интерфейса) как в [проводном адаптере](#.D0.9F.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.BD.D0.BE.D0.B9_.D0.B0.D0.B4.D0.B0.D0.BF.D1.82.D0.B5.D1.80_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D1.8E.D1.89.D0.B8.D0.B9_.D1.81.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B9_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](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](/index.php/Udev "Udev") сначала посмотрит *matching* файла **.link**
Все они следуют тем же правилам:
* Если **все** условия в `[Match]` разделе совпали, профиль будет активирован
* Пустая секция `[Match]` означает, что профиль будет применяться в любом случае (можно сравнить с шуткой `*`)
* Каждая запись с синтаксисом `NAME=VALUE` является ключевой
* все файлы настроек вместе сортируются и обрабатываются в лексическом порядке, независимо от каталога, в котором они живут
* файлы с одинаковым именем сменяют друг друга
**Совет:**
* переопределить системный файл `/usr/lib/systemd/network` на постоянную основу (то есть даже после обновления) можно поместив файл с таким же именем в каталог `/etc/systemd/network` и создав для него символьную ссылку в `/dev/null`
* символ `*` можно использовать в `VALUE` (например, значению `en*` будет соответствовать любое устройство Ethernet)
* в соответствии с информацией, данной в [этом сообщении Arch-general](https://mailman.archlinux.org/pipermail/arch-general/2014-March/035381.html), лучше всего выставлять параметры для конкретных сетевых контейнеров *внутри контейнера* при помощи файлов **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](https://en.wikipedia.org/wiki/ru:DHCP "wikipedia:ru:DHCP") и/или DHCPv6\. Принимает: `yes`, `no`, `ipv4` или `ipv6`
* `DNS=` является [DNS](https://en.wikipedia.org/wiki/ru:DNS "wikipedia:ru:DNS") адрес сервера. Вы можете указать этот параметр более одного раза
* `Bridge=` это имя моста, чтобы добавить ссылку на
* `IPForward=` по умолчанию `no`. Это разрешает IP forwarding, выполняя пересылку в соответствии с таблицей маршрутизации и необходим для настройк [Internet sharing](/index.php/Internet_sharing "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](/index.php/Udev_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "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](https://www.archlinux.org/packages/?name=systemd) >= 210\. Хотите сипользовать [#Основы использования systemctl|включение и запуск](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Systemd (Русский)") `systemd-networkd.service` на хосте и контейнере.
Для отладки, настоятельно рекомендуется [установить](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Pacman (Русский)") пакеты [bridge-utils](https://www.archlinux.org/packages/?name=bridge-utils), [net-tools](https://www.archlinux.org/packages/?name=net-tools) и [iproute2](https://www.archlinux.org/packages/?name=iproute2).
Если вы используете *systemd-nspawn*, вам, возможно, потребуется изменить `systemd-nspawn@.service` и добавить параметры загрузки в строку `ExecStart`. Для исчерпывающего списка варианттов, обратитесь к [systemd-nspawn(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd-nspawn.1). Обратите внимание, если вы хотите, использовать автоматическую настройку DNS от DHCP, то Вам необходимо включить `systemd-resolved` и символьную ссылку `/run/systemd/resolve/resolv.conf` на `/etc/resolv.conf`. Для большей информации, смотрите `systemd-resolved.service(8)`.
Before you start to configure your container network, it is useful to:
* disable all your [netctl](/index.php/Netctl "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](/index.php/Netctl "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](/index.php/Systemd#Basic_systemctl_usage "Systemd") `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](/index.php/Netctl "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](/index.php/Iptables "Iptables") rules which can block traffic
* * make sure *packet forwarding* is [enabled](/index.php/Internet_sharing#Enable_packet_forwarding "Internet sharing") 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
```
Когда, [включен](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.92.D0.BA.D0.BB.D1.8E.D1.87.D0.B8.D1.82.D1.8C_.D1.8E.D0.BD.D0.B8.D1.82_.D0.B2_.D0.B0.D0.B2.D1.82.D0.BE.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_.D0.BF.D1.80.D0.B8_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B5_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B "Systemd (Русский)") и запущен `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 для его настройки, вам нужно [включить](/index.php/Systemd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.92.D0.BA.D0.BB.D1.8E.D1.87.D0.B8.D1.82.D1.8C_.D1.8E.D0.BD.D0.B8.D1.82_.D0.B2_.D0.B0.D0.B2.D1.82.D0.BE.D0.B7.D0.B0.D0.BF.D1.83.D1.81.D0.BA_.D0.BF.D1.80.D0.B8_.D0.B7.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B5_.D1.81.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D1.8B "Systemd (Русский)") `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](/index.php/Systemd#Basic_systemctl_usage "Systemd") `systemd-networkd` on your container.
The needed configuration files:
* на хосте
```
/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](http://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html)
* [Tom Gundersen, main systemd-networkd developer, G+ home page](https://plus.google.com/u/0/+TomGundersen/posts)
* [Tom Gundersen posts on Core OS blog](https://coreos.com/blog/intro-to-systemd-networkd/)
* [How to set up systemd-networkd with wpa_supplicant](https://bbs.archlinux.org/viewtopic.php?pid=1393759#p1393759) (WonderWoofy's walkthrough on Arch forums)