Настройка сети в Linux при помощи Netplan

  • Автор:

netplan-linux-000.pngВнедрение новых технологий всегда вызывает определенные сложности и часто порождает недоверие и отторжение. Отчасти это оправдано, здравый консерватизм в системном администрировании только приветствуется, но при этом нужно идти в ногу со временем, чтобы не остаться на обочине технологий. Сегодня мы разберем базовые основы работы с netplan - новой утилитой для настройки сети в Ubuntu, которая определяет новый подход к управлению сетевыми настройками системы.

Ну вот, очередной "велосипед" - может сказать некто, но будет неправ. Чтобы понять почему нам следует сделать краткое отступление и рассмотреть системы управления сетевыми настройками в современных дистрибутивах Linux. Сегодня основных систем две: systemd-networkd и NetworkManager, также для совместимости везде поддерживается ifupdown с привычными каждому настройками в /etc/network/interfaces.

Многие по привычке продолжают использовать ifupdown, но это может привести к самым неожиданным последствиям, для примера рекомендуем прочесть заметку нашего коллеги Василия Алексеенко. Нравится нам это или нет, но ifupdown уходит в историю и нужно начинать использовать современные методы управления сетью. При этом systemd-networkd и NetworkManager настраиваются по-разному и в разных местах хранят свои настройки, а завтра появится что-то еще...

И вот здесь на сцену выходит Netplan - новый уровень абстракции над сетевыми менеджерами. Он предполагает, что мы описываем нужную нам сетевую конфигурацию в единой унифицированной форме, с применением языка YAML, которая затем, при помощи Netplan, конвертируется в настройки для одного из поддерживаемых менеджеров. Это позволяет один раз описать нужную сетевую конфигурацию, а затем переносить ее между системами не сильно задумываясь что там "под капотом".

В настоящее время Netpaln используется по умолчанию в Ubuntu и может быть установлен в Debian и других, основанных на этих дистрибутивах системах. Это можно сделать командой:

apt install netplan

при условии, конечно, что данный пакет есть в репозитории вашего дистрибутива.

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

Структура YAML файла состоит из полей и их значений, которые отделяются двоеточием, в качестве значения могут выступать числа, строки, списки или другие поля. Например:

поле0:
поле1:значение1
поле2:
-элементсписка1
-элементсписка2

В приведенном выше примере поле0 содержит поля 1 и 2 (структура определяется отступами), которые в свою очередь содержат значение и список значений. Ниже мы рассмотрим описания типовых конфигураций сети в Netplan. Все конфигурационные файлы Netplan хранятся в директории /etc/netplan, имя файла может быть любым, обязательно расширение .yaml, если файлов несколько, то они обрабатываются в алфавитном порядке. Это важный момент если у вас в разных файлах описаны зависящие друг от друга настройки, скажем, основного интерфейса и туннеля через него.

Автоматическое получение сетевых настроек по DHCP

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

network: 
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true

Первое поле указывает, что мы настраиваем сеть, далее указывается версия YAML и рендер, т.е. какой сетевой менеджер будет использоваться, если эта опция не указана, то подразумевается networkd, хотя мы советуем указывать ее явно. Альтернативным значением является NetworkManager, обратите внимание на регистр написания.

Поле ethernets содержит настройки проводных интерфейсов, в качестве значений выступают поля с именами интерфейсов, которые содержат поля с настройками. Для включения DHCP по протоколу IPv4 используется опция dhcp4, в которой можно указать как true/false, так и yes/no.

Если вы используете в качестве DHCP-сервера Windows Server то следует добавить еще одну опцию:

ens33:
dhcp4: true
dhcp-identifier: mac

Данная настройка предписывает использовать в качестве идентификатора узла MAC-адрес.

Настройка статического IP-адреса

Немного более сложная конфигурация, но если помнить о структуре YAML-файла, то она очень легко создается и легко читается.

network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: false
addresses: [192.168.233.154/24]
gateway4: 192.168.233.2
nameservers:
addresses: [1.1.1.1, 8.8.8.8]

Общие поля мы рассматривать не будем, перейдем сразу к настройкам интерфейса. В поле dchp4 прописываем значение false, так как мы не используем DHCP. Поле addresses подразумевает список значений, которые заключаются в квадратные скобки и перечисляются через запятую, скобки обязательны, даже если значение одно. Формат записи IP-адреса: адрес/префикс, префикс /24 соответствует маске 255.255.255.0.

Для указания шлюза служит поле gateway4, а для настройки DNS - nameservers, которое содержит вложенные поля, мы должны указать как минимум одно, с адресами DNS-серверов.

Также можно использовать и альтернативный вариант синтаксиса:

ens33: 
dhcp4: false
addresses:
- 192.168.233.154/24
gateway4: 192.168.233.2
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8

Оба варианта написания равнозначны, вы можете использовать любой из них.

Если требуется указать несколько IP-адресов для одного интерфейса, то запись будет выглядеть так:

addresses: [192.168.233.154/24, 192.168.1.154/24] 

или

addresses:
- 192.168.233.154/24
- 192.168.1.154/24

Имена интерфейсов типа ens33:0 в Netplan не поддерживаются, все настройки указываются для единого физического (или виртуального) интерфейсов.

Для доменных сетей (а также некоторых одноранговых) следует указать DNS-суффикс, т.е. имя домена, которое будет дописываться к плоским именам. Для этого используется поле search, которое также подразумевает список, в котором мы можем указать один или несколько DNS-суффиксов.

nameservers:
addresses:
- 192.168.233.100
- 192.168.233.101
search:
- interface31.lab

Обратите внимание, что при указании DNS-суффикса вы должны указать те DNS-сервера, которые обслуживают указанную зону, в противном случае эта настройка не будет иметь смысла.

Настройка Wi-Fi

Для успешного подключения к беспроводным сетям вам потребуется пакет wpasupplicant, установить его можно командой:

apt install wpasupplicant

Затем перейдем к описанию сетевой конфигурации в Netplan:

network:
version: 2
renderer: networkd
wifis:
wlx8416f91d8de0:
dhcp4: true
access-points:
MyWiFi:
password: Pa$$word_1

Настраивается она аналогично проводной, только для описания беспроводных интерфейсов используется отдельное поле wifis. Далее описываются сетевые настройки для каждого беспроводного адаптера, в нашем случае у него длинное непроизносимое имя wlx8416f91d8de0 и включено получение настроек по DHCP. А еще ниже указаны параметры подключения к беспроводной точке доступа, для их указания используется поле access-points где мы указываем имя сети (SSID), в нашем случае MyWiFi. В качестве значения поля с именем сети указываем поле password, которое содержит пароль подключения к беспроводной сети.

Настройка статических маршрутов

Указать статические маршруты в Netplan тоже достаточно просто, для этого используется одно из полей в настройках интерфейса, в простейшем случае это будет выглядеть так:

ens33: 
dhcp4: false
addresses:
- 192.168.233.154/24
gateway4: 192.168.233.2
nameservers:
addresses:
- 1.1.1.1
- 8.8.8.8
routes:
- to: 192.168.111.0/24
via: 192.168.233.101

При необходимости можно указать дополнительно метрику маршрута, для указания его приоритета:

routes:
- to: 192.168.111.0/24
via: 192.168.233.101
metric: 100

Отдельно следует остановиться на опции, которая в большинстве русскоязычных материалов приводится неправильно - on-link, обычно ее значение приводят как "активация маршрута при поднятии линка" или что-то подобное. Но это неверно. Само понятие On-link связано с непосредственно присоединенными сетями, которые доступны с указанного интерфейса без маршрутизации. В простейшем случае непосредственно присоединенной сетью является локальная сеть, настроенная на интерфейсе.

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

ethernets:
addresses: [ "10.10.10.1/24" ]
routes:
- to: 0.0.0.0/0
via: 9.9.9.9
on-link: true

В остальных случаях использовать эту опцию нет необходимости.

Использование NetworkManager

Если в качестве менеджера сети вы хотите использовать NetworkManager, то вам потребуется изменить всего-лишь одну строчку:

renderer: NetworkManager

Обратите внимание на регистр написания, в данном случае это важно.

Создание и применение конфигурации Netplan

Как мы говорили выше, Netplan не является сетевым менеджером, а поэтому следует создать на основании наших описаний сетевых конфигураций настоящие конфигурационные файлы для используемого менеджера сети, для этого выполните команду:

netplan generate

Если команда завершилась с ошибками - внимательно читаем вывод и исправляем их, чаще всего это синтаксические ошибки или неправильное количество отступов. Здесь проявляется один из плюсов новой системы, если вы ошиблись в файле описания, то сетевые настройки создать не удастся. В классической системе вы узнаете об этом, когда у вас отвалится сеть. Если же все прошло успешно, то сетевую конфигурацию можно применить. Но давайте не будем спешить.

Как современная система, Netplan предоставляет возможность проверить сетевые настройки перед их применением. Если мы выполним:

netplan try

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

netplan-linux-001.png

Это просто замечательное решение, которое трудно переоценить, особенно если вам приходится настраивать сеть удаленно.

Чтобы применить сетевые настройки без тестирования выполните:

netplan apply

Заключение

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

Нужно ли изучать и применять Netplan? На наш взгляд - нужно, вне зависимости от того, станет он впоследствии единым стандартом или нет. Уже сегодня он дает отличную читаемость и переносимость сетевых конфигураций, а также предоставляет ряд современных возможностей, делающих работу с сетью проще и безопаснее.

Дополнительные материалы:

  1. Netplan configuration examples