Начиная с релиза Ubuntu 17.10, для управления конфигурацией сети используется утилита Netplan. Раньше для этих целей применялся скрипт ifupdown, конфигурационные файлы которого находились в папке /etc/network/interfaces. Недостатком такого подхода было то, что файлы настройки сети были разбросаны по всей системе, частью настроек мог управлять NetworkManager, частью systemd-networkd, а часть вообще делалась с помощью ifupdown.
Новая система конфигурации позволяет таки сложить все яйца в одну корзину. Вы выполняете настройку в формате YAML, а Netplan автоматически преобразовывает её при запуске в конфигурацию той системы, которую вы выбрали. В этой статье мы рассмотрим, как выполняется настройка сети Netplan в Ubuntu 18.04.
Содержание статьи
Основы использования Netplan
Все конфигурационные файлы Netplan находятся в папке /etc/netplan/. Во время запуска службы, она преобразовывает свою конфигурацию в конфигурацию той службы, которая будет управлять сетью и помещает её в каталог /run/. По умолчанию в Ubuntu есть только один конфигурационный файл со следующим содержимым:
Это означает, что управление всей сетью передаётся утилите NetworkManager. Чтобы разобраться, что это означает, давайте рассмотрим синтаксис конфигурационного файла.
1. Синтаксис конфигурации Netplan
Новичкам синтаксис конфигурационного файла Netplan может показаться запутанным, но разобраться в нём вполне можно. Он чем-то напоминает JSON, но не имеет таких жёстких ограничений:
поле0:
поле1: значение
поле2:
- элемент1
- элемент2
- элемент3
Имя поля и его значение разделяется двоеточием. В качестве значения поля можно передавать не только текстовое или числовое значение, но и другое поле, несколько полей или список значений. При передаче списка каждый новый элемент списка должен начинаться с дефиса. Табуляции использовать нельзя. Отступы используются для указания структуры. Например, из примера видно, что поле1 и поле2 относятся к полю0. Это всё, что касается общего синтаксиса, теперь про Netplan:
network:
version: 2
renderer: программа_бэкенд
вид_интерфейса:
имя_интерфейса:
параметр: значение
Первые две строчки конфигурации стандартны. Первая указывает, что мы будем иметь дело с сетью, а вторая указывает версию стандарта конфигурации, которая будет использоваться. Их лучше не трогать.
- renderer - указывает программу, для которой будут преобразоваться ваши настройки. На данный момент поддерживаются только network-manager и systemd-networkd;
- вид_интерфейса - вид сетевых интерфейсов, которые вы будете настраивать в этой секции. Они делятся на физические: ethernets (проводные), wifis (беспроводные) и виртуальные: vlans , bonds, bridges.
- имя_интерфейса - имя сетевого интерфейса в системе, например enp3s0 или eth0;
- параметры - настройки, с помощью которых указывается, как нужно подключаться к сети.
2. Параметры Netplan
Мы разобрались с основным синтаксисом, далее разберём команды, с помощью которых мы будем настраивать сеть:
- renderer - программа для обработки конфигурации;
- dhcp4 - получение IPv4 адреса по DHCP;
- dhcp6 - получение IPv6 адреса по DHCP;
- dhcp-identifier - если передать значение "mac", то будет использоваться MAC-адрес в качестве идентификатора DHCP;
- addresses - добавляет статические адреса к интерфейсу, можно несколько;
- gateway4 - указывает шлюз IPv4;
- gateway6 - указывает шлюз IPv6;
- nameservers - указывает DNS-серверы;
- macaddress - устанавливает новый MAC-адрес;
- routes - позволяет настроить маршруты таблицы маршрутизации;
- routing-policy - дополнительная настройка маршрутов, для IP или подсети;
- access-points - список точек доступа для Wi-Fi;
- password - пароль для точки доступа Wi-Fi;
- mode - режим работы сетевой карты Wi-Fi.
3. Команды Netplan
Синтаксис самой команды netplan очень прост:
netplan опции команда
В качестве команды можно передать одну из команд:
- try - попробовать применить конфигурацию с возможностью отмены;
- apply - применить конфигурацию;
- generate - проверка текущей конфигурации и запись на диск;
- config - записать текущую конфигурацию сети в YAML.
Как настроить сеть Netplan в Ubuntu
Сначала необходимо посмотреть, как называются сетевые интерфейсы в вашей системе. Для этого можно просто изучить содержимое папки /sys/class/net:
ls /sys/class/net
У меня есть только Wi-Fi-карта - wlp, у вас же может быть ещё и проводной интерфейс enp. Или устройства могут называться по старому - wlan и eth. Всё зависит от системы.
1. Настройка динамического IP в Netplan
Для настройки динамического IP- адреса для интерфейса enp3s0 создадим новый конфигурационный файл 02-networkd.yaml. Самая простая настройка Netplan для получения IP по DHCP будет выглядеть вот так:
sudo vi /etc/netplan/02-networkd.yaml
В качестве программы для обработки конфигурации мы используем Networkd, далее мы указываем наш сетевой интерфейс и включаем получение IPv4 адреса по DHCP. Все остальные параметры тоже подтянутся по DHCP. Или мы можем вручную настроить DNS для этого интерфейса:
Теперь осталось проверить эту конфигурацию. Для этого выполните:
sudo netplan generate
Если ошибок нет, программа ничего не выведет и запишет вашу конфигурацию на диск. Если есть ошибки, утилита о них сообщит.
2. Настройка статического IP в Netplan
Статический IP-адрес в Netplan настроить немного сложнее. Поскольку здесь нам нужно будет задать не только непосредственно сам адрес, но и кучу других параметров, которые система раньше получала по DHCP. Нам надо указать шлюз для доступа в интернет и DNS-серверы. Модифицируем тот же конфигурационный файл:
sudo vi /etc/netplan/02-networkd.yaml
Рассмотрим подробнее, что за что отвечает в этом конфигурационном файле.
- dhcp4 - отключаем получение IP адреса по DHCP;
- addresses - параметр ожидает список IP-адресов, которые нужно присвоить нашей сетевой карте, у нас только один адрес, однако, передавать его надо тоже в формате списка, иначе будет ошибка. В конце адреса указывается префикс маски - /24, который отвечает маске сети 255.255.255.0. Вы можете указать и другую маску, но только с помощью префикса, отдельного параметра для этого нет.
- gateway4 - задаёт адрес роутера, через который наш компьютер сможет получить доступ в интернет;
Остальное вы знаете. Списки можно оформлять не только с помощью черточек, для каждого пункта с новой строки, но и с помощью квадратных скобок, тогда элементы записываются в одну строку через запятую.
3. Настройка Wi-Fi через Netplan на Ubuntu
Кроме проводного подключения, система конфигурации Netplan умеет управлять подключением к Wi-Fi. Это отличная новость, учитывая, насколько сложно всё это раньше настраивалось, если не было NetworkManager. Правда, для работы Wi-Fi через Networkd надо, чтобы в системе был установлен пакет wpasupplicant. Например, у нас есть точка доступа AccessPoint с паролем 12345678? и мы хотим к ней подключаться. Тогда настройка Netplan Ubuntu будет выглядеть так:
Здесь мы указываем, что надо получить IP и другие параметры по DHCP, устанавливаем DNS-сервер вручную, хотя это не обязательно, а затем добавляем точку доступа и пароль к ней.
4. Применение конфигурации netplan
Естественно, что после смены настроек в конфигурационном файле ничего не меняется. Сначала нужно проверить конфигурационный файл на ошибки и создать файлы конфигурации программы-обработчика. Для этого выполните:
sudo netplan generate
Если вы хотите видеть более подробную информацию, используйте опцию --debug:
sudo netplan --debug generate
Если есть ошибки, их надо исправить, если нет, применяем конфигурацию с помощью команды:
sudo netplan --debug apply
Если вы меняли программу-обработчик, например с NetworkManager на networkd, то надо ещё перезапустить компьютер. После этого сеть будет работать на новой конфигурации.
Выводы
В этой статье мы рассмотрели, как выполняется настройка сети Netplan в Ubuntu 18.04. Как видите, это не очень сложно, и даже удобно, по сравнению со старой конфигурацией. Конечно, есть некоторые недостатки - та же самая невозможность задать маску без префикса, но программа активно развивается, возможно, в будущем это будет исправлено.
Спасибо за статью, я чтото пропустил, а была ли статья про более старые системы и возможность конфигурирования сети с отключением dnsmasq?
Про /etc/network/interfaces было.
А как VLAN-ы прописать?
Когда убунту сделает vpn не только через pptp, или я что-то пропустил?
Жаль что вы описываете то что в интернете и так есть. Как к примеру настроить pppoe на ubuntu server 18.04?
network:
renderer: networkd
ethernets:
ens18:
addresses: [192.168.15.253/24]
gateway4: 192.168.15.254
dhcp4: no
dhcp6: no
nameservers:
addresses: [192.168.15.9, 192.168.77.250]
ens19:
addresses: [195.69.223.254/29]
gateway4: 195.69.223.249
dhcp4: no
dhcp6: no
nameservers:
addresses: [195.69.222.2]
version: 2
ruslan@mail:~$ sudo netplan --debug generate
DEBUG:command generate: running ['/lib/netplan/generate']
** (generate:2643): DEBUG: 18:55:51.088: Processing input file //etc/netplan/50-cloud-init.yaml..
** (generate:2643): DEBUG: 18:55:51.088: starting new processing pass
Error in network definition //etc/netplan/50-cloud-init.yaml line 6 column 15: expected mapping
Спасибо за статью, намучился с пробелами, пока к вам не заглянул)
Использую systemd для своих юнитов и хочу удалить netplan. При удалении ничего лишнего не зацепит из сети? netplan вообще не использую.
Есть ошибка в разделе "4. Применение конфигурации netplan"
там написана команда "sudo netplan generate" вместо "sudo netplan apply"
Из-за этого пришлось на другом сайте искать инструкцию...
Там всё верно написано, ниже есть и apply.
Здравствуйте,
Пытаюсь через Netplan сменить mac адрес Wi-Fi адаптера.
После применения netplan apply сетевой интекрфейс отключается от точки доступа, mac не изменяется.
При этом mac проводного адаптера меняется без проблем.
Содержимое файла (пробелы и символы перевода строки проверены):
network:
version: 2
# renderer: networkd
renderer: NetworkManager
ethernets:
# version: 2
enp5s0:
dhcp4: false
optional: true
macaddress: 58:8b:f3:66:9a:89
addresses: [192.168.72.1/24]
gateway4: 192.168.200.149
wifis:
wlp3s0:
optional: true
dhcp4: yes
dhcp6: no
# macaddress: 58:8b:f3:66:9a:88
access-points:
"YYYY":
password: "XXX"
А как добавить подинтерфейс (второй адрес на тот же интерфейс)?
Мда...почитал... это печаль бубунта деградирует усиленными темпами, все нормально без проблем настраивалось, но гениям надо было добавить эту кучу дерьма в которой надо копаться и мучиться с настройками да еще и в yaml. Автору спасибо что подробно описал весь это идиотизм, я подумал и удалил бубунту нахрен.
Жесть. зачем придумали жесткую привязку к пробелам. Мучился пока пробелы не расставил по шаблону. Нельзя было проще сделать.
Я все прочитал и все сделал, но по какой-то причине настройка не приминается и пишет следующее:
Failed to start systemd-networkd.service: Unit systemd-networkd.service is masked.
Traceback (most recent call last):
File "/usr/sbin/netplan", line 23, in
netplan.main()
File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
self.run_command()
File "/usr/share/netplan/netplan/cli/utils.py", line 211, in run_command
self.func()
File "/usr/share/netplan/netplan/cli/commands/apply.py", line 55, in run
self.run_command()
File "/usr/share/netplan/netplan/cli/utils.py", line 211, in run_command
self.func()
File "/usr/share/netplan/netplan/cli/commands/apply.py", line 222, in command_apply
utils.systemctl_networkd('start', sync=True, extra_services=netplan_wpa + netplan_ovs)
File "/usr/share/netplan/netplan/cli/utils.py", line 101, in systemctl_networkd
subprocess.check_call(command)
File "/usr/lib/python3.8/subprocess.py", line 364, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'start', 'systemd-networkd.service', 'netplan-ovs-cleanup.service']' returned non-zero exit status 1.
По какой-то причине он пытается что-то взять из /usr
Можете помочь с этим?
Юнит systemd-networkd отключен. Чтобы его включить выполните:
sudo systemctl unmask systemd-networkd
Как точно определить что конфигурацией сети занимается netpan, а не network-scripts?
В статье в примере настроек строки съехали - не отображаются пробелы, а их важно поставить. Если их невозможно добавить, хотя бы надпишите, мол, нужны пробелы, как на скриншотах.
А так статья помогла, спасибо.
Это все работает. Но.
Как привязать ip к wlan0?
Интерфейс поднимается, но ip не присваивается.
network:
version: 2
renderer: networkd
ethernets:
wlan0:
dhcp4: false
dhcp6: false
addresses:
- 192.168.4.254/24
optional: true
В generate ошибок нет.
Прописать VLAN поверх интерфейса можно так:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: true
dhcp6: false
vlans:
vlan10:
id: 10
link: enp0s3
dhcp4: true
dhcp6: false
вот тут действительно рабочий пример(ubuntu 22.04.2) https://www.dmosk.ru/miniinstruktions.php?mini=network-netplan