Netplan — слой описания сети в Ubuntu и Debian: вы пишете YAML, а утилита генерирует конфигурацию для systemd-networkd или NetworkManager. Такой подход убирает разнобой между /etc/network/interfaces и настройками графической среды. В статье — статический адрес, DHCP, Wi-Fi, мост, VLAN, диагностика и типичные ошибки, из-за которых после netplan apply сервер теряет связь.
Как устроен Netplan
Файлы лежат в /etc/netplan и читаются в лексикографическом порядке. Обычно там один файл 50-cloud-init.yaml или 01-netcfg.yaml. Каждый документ содержит корневой ключ network с version: 2 и одним из рендереров: networkd для серверов, NetworkManager для десктопов. Netplan не является демоном: он вызывает генератор при загрузке и по команде.
- netplan generate — только собрать конфиги бэкенда, без применения.
- netplan apply — применить сразу, без возможности отката.
- netplan try — применить на 120 секунд и вернуть всё назад, если не подтвердить Enter.
- netplan status — показать текущее состояние, адреса и маршруты (Ubuntu 24.04 и новее).
На сервере по SSH используйте netplan try: при ошибке связь восстановится сама. Это дешевле, чем ехать в дата-центр с консолью.
DHCP и статический адрес
Минимальный конфиг для DHCP выглядит так. Имя интерфейса подставьте своё, его показывает команда ip link.
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: true
dhcp6: false
Для статического адреса указывайте routes вместо устаревшего gateway4. Ключ gateway4 всё ещё встречается в старых руководствах, но помечен как deprecated и в новых версиях может быть удалён.
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 192.168.1.50/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [1.1.1.1, 8.8.8.8]
search: [lan]
Обратите внимание на отступы: YAML не прощает табуляцию. После сохранения выставите права: файл с паролем Wi-Fi не должен быть доступен всем.
sudo chmod 600 /etc/netplan/01-netcfg.yaml
sudo netplan generate
sudo netplan try
Если адрес выдаётся по DHCP, но DNS нужно переопределить, используйте dhcp4-overrides с use-dns: false и отдельный блок nameservers. Такой приём полезен, когда локальный DHCP-сервер раздаёт неверный резолвер, а менять его настройки нельзя.
Несколько адресов и маршрутов
Один интерфейс может иметь несколько адресов, в том числе IPv6. Дополнительный маршрут в другую подсеть задаётся отдельной записью с metric: чем меньше значение, тем выше приоритет.
addresses: [192.168.1.50/24, 192.168.1.51/24, "fd00::50/64"]
routes:
- to: default
via: 192.168.1.1
metric: 100
- to: 10.20.0.0/16
via: 192.168.1.254
metric: 200
Если нужно отправить трафик в отдельную таблицу, добавьте table и правило в routing-policy. Это пригодится, когда в системе два провайдера и требуется развести ответы по источнику. Для домашней сети такие схемы избыточны.
Wi-Fi на ноутбуке
Для беспроводного интерфейса нужен пакет wpasupplicant, если используется networkd. На десктопе проще указать renderer: NetworkManager — тогда настройка останется видимой в графическом интерфейсе.
network:
version: 2
renderer: NetworkManager
wifis:
wlp2s0:
dhcp4: true
access-points:
"HomeNet":
password: "сложный-пароль"
SSID и пароль чувствительны к регистру. Для скрытой сети добавьте hidden: true, для WPA3 — блок auth с key-management: sae. Не храните этот файл в публичном репозитории и не публикуйте вывод netplan get.
Мост и VLAN
Мост нужен для виртуальных машин и контейнеров. Физический интерфейс становится портом моста и не получает адрес сам.
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
bridges:
br0:
interfaces: [enp3s0]
addresses: [192.168.1.10/24]
routes:
- to: default
via: 192.168.1.1
parameters:
stp: false
forward-delay: 0
VLAN создаётся поверх родительского интерфейса и получает собственный адрес. Идентификатор должен совпадать с настройкой порта на коммутаторе.
vlans:
vlan10:
id: 10
link: enp3s0
addresses: [10.0.10.5/24]
Если VLAN не поднимается, проверьте, что на порту коммутатора разрешён тег 10 и что родительский линк в состоянии UP. Ошибка в id приводит к тому, что интерфейс существует, но не получает трафик.
Диагностика
После применения проверяйте не только YAML, но и фактическое состояние ядра. netplan status показывает расхождения между желаемым и текущим.
netplan status --diff
ip -br addr
ip route
resolvectl status
Если адрес не появился, смотрите journalctl -u systemd-networkd и networkctl status enp3s0. Частая причина — опечатка в имени интерфейса: современные системы используют предсказуемые имена вроде enp3s0, а не eth0. Узнать имя можно через ip link.
networkctl status enp3s0
sudo journalctl -u systemd-networkd -n 80 --no-pager
sudo netplan --debug apply
Проверка перед перезагрузкой
Синтаксис проверяется командой netplan generate: она не меняет сеть, но показывает ошибки YAML и неизвестные ключи. Полный прогон удобно делать на копии каталога /etc/netplan, чтобы не задеть рабочий конфиг. Перед перезагрузкой убедитесь, что нужная служба включена: systemctl is-enabled systemd-networkd, а для десктопа — NetworkManager.
systemctl is-enabled systemd-networkd
sudo cp -a /etc/netplan /root/netplan-backup
ls -l /etc/netplan
Если после apply пропал DNS, проверьте /etc/resolv.conf: systemd-resolved управляет им через симлинк, а ручная правка файла будет перезаписана. Настройки резолвера смотрите через resolvectl status, а не через содержимое симлинка.
Типичные ошибки
- Файл 50-cloud-init.yaml перезаписывается cloud-init. Отключите управление сетью в /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg строкой network: {config: disabled}.
- Слишком открытые права: Netplan предупреждает и может отказаться применять файл.
- Два файла задают один интерфейс. Файл с более поздним именем перекрывает предыдущий, но лучше держать один источник истины.
- Смена IP по SSH без netplan try приводит к потере сессии.
- Шлюз указан через gateway4, а версия Netplan уже не поддерживает ключ.
Отдельно проверяйте конфигурацию после обновления системы: новые версии Netplan строже валидируют YAML и могут отказаться применять файл, который раньше работал.
Итог
Netplan сводит настройку сети к одному YAML-файлу и делает конфигурацию воспроизводимой. Для сервера достаточно статического адреса, маршрута по умолчанию и DNS; для ноутбука удобнее NetworkManager. Главное правило — менять сеть удалённо через netplan try и всегда проверять результат командами ip и netplan status, а не только отсутствием ошибок в YAML.