// DevOps

Netplan: продвинутая настройка сети (туннели, VLAN, мосты, bonding)

Опубликовано 22.09.2026


Введение

Netplan — это утилита для декларативной настройки сети в Linux (Ubuntu, Debian и производные).
Обычно её используют для простых случаев вроде Ethernet или Wi-Fi, но она умеет гораздо больше:

  • туннельные интерфейсы (IPIP, GRE, VXLAN, WireGuard),
  • VLAN,
  • мосты (bridges),
  • связки интерфейсов (bonding).

Эти возможности позволяют строить сложные сетевые топологии — от домашних VPN до дата-центров и облачных окружений.


Туннельные интерфейсы

Туннели инкапсулируют пакеты одного протокола в другой. Используются для VPN, межсерверных соединений или изоляции сетей.

IPIP (IP-in-IP)

Простейший туннель IPv4-в-IPv4.

yaml
network:
  version: 2
  renderer: networkd
  tunnels:
    tun0:
      mode: ipip
      local: 192.168.1.100
      remote: 203.0.113.1
      addresses: [10.0.0.1/30]
      routes:
        - to: 10.0.1.0/24
          via: 10.0.0.2

GRE (Generic Routing Encapsulation)

Поддерживает больше протоколов, чем IPIP.

yaml
network:
  version: 2
  renderer: networkd
  tunnels:
    gre0:
      mode: gre
      local: 192.168.1.100
      remote: 203.0.113.1
      addresses: [10.0.0.1/30]
      routes:
        - to: 10.0.2.0/24
          via: 10.0.0.2

VXLAN (Virtual Extensible LAN)

Используется в виртуализации и облаках. Поддержка VXLAN появилась в netplan 0.105.

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      addresses: [192.168.1.100/24]
  tunnels:
    vxlan0:
      mode: vxlan
      id: 42               # идентификатор сети VXLAN (VNI), 1–16777215
      link: enp0s3
      local: 192.168.1.100
      remote: 203.0.113.1  # адрес второй стороны или multicast-группа, например 239.1.1.1
      port: 4789           # стандартный порт VXLAN
      addresses: [10.0.0.1/24]

Отдельного ключа для multicast-группы в netplan нет: адрес группы указывается в remote. Интерфейс, указанный в link, должен быть описан в той же конфигурации (блок ethernets), иначе netplan generate завершится ошибкой.

WireGuard

Современный VPN, поддержка появилась в netplan 0.100.

yaml
network:
  version: 2
  renderer: networkd
  tunnels:
    wg0:
      mode: wireguard
      port: 51820
      addresses: [10.0.0.2/24]
      key: /etc/wireguard/private.key   # закрытый ключ (base64) или путь к файлу
      peers:
        - keys:
            public: <remote-public-key>
          endpoint: 203.0.113.1:51820
          allowed-ips: [0.0.0.0/0]
          keepalive: 25

Закрытый ключ задаётся ключом key (или keys: private:), открытый ключ пира — keys: public:, интервал keepalive — keepalive. Ключей private-key, public-key и persistent-keepalive, привычных по wg-quick, в netplan нет — с ними netplan generate завершится ошибкой. Путь к файлу вместо самого ключа поддерживается с systemd-networkd версии 242. Вместо <remote-public-key> подставьте открытый ключ второй стороны в base64 — с заглушкой netplan конфигурацию не примет.


VLAN (Virtual LAN)

Сегментация трафика по VLAN ID.

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
  vlans:
    vlan10:
      id: 10
      link: enp0s3
      addresses: [192.168.10.100/24]
      routes:
        - to: default
          via: 192.168.10.1

Мосты (Bridges)

Объединяют несколько интерфейсов.

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3: { dhcp4: no }
    enp0s8: { dhcp4: no }
  bridges:
    br0:
      interfaces: [enp0s3, enp0s8]
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

Bonding (связка интерфейсов)

Для отказоустойчивости и/или увеличения пропускной способности.

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3: { dhcp4: no }
    enp0s8: { dhcp4: no }
  bonds:
    bond0:
      interfaces: [enp0s3, enp0s8]
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      parameters:
        mode: 802.3ad                # LACP (нужна поддержка на свитче)
        transmit-hash-policy: layer3+4
        mii-monitor-interval: 100

Почему bonding не ускоряет одиночное соединение и как выбрать режим, разобрано в статье «Резервирование каналов связи: внутри здания».


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

  • MTU:
    yaml
    mtu: 9000
  • MAC-адрес:
    yaml
    macaddress: 00:16:3e:12:34:56
  • Метрики маршрутов:
    yaml
    routes:
      - to: 192.168.2.0/24
        via: 192.168.1.1
        metric: 100

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

  1. Проверка синтаксиса:
    bash
    sudo netplan generate
  2. Тест на 120 секунд:
    bash
    sudo netplan try
  3. Применение:
    bash
    sudo netplan apply

Полезные советы

  • Права доступа: конфиги /etc/netplan/*.yaml должны быть 600 или 644, иначе будут предупреждения.
    bash
    sudo chmod 600 /etc/netplan/*.yaml
  • Проверка интерфейсов:
    ip a, ip r, nmcli (если используется NetworkManager).
  • Логи:
    journalctl -u systemd-networkd или /var/log/syslog.
  • Бэкапы: всегда сохраняйте копии перед экспериментами.

Совместимость возможностей Netplan по версиям

ВозможностьПоддержка в NetplanМинимальная версия UbuntuКомментарии
Ethernet, Wi-Fiвсегда17.10+ (по умолчанию)Базовые сценарии, поддержка всеми рендерерами
VLANвсегда17.10+vlans: работает и с networkd, и с NetworkManager
Bridgesвсегда17.10+Полная поддержка мостов
Bondingвсегда17.10+Режимы: active-backup, balance-rr, 802.3ad и др.
IPIP0.99+20.04+mode: ipip, работает через networkd
GRE0.99+20.04+mode: gre
VXLAN0.105+зависит от версии пакетаMulticast-группа задаётся в remote, стандартный порт 4789
WireGuard0.100+зависит от версии пакетаКлючи key, keys.public, keepalive; путь к файлу ключа — с networkd 242
MAC/MTU/Routesвсегда17.10+Тонкая настройка маршрутов и интерфейсов

Практические советы

  • Для Ubuntu 18.04: Netplan уже есть, но поддержка туннелей ограничена. Лучше обновиться или поставить netplan.io из backports.
  • Для Ubuntu 20.04 и новее доступность WireGuard и VXLAN зависит от установленной версии netplan.io (WireGuard — с 0.100, VXLAN — с 0.105); проверьте её перед настройкой.
  • Проверить свою версию пакета:
    bash
    apt show netplan.io | grep Version

Часто задаваемые вопросы (FAQ)

❓ Как проверить, работает ли конфигурация Netplan?
Используйте:

bash
sudo netplan try

— у вас будет 120 секунд на подтверждение. Если всё корректно, затем выполните:

bash
sudo netplan apply

❓ Как настроить VLAN через Netplan?
Пример:

yaml
vlans:
  vlan10:
    id: 10
    link: enp0s3
    addresses: [192.168.10.100/24]

❓ Как сделать WireGuard в Netplan?
Начиная с netplan.io 0.100:

yaml
tunnels:
  wg0:
    mode: wireguard
    key: /etc/wireguard/private.key
    peers:
      - keys:
          public: <remote-pubkey>
        endpoint: 203.0.113.1:51820
        allowed-ips: [0.0.0.0/0]

❓ Почему Netplan ругается на права файла?
Конфиги в /etc/netplan/ могут содержать ключи и пароли, поэтому netplan предупреждает, если файл доступен другим пользователям. Ставьте права 600:

bash
sudo chmod 600 /etc/netplan/*.yaml

❓ Поддерживает ли Netplan bonding?
Да. Пример для LACP (802.3ad):

yaml
bonds:
  bond0:
    interfaces: [enp0s3, enp0s8]
    parameters:
      mode: 802.3ad

Полезные ссылки

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ