Признаться честно, сначала я не мог понять в чем дело и ''зачем это нужно, ведь все было так удобно", но получив немного практики понял что в нем есть свой шарм. И так хватит лирики продолжим, что же такое Netplan это новая утилита для настройки сети в Ubuntu, по крайне мере «в других дистрибутивах я не встречал подобного». Существенной отличие Netplan является то что конфигурация пишется на языке YAML, да да вы не ослышались YAML, разработчики решили идти в ногу со временем (и как бы много не расхваливали его я все-таки считаю его ужасным языком). Основной минус этого языка в том что он очень чувствителен к пробелам, давайте же рассмотрим конфиг на примере.
Файлы конфигурации находятся по пути /etc/netplan/имяфайла.yaml, между каждым блоком когда должно быть + 2 пробела.
1) Стандартная шапка выглядит так:
network:
version: 2
renderer: networkd
ethernets:
enp3s0f0:
dhcp4:no
Давайте рассмотрим что мы сейчас сделали:
- network: — это блок начало конфигурации.
- renderer: networkd — здесь мы указываем сетевой менеджер который будем использовать, это либо networkd либо NetworkManager
- version: 2 — тут как я понял версия YAML.
- ethernets: — этот блок говорит о том что будем конфигурировать ethernet протокол.
- enps0f0: — указываем какой сетевой адаптер будем конфигурировать.
- dhcp4:no — отключаем DHCP v4, для 6 v6 dhcp6 соответственно
2) Попробуем назначить ip адреса:
enp3s0f0:
dhcp4:no
macaddress: bb:11:13:ab:ff:32
addresses: [10.10.10.2/24, 10.10.10.3/24]
gateway4: 10.10.10.1
nameservers:
addresses: 8.8.8.8
Здесь мы задали мак, ipv4, шлюз и dns сервер. Замет те что если нам нужно больше одного ip адреса то мы пишем их через запятую с обязательным пробелом после.
3)А что если нам нужен bonding?
bonds:
bond0:
dhcp4: no
interfaces: [enp3s0f0, enp3s0f1]
parameters:
mode: 802.3ad
mii-monitor-interval: 1
- bonds: — блок поясняющий что мы будем настраивать bonding.
- bond0: — произвольное имя интерфейса.
- interfaces: — набор интерфейсов собираемых в bond-динг, ''как оговаривалось ранее если параметров несколько описываем их в квадратных скобках".
- parameters: — описываем блок настройки параметров
- mode: — указываем мод по которому будет работать bonding.
- mii-monitor-interval: — задаем интервал мониторинга 1 сек.
Внутри блока с именем bond-а также можно конфигурировать такие параметры как addresses,gateway4,routes итд.
Мы добавили резервирование для нашей сети, теперь осталось только повесить vlan и настройку можно считать оконченной.
vlans:
vlan10:
id: 10
link: bond0
dhcp4: no
addresses: [10.10.10.2/24]
gateway: 10.10.10.1
routes:
- to: 10.10.10.2/24
via: 10.10.10.1
on-link: true
- vlans: — объявляем блок настройки vlan.
- vlan10: — произвольное имя vlan интерфейса.
- id: — тег нашего vlan.
- link: — интерфейс через который vlan будет доступен.
- routes: — объявляем блок описания маршрутов.
- — to: — задаем адрес/подсеть до которой необходим маршрут.
- via: — указываем шлюз через которой будет доступна наша подсеть.
- on-link: — указываем что прописывать маршруты всегда при поднятии линка.
Обратите внимание на то как я расставляю пробелы, в языке YAML это очень важно.
Вот мы описали сетевые интерфейсы, создали bonding, и даже добавили vlan-ы. Давайте применим наш конфиг, команда netplan apply проверит наш конфиг на наличие ошибок и применит его в случае успеха.Далее конфиг будет сам подниматься при перезагрузке системы.
Собрав все предыдущие блоки кода, вот что у нас получилось:
network:
version: 2
renderer: networkd
ethernets:
enp3s0f0:
dhcp4: no
ensp3s0f1:
dhcp4: no
bonds:
bond0:
dhcp4: no
interfaces: [enp3s0f0, enp3s0f1]
parameters:
mode: 802.3ad
mii-monitor-interval: 1
vlan10:
id: 10
link: bond0
dhcp4: no
addresses: [10.10.10.2/24]
routes:
- to: 10.10.10.2/24
via: 10.10.10.1
on-link: true
vlan20:
id: 20
link: bond0
dhcp4: no
addresses: [10.10.11.2/24]
gateway: 10.10.11.1
nameserver:
addresses: [8.8.8.8]
Вот наша сеть и готова к эксплуатации, все оказалось не так страшно как показалось вначале и код получился очень красивый и читабельный. P.C спасибо что по netplan есть отличный мануал по ссылке https://netplan.io/.
Комментарии (19)
alexyr
17.04.2019 09:02Стоит Ubuntu server 18.04.2 LTS
Все настройки в /etc/network/interfaces
Что-то я упустил, видимо…
Temmokan
17.04.2019 09:29Я дико извиняюсь за придирки — вы специально оставили такую прорву грамматических ошибок?
TonyLorencio
17.04.2019 09:46Основной минус этого языка в том что он очень чувствителен к пробелам
Валидный JSON (не очень чувствительный к пробелам) также является валидным YAML
mkpankov
17.04.2019 11:36Неплохая штука, но сырая.
На днях начал пытаться подключиться к копроративному Wi-Fi с WPA2 Enterprise и токеном — требуется много совсем неочевидных настроек, которые даже не поддерживаются в версии netplan из Ubuntu 18.04. Пришлось поставить из исходников отсюда — конфигурация распарсилась, но что-то развалилось дальше. Понять что, почему и как починить опять сложно.scg
17.04.2019 14:09А я дня три потратил, чтобы впилить автоматический запуск hostapd в netplan. Фишка была в том, что hostapd требует, чтобы интерфейс wlan был поднят, а netplan отказывается этот интерфейс поднимать, если у него статус NO CARRIER. А статус его не изменется, пока не запустится hostapd и так по кругу. Пришлось вкорячивать напрямую в Systemd.
mkpankov
17.04.2019 14:18Вот этого я вообще не понимаю.
Ну no-carrier и что? Интерфейс-то остался и когда carrier появится всё продолжит работать. Это вообще от меня не зависит, удалённый конец питание потерял.scg
17.04.2019 21:40Я понимаю, что они попытались заменить не очень красаиый и запутанный interfaces на более простой и понятный конфиг YAML, но при этом не учли, что вся эта сложность складывалась из кучи мелочей. Когда они начнут эти мелочи доделывать, то у них получится тот же interfaces.
bibliary
17.04.2019 18:56Cтранная штука. Я пару раз столкнулся со свежими бубунтами — хорошо так материл что теперь нельзя табуляцию и это никто особо не выделял. Потом правда начались проблемы с описанием раутов, они то нормально кушались при чеке конфигов, то не кушались. Плюнул и вернул старый добый способ через interfaces.
d-stream
18.04.2019 00:41После того когда «все повалилось» после перетасовки нескольких ip адресов на одном интерфейсе… матюкнулся «наркоманы, блин»… пожалился ярому линуксоиду, а он мне ссылку www.linux.org.ru/forum/general/14382640 )
p.s. сам не совсем чтобы линуксоид, так балуюсь еще со времен книжки со стрелками
Pinkerton42
18.04.2019 08:17Так и не смог заставить работать netplan в случае автоматического получения адреса, но ручной установки шлюза по умолчанию.
achekalin
Так в чем шарм-то, и чем оно лучше, чем старое доброе понятное и точно, железобетонно работающее?
mkpankov
Декларативный язык "сделай мне вот так, мне всё равно как" и интеграция в networkd.
achekalin
А чем /etc/network/interfaces в этом смысле (кроме своего более понятного синтаксиса) не угодили?
И декларативность в отношении сети — это не всегда благо. Иногда шаги для достижения особо интересной конфигурации могут оказаться выбранными неверно, и конфигурация не будет достигнута — но и на машину уже не попадешь. Плюс, пока сеть дергалась, еще и сервисы на машине поразваливались. Это я к тому, что в деле сетей как никогда следует помнить, что лучшее враг хорошего — и поступать соответственно.
mkpankov
Не могу сказать что мне они чем-то не угодили, просто из коробки в той же Ubuntu они сейчас не работают, и при отключении NetworkManager выбирая между откатом назад на них, и переходом вперед на netplan + networkd я выбрал второе. Я в целом думаю что systemd это довольно правильно, и интегрировать туда управление сетями тоже выглядит разумно.
Со стороны старых interfaces — а они поддерживают, для примера, продвинутые настройки Wi-Fi (WPA2 Enterprise)?