Перейти к содержанию

VLAN 802.1Q в systemd-networkd

VLAN позволяет передавать несколько логических сетей через один физический или виртуальный интерфейс с тегами IEEE 802.1Q. Для НАЙС.ОС CLOUD это штатная задача systemd-networkd, а не команд netplan. Настраиваются два файла: описание виртуального устройства .netdev и назначение его родительскому интерфейсу через .network.

Перед изменением

VLAN должен быть разрешён на гипервизоре, коммутаторе или в облачной сети. Изоляция VLAN не заменяет iptables. Если управляющий SSH проходит через изменяемый интерфейс, работайте с консоли VM и сохраняйте исходные файлы.

Пример топологии

Объект Пример Назначение
Физический интерфейс ens3 Trunk
VLAN ID 120 Логическая сеть приложений
VLAN интерфейс vlan120 Интерфейс внутри НАЙС.ОС
IPv4 192.0.2.20/24 Документационный адрес
Шлюз отсутствует Не создаём второй default route

Адреса 192.0.2.0/24 — учебные. Не копируйте их в производственную конфигурацию.

Шаг 1. Проверка фактических интерфейсов

ip -br link
networkctl status ens3
ip -d link show dev ens3
ls -1 /etc/systemd/network /run/systemd/network 2>/dev/null

Не изменяйте существующую конфигурацию uplink без понимания, как сейчас получены адрес и маршрут управления.

Шаг 2. Создайте VLAN-устройство

# /etc/systemd/network/20-vlan120.netdev
[NetDev]
Name=vlan120
Kind=vlan

[VLAN]
Id=120

Шаг 3. Привяжите VLAN к родителю

# /etc/systemd/network/10-ens3.network
[Match]
Name=ens3

[Network]
VLAN=vlan120
# Сюда переносится существующий DHCP/Address родителя,
# если управляющая сеть действительно живёт на ens3.

Не переписывайте существующий профиль этим фрагментом целиком

В файле показана добавляемая директива VLAN=vlan120. Если у ens3 уже есть DHCP, маршруты, MTU или другие параметры, их необходимо сохранить. Иначе вы потеряете управляющую сеть.

Шаг 4. Адресация VLAN

# /etc/systemd/network/20-vlan120.network
[Match]
Name=vlan120

[Network]
Address=192.0.2.20/24
# Gateway здесь намеренно отсутствует.

Если адрес должен поступать из DHCP VLAN, используйте DHCP=ipv4 вместо статического Address. Не задавайте два маршрута по умолчанию без осмысленной схемы приоритетов.

Шаг 5. Применение и проверка

networkctl reload
networkctl reconfigure ens3
networkctl status vlan120
ip -d link show vlan120
ip -4 address show dev vlan120
ip route get 192.0.2.1
journalctl -b -u systemd-networkd --no-pager -n 80

Если VLAN-устройство не создано, проверьте правильность Kind=vlan, наличие [VLAN] Id=, соответствие .network родительскому интерфейсу и сообщения systemd. Доступность соседей можно проверять ping -I vlan120 <доступный_IP>, однако ICMP часто фильтруется — отсутствие ответа не всегда означает ошибку VLAN.

Особые случаи

  • Bridge поверх VLAN. Если виртуальные машины должны подключаться к тегированной сети через программный bridge, используйте отдельное руководство Linux bridge.
  • MTU. Наличие VLAN-тега уменьшает полезную нагрузку при несовместимой конфигурации физических устройств. Согласуйте MTU на всём пути.
  • Сетевая изоляция. Настройте правила iptables и маршруты по роли узла.
  • Перезагрузка. После проверки без неё подтвердите, что .netdev и .network воспроизводятся после старта.

Восстановление

Возвращайте изменения с консоли: удалите новый .netdev, восстановите родительский профиль из резервной копии и перечитайте конфигурацию. Не удаляйте файлы в /usr/lib/systemd/network/ ради отключения VLAN.

Источники: systemd.netdev, systemd.network; наличие systemd-networkd — Core/systemd/SPECS/systemd.spec.