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

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

Откуда взялся Netplan

В Ubuntu Netplan появился с версии 17.10 как замена классическому ifupdown для десктопа и сервера. Цель простая: один декларативный формат, а низкоуровневую работу отдают networkd или NetworkManager. Старые схемы (interfaces, NetworkManager напрямую) никуда не делись, но для облака, VPS и автоматизации YAML в netplan обычно удобнее.

Администратор описывает желаемое состояние интерфейсов, адресов и маршрутов. Netplan генерирует конфиги для выбранного renderer и применяет их командой netplan apply.

Зачем это нужно

  1. Декларативный YAML — конфиг читается как документация, его удобно класть в git и ansible.
  2. Широкий охват — ethernet, Wi-Fi, DHCP и статика, VLAN, bonding, bridges, туннели, дополнительные маршруты.
  3. Два бэкенда — на серверах чаще 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. Для десктопа с GUI чаще ставят NetworkManager.
  • dhcp4: false — адрес не берём по DHCP (в старых примерах писали no, оба варианта встречаются).
  • addresses, маршрут to: default и nameservers — IP, шлюз и DNS. Ключ gateway4 в старых гайдах ещё встречается, но в актуальном netplan предпочтительнее явный default-маршрут в routes.

Перед применением имеет смысл проверить синтаксис:

sudo netplan try
# или сразу
sudo netplan apply

netplan try откатит изменения, если вы не подтвердите их вовремя — полезно при удалённой настройке, чтобы не потерять 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:
    ipsec0:
      mode: gre
      remote: 203.0.113.1
      local: 192.168.1.100

Локальный конец — 192.168.1.100, удалённый — 203.0.113.1. Дальше поверх туннеля настраивают адреса, маршруты и при необходимости криптографию отдельными средствами.

Мониторинг и уведомления

Сам Netplan не заменяет систему мониторинга. Состояние линков и адресов смотрят через networkctl, ip, а алерты — через Zabbix, Nagios, Prometheus node exporter и т.д. Если нужно письмо при смене конфига, это уже cron или systemd path unit плюс ваш скрипт: netplan только применяет YAML.

Дистрибутивы

Ubuntu

С 17.10 Netplan — основной путь для сетевых настроек на сервере. В LTS 20.04, 22.04 и новее он стоит по умолчанию. Файлы от cloud-init лучше не править «в лоб», если инстанс пересоздаётся: правьте user-data или свой drop-in с более высоким приоритетом имени.

Debian

В Debian netplan не всегда default. При необходимости:

sudo apt install netplan.io

Дальше — тот же каталог /etc/netplan/ и выбор renderer. Учтите, что вместе с ifupdown могут быть конфликты: один инструмент должен владеть интерфейсом.

Fedora, CentOS, RHEL

Там по умолчанию NetworkManager и nmcli/keyfiles. Пакет netplan.io теоретически можно поставить, но экосистема вокруг него слабее, чем в Ubuntu. Для этих семейств обычно остаются на NetworkManager.

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

В YAML netplan описывают VLAN-субинтерфейсы, bond-агрегацию, bridge для KVM/LXD, маршруты для отдельных namespace. Для Docker и Kubernetes сеть контейнеров чаще настраивают сами runtime и CNI; netplan отвечает за хостовые интерфейсы, на которых это всё крутится. Готовые примеры bonding и не только есть в репозитории Canonical (ссылка в конце).

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

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

Итог

Netplan — тонкий слой поверх networkd или NetworkManager: один YAML, предсказуемое применение, удобная автоматизация. Для VPS и bare-metal Ubuntu это обычно лучший старт, чем ручные правки ifupdown. Сложные сценарии (bond, VLAN, маршруты, туннели) тоже ложатся в тот же формат — без зоопарка скриптов.

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


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