Главная >> Инструкции >> Настройка сети Netplan в Ubuntu

Настройка сети Netplan в Ubuntu

Начиная с релиза 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

network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: yes

В качестве программы для обработки конфигурации мы используем Networkd, далее мы указываем наш сетевой интерфейс и включаем получение IPv4 адреса по DHCP. Все остальные параметры тоже подтянутся по DHCP. Или мы можем вручную настроить DNS для этого интерфейса:

network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: yes
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4

Теперь осталось проверить эту конфигурацию. Для этого выполните:

sudo netplan generate

Если ошибок нет, программа ничего не выведет и запишет вашу конфигурацию на диск. Если есть ошибки, утилита о них сообщит.

2. Настройка статического IP в Netplan

Статический IP-адрес в Netplan настроить немного сложнее. Поскольку здесь нам нужно будет задать не только непосредственно сам адрес, но и кучу других параметров, которые система раньше получала по DHCP. Нам надо указать шлюз для доступа в интернет и DNS-серверы. Модифицируем тот же конфигурационный файл:

sudo vi /etc/netplan/02-networkd.yaml

network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
addresses: [ 192.168.1.10/24 ]
gateway4: 192.168.1.1
nameservers:
addresses: [ 8.8.8.8, 8.8.4.4 ]

Рассмотрим подробнее, что за что отвечает в этом конфигурационном файле.

  • 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 будет выглядеть так:

network:
version: 2
renderer: networkd
wifis:
wlp3s0b1:
dhcp4: yes
dhcp6: no
nameservers:
addresses: [ 8.8.8.8, 8.8.4.4 ]
access-points:
"AccessPoint":
password: "12345678"

Здесь мы указываем, что надо получить IP и другие параметры по DHCP, устанавливаем DNS-сервер вручную, хотя это не обязательно, а затем добавляем точку доступа и пароль к ней.

4. Применение конфигурации netplan

Естественно, что после смены настроек в конфигурационном файле ничего не меняется. Сначала нужно проверить конфигурационный файл на ошибки и создать файлы конфигурации программы-обработчика. Для этого выполните:

sudo netplan generate

Если вы хотите видеть более подробную информацию, используйте опцию --debug:

sudo netplan --debug generate

Если есть ошибки, их надо исправить, если нет, применяем конфигурацию с помощью команды:

sudo netplan --debug apply

Если вы меняли программу-обработчик, например с NetworkManager на networkd, то надо ещё перезапустить компьютер. После этого сеть будет работать на новой конфигурации.

Выводы

В этой статье мы рассмотрели, как выполняется настройка сети Netplan в Ubuntu 18.04. Как видите, это не очень сложно, и даже удобно, по сравнению со старой конфигурацией. Конечно, есть некоторые недостатки - та же самая невозможность задать маску без префикса, но программа активно развивается, возможно, в будущем это будет исправлено.

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

21 комментарий к “Настройка сети Netplan в Ubuntu”

  1. Спасибо за статью, я чтото пропустил, а была ли статья про более старые системы и возможность конфигурирования сети с отключением dnsmasq?

    Ответить
  2. 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

    Ответить
  3. Использую systemd для своих юнитов и хочу удалить netplan. При удалении ничего лишнего не зацепит из сети? netplan вообще не использую.

    Ответить
  4. Есть ошибка в разделе "4. Применение конфигурации netplan"

    там написана команда "sudo netplan generate" вместо "sudo netplan apply"
    Из-за этого пришлось на другом сайте искать инструкцию...

    Ответить
  5. Здравствуйте,
    Пытаюсь через 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"

    Ответить
  6. Мда...почитал... это печаль бубунта деградирует усиленными темпами, все нормально без проблем настраивалось, но гениям надо было добавить эту кучу дерьма в которой надо копаться и мучиться с настройками да еще и в yaml. Автору спасибо что подробно описал весь это идиотизм, я подумал и удалил бубунту нахрен.

    Ответить
  7. Жесть. зачем придумали жесткую привязку к пробелам. Мучился пока пробелы не расставил по шаблону. Нельзя было проще сделать.

    Ответить
  8. Я все прочитал и все сделал, но по какой-то причине настройка не приминается и пишет следующее:
    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
    Можете помочь с этим?

    Ответить
  9. В статье в примере настроек строки съехали - не отображаются пробелы, а их важно поставить. Если их невозможно добавить, хотя бы надпишите, мол, нужны пробелы, как на скриншотах.
    А так статья помогла, спасибо.

    Ответить
  10. Это все работает. Но.
    Как привязать ip к wlan0?
    Интерфейс поднимается, но ip не присваивается.
    network:
    version: 2
    renderer: networkd
    ethernets:
    wlan0:
    dhcp4: false
    dhcp6: false
    addresses:
    - 192.168.4.254/24
    optional: true

    В generate ошибок нет.

    Ответить
  11. Прописать VLAN поверх интерфейса можно так:
    network:
    version: 2
    renderer: networkd
    ethernets:
    enp0s3:
    dhcp4: true
    dhcp6: false
    vlans:
    vlan10:
    id: 10
    link: enp0s3
    dhcp4: true
    dhcp6: false

    Ответить

Оставьте комментарий