Netplan: настройка сети в Ubuntu через YAML

Netplan: настройка сети в Ubuntu через YAML

Netplan это стандартный способ описать сеть в Ubuntu. Вместо разрозненных скриптов ifupdown вы пишете YAML в /etc/netplan/, а Netplan превращает его в настройки для выбранного бэкенда: systemd-networkd или NetworkManager. В документации он так и называется: абстракция над сетевыми настройками, где вы описываете, что нужно, а не как это сделать. Ниже установка, статический IP, маршруты, туннель и нюансы на сервере.

Откуда взялся Netplan и зачем он нужен

В Ubuntu Netplan появился в версии 17.10 и заменил классический ifupdown. Идея простая: один декларативный формат, а низкоуровневую работу делает networkd или NetworkManager. Администратор описывает желаемое состояние интерфейсов, адресов и маршрутов, Netplan генерирует конфиги для бэкенда (renderer) и применяет их командой netplan apply.

  • YAML как документация. Конфиг легко читать, хранить в git и раскатывать через Ansible.
  • Широкий охват. Ethernet, Wi-Fi, DHCP и статика, VLAN, bonding, мосты, туннели, дополнительные маршруты.
  • Два бэкенда. На серверах обычно networkd, на рабочих станциях и ноутбуках NetworkManager.

Установка и где лежат файлы

В Ubuntu пакет netplan.io уже стоит. Если его нет:

sudo apt -y install netplan.io

Конфиги лежат в /etc/netplan/. Обычно это 00-installer-config.yaml или 50-cloud-init.yaml: имя зависит от того, как ставили систему, через инсталлятор, cloud-init или вручную. Файлы читаются по алфавиту, поэтому свой файл с более высоким номером переопределяет настройки из предыдущих.

Статический IP

Пример для интерфейса enp3s0 со статическим адресом. Имя интерфейса смотрите через ip link или networkctl, на разных машинах оно разное.

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
  • renderer: networkd: сетью управляет systemd-networkd. Для десктопа с графической оболочкой обычно ставят NetworkManager.
  • dhcp4: false: адрес не берём по DHCP. В старых примерах пишут no, работает и так.
  • addresses, маршрут to: default и nameservers: адрес, шлюз и DNS.

Ключ gateway4 из старых инструкций ещё встречается, но в справочнике YAML он помечен как устаревший: шлюз по умолчанию теперь задают маршрутом to: default в routes, как в примере выше.

netplan try: применить и не потерять SSH

sudo netplan generate   # проверить синтаксис и сгенерировать конфиги
sudo netplan try        # применить с автоматическим откатом
sudo netplan apply      # применить окончательно

По документации, netplan try применяет конфиг и сам откатывает его, если вы не подтвердили изменения вовремя. По умолчанию ждёт 120 секунд, время меняется ключом --timeout. На удалённом сервере это спасает от ситуации, когда опечатка в YAML отрезала вас от SSH.

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

Когда в разные подсети нужно ходить через разные шлюзы на одном интерфейсе:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: 10.0.0.0/24
          via: 192.168.1.1
        - to: 172.16.0.0/16
          via: 192.168.1.254

Сеть 10.0.0.0/24 уходит через 192.168.1.1, а 172.16.0.0/16 через 192.168.1.254. Так удобно разводить доступ к лаборатории, VPN-шлюзу или соседнему сегменту без отдельного интерфейса.

Туннель GRE

Netplan умеет описывать туннели. GRE это только инкапсуляция, а не VPN с шифрованием: шифрование при необходимости добавляют сверху, например через IPsec или WireGuard.

network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: false
      addresses:
        - 192.168.1.100/24
  tunnels:
    gre1:
      mode: gre
      local: 192.168.1.100
      remote: 203.0.113.1

Локальный конец 192.168.1.100, удалённый 203.0.113.1. Дальше на туннель вешают адреса и маршруты.

Как проверить, что получилось

Состояние линков и адресов смотрят через ip a, ip r и networkctl status. В новых версиях есть netplan status: команда показывает текущую сетевую конфигурацию в читаемом виде, а с ключом --diff разницу между YAML и тем, что реально применено. Данные она берёт из systemd-networkd.

Сам Netplan не система мониторинга. Алерты по сети настраивают в Zabbix, Prometheus с node exporter и подобных. Если нужно уведомление при смене конфига, это уже cron или systemd path unit плюс свой скрипт.

Ubuntu, Debian и семейство RHEL

  • Ubuntu. С 17.10 Netplan основной способ настройки сети, в LTS-версиях он стоит по умолчанию. Файл от cloud-init лучше не править в лоб, если инстанс пересоздаётся: правьте user-data или кладите свой файл с более высоким номером.
  • Debian. Netplan не всегда стоит по умолчанию, ставится пакетом netplan.io. Каталог тот же. Следите, чтобы интерфейсом владел один инструмент, а не ifupdown и Netplan одновременно.
  • Fedora, CentOS, RHEL. Там по умолчанию NetworkManager с nmcli и keyfile-конфигами. Netplan поставить можно, но экосистема вокруг него слабее, обычно остаются на NetworkManager.

VLAN, bonding и контейнеры

В YAML Netplan описывают VLAN-интерфейсы, агрегацию через bond и мосты для KVM или LXD. Сетью контейнеров в Docker и Kubernetes обычно занимаются сами runtime и CNI, а Netplan отвечает за интерфейсы хоста, на которых всё это работает. Готовые примеры bonding, VLAN, Wi-Fi, мостов и маршрутизации лежат в репозитории Canonical.

Короткий чеклист

  1. Правите YAML в /etc/netplan/*.yaml, отступы только пробелами.
  2. Проверяете: sudo netplan generate и sudo netplan try.
  3. Применяете: sudo netplan apply.
  4. Смотрите результат: ip a, ip r, networkctl status или netplan status.

Если нужно настроить сеть и всё остальное на VPS под ключ, это ко мне: по прайс-листу настройка VPS стоит от 10 000 ₽.

В итоге Netplan это тонкий слой поверх networkd или NetworkManager: один YAML, предсказуемое применение и удобная автоматизация. Для VPS и железных серверов на Ubuntu это нормальный старт, а netplan try страхует от потери доступа при правках по SSH.

Источники и ссылки


Комментарии загружаются…