Netplan 1.0 упрощает управление сетью в Ubuntu 24.04. В статье — как правильно настроить Netplan на VPS, примеры конфигов для статических IP и DHCP, проверка синтаксиса и диагностика ошибок после применения конфигурации.
Введение
Исторически настройка сети в Linux напоминала работу с археологическими слоями: устаревший ifconfig соседствовал с ручными правками /etc/network/interfaces, а современный iproute2 требовал сложных скриптов. Это приводило к фрагментации — ведь использовались разные инструменты, синтаксисы и методы для одинаковых задач. Ситуация усугублялась в облачных средах, где нужно было согласовывать конфиги cloud-init с локальными настройками.
Решение пришло с Netplan — декларативным сетевым менеджером, который стал стандартом в Ubuntu начиная с 18.04. Его философия: «опиши что нужно, а Netplan сгенерирует низкоуровневые конфиги». В Ubuntu 24.04 вышла версия Netplan 1.0, устранившая главные боли админов:
- нативная поддержка WiFi;
- стабильный API;
- интеграция с cloud-init;
- диагностика в реальном времени (команда netplan status).
Проверка среды и бекап
Перед изменением сетевых настроек в Ubuntu 24.04 убедитесь, что среда соответствует минимальным требованиям:
- Установлен пакет Netplan 1.0. Установка:
sudo apt update && sudo apt install netplan.io
Проверка версии:
netplan --version
- На серверах должен быть установлен systemd-networkd (обычно предустановлен).
- Если нужна настройка WiFi на рабочей станции — установите NetworkManager:
sudo apt install network-manager
Проверьте активный бэкенд (понадобится при настройке Netplan):
ps aux | grep -E "networkd|NetworkManager"
Сделайте бекап текущих конфигов, так как любая ошибка в синтаксисе YAML может разорвать сетевое соединение. Netplan хранит конфигурации в /etc/netplan/*.yaml, создайте его полную резервную копию (бекап включает скрытые файлы, например .yaml.swp):
sudo cp -r /etc/netplan /etc/netplan.bak
Если новые настройки будут с ошибками, вы сможете восстановить рабочую конфигурацию командой:
sudo cp -r /etc/netplan.bak/* /etc/netplan/ && sudo netplan apply
Проверьте текущие сетевые интерфейсы, зафиксируйте состояние сети до изменений — это поможет диагностировать проблемы:
ip -c a # покажет интерфейсы с цветным выводом
netplan status --all # сводка по всем интерфейсам
Пример вывода netplan status:
Online state: online
DNS Addresses: 8.8.8.8 (stub)
DNS Search: example.com
Network Interfaces:
● enp5s0: Ethernet
MAC: 00:11:22:33:44:55
Network: 192.168.1.0/24
Addresses: 192.168.1.100/24
Gateway: 192.168.1.1
Если вы настраиваете удалённый сервер, не закрывайте текущую SSH-сессию до тестирования новых настроек. Для физических серверов убедитесь, что у вас есть доступ к IPMI.
Структура конфигурации Netplan 1.0
Конфигурация Netplan описывается в YAML-файлах с жёсткой структурой, несоблюдение синтаксиса приведёт к ошибкам генерации сети. Разберём обязательные компоненты.
Базовые секции (должны присутствовать в каждом конфиге):
network:
version: 2 # только версия 2 поддерживает современные функции
renderer: networkd # или NetworkManager
ethernets: # секция для проводных интерфейсов
<имя_интерфейса>:
<параметры>
Здесь:
- version: 2 — фиксированное значение, версия 1 устарела и не поддерживает новые функции Netplan 1.0;
- renderer — движок рендеринга:
- networkd — системный демон, для серверов;
- NetworkManager — для десктопов с GUI, WiFi, VPN;
- ethernets/wifis/bridges — блоки описания интерфейсов (должен присутствовать минимум один).
Правила синтаксиса YAML:
- Отступы — строго 2 пробела на уровень вложенности, табы запрещены. Пример:
network: # уровень 0
ethernets: # уровень 1 (2 пробела)
enp5s0: # уровень 2 (4 пробела)
dhcp4: true # уровень 3 (6 пробелов)
- Синтаксис чувствителен к регистру: ключи (version, renderer), значения (networkd, true) — только в нижнем регистре, имена интерфейсов (enp5s0, br0) также чувствительны к регистру (сверяйте через ip link show).
- Важен и формат значений:
- булевые значения — без кавычек;
- списки — в квадратных скобках [ ];
- строки — в двойных кавычках ("My Wi-Fi").
Минимальный рабочий пример (DHCP):
# /etc/netplan/00-config.yaml
network:
version: 2
renderer: networkd # для серверов
ethernets:
enp5s0: # системное имя интерфейса (через ip link)
dhcp4: true # включить DHCPv4
dhcp4-overrides: # опциональные переопределения
use-dns: false # не использовать DNS от DHCP-сервера
Секции для разных типов интерфейсов:
Секция | Назначение | Примеры интерфейсов |
ethernets | Физические Ethernet-адаптеры | enp5s0, eth0 |
wifis | Беспроводные адаптеры (требует NetworkManager) | wlp3s0 |
bridges | Сетевые мосты для виртуализации | br0, vmbr |
bonds | Агрегация каналов (bonding) | bond0 |
vlans | VLAN-интерфейсы | vlan100 |
Важно:
- Имена интерфейсов должны совпадать с системными (проверка — ls /sys/class/net);
- Файлы в /etc/netplan/ обрабатываются в алфавитном порядке — поэтому используйте префиксы (00-, 01-);
- Комментарии начинаются с #.
Диагностика ошибок структуры:
sudo netplan generate --debug # покажет конкретную строку с ошибкой
Пример вывода для неверного отступа:
Error in network definition //etc/netplan/00-config.yaml line 5 column 1:
invalid indentation (expected 4 spaces)
Базовые сценарии (DHCP и статическая конфигурация)
Рассмотрим две конфигурации сети в Netplan 1.0: динамическое получение адресов (DHCP) и ручную настройку статических параметров.
Динамический IP (DHCP)
DHCP — самый распространённый сценарий для рабочих станций и серверов в корпоративных сетях. Конфигурация:
# /etc/netplan/00-dhcp.yaml
network:
version: 2
renderer: networkd # используется systemd-networkd
ethernets:
enp3s0: # имя интерфейса (проверьте через ip link)
dhcp4: true # включить DHCP для IPv4
dhcp6: false # отключить DHCPv6 (опционально)
dhcp-identifier: mac # критично для облачных сред!
Пояснение параметров:
- dhcp4: true — основной параметр для получения IPv4-адреса, маршрута и DNS;
- dhcp-identifier: mac — использовать MAC-адрес как идентификатор клиента вместо имени хоста; это обязательно для:
- облачных хостингов (предотвращает конфликт IP при клонировании виртуальных машин);
- систем с Cloud-Init (Cloud-Init может менять hostname на ранних стадиях загрузки);
- dhcp6: false — явное отключение IPv6 (если не используется).
Применяя конфиг (sudo netplan apply), Netplan генерирует файл для systemd-networkd (например, /run/systemd/network/10-netplan-enp3s0.network):
[Match]
Name=enp3s0
[Network]
DHCP=ipv4
LLMNR=no # отключение LLMNR для безопасности
MulticastDNS=no
[DHCP]
UseHostname=false # важно при dhcp-identifier: mac
ClientIdentifier=mac
Статический IPv4 + DNS
Для серверов, требующих фиксированных адресов (веб-серверы, БД, шлюзы):
# /etc/netplan/00-static.yaml
network:
version: 2
ethernets:
enp3s0:
addresses:
- 192.168.1.100/24 # основной IPv4-адрес и маска
- 2001:db8::10/64 # пример IPv6 (опционально)
routes:
- to: default # маршрут по умолчанию
via: 192.168.1.1 # шлюз IPv4
metric: 100 # приоритет
- to: default
via: 2001:db8::1 # шлюз IPv6 (если используется)
nameservers:
addresses: [8.8.8.8, 8.8.4.4, 2001:4860:4860::8888] # Google DNS
search: [example.com] # домен для поиска
Ключевые элементы:
- addresses — поддерживает несколько адресов через перечисление;
- routes:
- to: default — маршрут по умолчанию (0.0.0.0/0);
- via — IP-адрес шлюза;
- metric — приоритет (100 для основного, 200 для резервного), чем меньше значение, тем выше приоритет;
- nameservers:
- addresses — массив DNS-серверов (IPv4 и IPv6);
- search — список доменов для автоматического дополнения имён.
Возможные ошибки:
- Неправильная маска — используйте только CIDR-нотацию.
- Отсутствие шлюза — без routes: to: default не будет доступа в интернет.
- Конфликт IP — проверьте уникальность адреса в сети (arping ххх.ххх.х.ххх).
В продакшене всегда указывайте metric для маршрутов — это предотвратит проблемы при наличии нескольких шлюзов. Для критичных серверов продублируйте DNS: корпоративный + публичный (Google/Cloudflare). Также используйте отдельный файл конфига для каждого интерфейса (например, 01-enp3s0.yaml).
Применение и отладка
Проверка синтаксиса и применение конфига
Перед применением всегда проверяйте синтаксис YAML-файлов:
sudo netplan generate
Эта команда проверяет корректность отступов, структуры и значений и генерирует низкоуровневые конфиги для systemd-networkd/NetworkManager в /run, при этом изменения не применяются к работающей сети.
При отсутствии вывода конфиг валиден, при ошибках вы увидите указание на проблемную строку:
Invalid YAML at //etc/netplan/01-bridge.yaml line 5 column 10: expected <block end>, but found '<scalar>'
Для активации новой конфигурации выполните:
sudo netplan apply
Netplan сравнит новую конфигурацию с текущей и перезагрузит только изменённые интерфейсы (без полного рестарта сети). Для изменений, требующих перезагрузки интерфейса (например, смена IP), выполняется последовательность:
- временное дублирование адресов (IPv4 DAD);
- переход без разрыва существующих TCP-сессий.
При изменении шлюза по умолчанию возможен кратковременный разрыв соединения (1-2 сек).
Для мостов/bonding интерфейсов требуется пересоздание — поэтому используйте --debug, чтобы контролировать ход процесса:
sudo netplan apply --debug
Инструменты отладки
Просмотр логов в реальном времени (для systemd-networkd):
journalctl -u systemd-networkd -f
Основные типы ошибок:
- Could not set route — проблемы с маршрутизацией;
- DHCPv4 request timed out — отсутствие ответа от DHCP-сервера;
- File exists — конфликт IP-адресов.
Команда netplan status для полного вывода по всем интерфейсам:
netplan status --all
Пример вывода:
● enp5s0: Ethernet (networkd: enp5s0)
MAC: 00:11:22:33:44:55
Link: up
Addresses: 192.168.1.100/24
Gateway: 192.168.1.1
DNS: 8.8.8.8
State: routable (configured)
● br0: Bridge (networkd: br0)
Interfaces: enp5s0
Addresses: 10.0.0.2/24
STP: on (forward-delay: 4s)
State: degraded (port enp5s0 blocked by STP)
Ключевые состояния:
- routable — интерфейс работает корректно;
- degraded — есть проблемы (например, порт заблокирован STP);
- unmanaged — интерфейс не управляется Netplan.
Команды для ручной проверки интерфейсов (в примерах enp3s0 — замените на ваш).
- Проверка состояния интерфейса и IP-адресов:
ip -c addr show enp3s0
- Проверка таблицы маршрутизации:
ip route show
- Состояние DNS:
resolvectl status
- Пример проверки конкретного интерфейса:
resolvectl status enp3s0
- Быстрая комплексная проверка за одну команду:
echo "IP: $(ip -br a show enp3s0)";
echo "Routes: $(ip -c route list default)";
echo "DNS: $(resolvectl dns enp3s0)"
Тестирование сложных конфигураций с автоматическим откатом через 120 секунд:
sudo netplan try
Система вернёт предыдущую конфигурацию, если не нажать Enter для подтверждения.
Экстренное восстановление
Если после выполнения apply связь с сервером потеряна, войдите в консоль через IPMI/iDRAC и восстановите бекап:
sudo cp /etc/netplan.bak/*.yaml /etc/netplan/
sudo netplan apply
Для полного сброса к DHCP:
echo "network: {version: 2, ethernets: {enp5s0: {dhcp4: true}}}" | sudo tee /etc/netplan/00-reset.yaml
sudo netplan apply
Заключение
Рекомендации для продакшена:
- Всегда используйте netplan generate перед apply.
- На удалённых серверах применяйте изменения через screen/tmux;
- Для критичных систем сначала тестируйте в виртуальной среде.
Читайте в блоге:
- Настройка заданий cron и systemd-таймеров для автоматизации рутинных задач на Ubuntu 24.04
- Основы работы с nftables на Ubuntu 24.04
- Как генерировать надёжные пароли на Ubuntu 24.04