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-устройство¶
Шаг 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.