Linux

Netplan: настройка сети в Ubuntu без боли и костылей

4 мин. чтения
Netplan: настройка сети в Ubuntu без боли и костылей

Если ты когда-либо настраивал сеть в старых версиях Ubuntu через /etc/network/interfaces, а потом внезапно столкнулся с Netplan в Ubuntu 18.04 и выше — скорее всего, первые минуты выглядели как «зачем они сломали то, что работало?».

Спойлер: Netplan — это не слом, а эволюция. И сейчас я докажу, что это самый удобный инструмент для управления сетью в Linux.


Что такое Netplan и зачем он нужен?

Netplan — это утилита от Canonical, которая позволяет описывать конфигурацию сетевых интерфейсов на языке YAML. Она не заменяет systemd-networkd или NetworkManager, а работает как прослойка-транслятор.

Вы пишете красивый человекочитаемый YAML-файл, а Netplan превращает его в конфиги для бэкенда (рендерера), который реально управляет сетью.

Почему это круто:

  • Единый формат описания сети (больше не нужно помнить синтаксис двух разных систем).

  • Версионирование конфигов в Git без мусора.

  • Возможность атомарного отката (netplan try — твой лучший друг).

  • Отличная работа с облаками и виртуализацией.


Где живут конфиги?

Все настройки хранятся в /etc/netplan/. Обычно там лежит один файл — 01-netcfg.yaml или 00-installer-config.yaml. Имя не принципиально, главное — расширение .yaml.

Важно: Netplan применяет все yaml-файлы в директории в лексикографическом порядке. Если в двух файлах указаны настройки одного интерфейса — второй перезапишет первый.


Структура файла: разбор на пальцах

Стандартный конфиг выглядит так:

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

Давай разберем:

  • version: 2 — обязательно. Версия 1 устарела, про неё забудь.

  • renderer — кто будет выполнять настройку. networkd (для серверов) или NetworkManager (для десктопов/WiFi).

  • ethernets — блок для проводных интерфейсов. Аналогично есть wifis и bridges.


Три примера для 99% задач

1. DHCP (всё само)

yaml
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      dhcp6: false   # можно и true
      optional: true # не ждать сеть при загрузке (ускоряет старт)

2. Статический IP (сервер/VM)

yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
      search: [mydomain.local] # поисковый домен

Обрати внимание: gateway4 — это старый синтаксис (работает до сих пор). Новый (более гибкий) использует routes. Но для одного шлюза по умолчанию gateway4 вполне ок.

3. WiFi + NetworkManager

yaml
network:
  version: 2
  renderer: NetworkManager
  wifis:
    wlp2s0:
      dhcp4: true
      access-points:
        "MyHomeWiFi":
          password: "супер-секретный-пароль"

Routes: когда одного шлюза мало

Настраиваем два интерфейса с разными шлюзами:

yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses: [10.0.0.5/24]
      routes:
        - to: default
          via: 10.0.0.1
          metric: 100
    eth1:
      addresses: [192.168.100.5/24]
      routes:
        - to: 10.10.0.0/16
          via: 192.168.100.1

Мосты и агрегация (Bonding)

Соберем bond из двух интерфейсов для отказоустойчивости:

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: false
    eno2:
      dhcp4: false
  bonds:
    bond0:
      interfaces: [eno1, eno2]
      parameters:
        mode: active-backup
        primary: eno1
        mii-monitor-interval: 100
      addresses: [10.0.0.10/24]
      gateway4: 10.0.0.1

Команды, которые нужно знать наизусть

bash
# Проверить синтаксис
sudo netplan generate

# Применить конфигурацию (осторожно, если работаешь по SSH!) sudo netplan apply

# Безопасное применение с таймаутом (спасение для удаленки) sudo netplan try

# Посмотреть текущее состояние интерфейсов (парсинг show) netplan get

Лайфхак: всегда используй netplan try, когда настраиваешь сеть по SSH. Если что-то пойдет не так — через 2 минуты конфиг откатится автоматически.


Типичные грабли (и как их избежать)

1. Пробелы и отступы

YAML не прощает ошибок в отступах. Используй пробелы, никогда — табуляцию.

✅ Правильно:

yaml
ethernets:
  eth0:
    dhcp4: true

❌ Неправильно:

yaml
ethernets:
  eth0:
   dhcp4: true    # один пробел не хватает

2. Интерфейс переименовался

Если ты вставил диски со старой системы в новую — eth0 может превратиться в enp5s0.
Перед настройкой выполни ip a и проверь реальные имена интерфейсов.

3. Конфликт с NetworkManager

На серверах часто не нужен NetworkManager. Лучше отключи его:

bash
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager

И в Netplan укажи renderer: networkd.


Почему я перешел на Netplan и не жалею

До Netplan я мучительно правил interfaces и ругался на systemd-networkd за его многофайловость. Сейчас я пишу один YAML-файл, кладу его в репозиторий и разворачиваю сеть на новых серверах одной командой.

Netplan не идеален: документация могла бы быть подробнее, а поддержка VLAN/Bridge в некоторых сценариях требует танцев с бубном. Но для 95% повседневных задач он просто великолепен.


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

Новые статьи на почту

Без спама, только полезное

Подписываясь, вы соглашаетесь с политикой конфиденциальности

Читайте также