VLAN

VLAN (Virtual LAN, IEEE 802.1Q) — способ разбить один физический Ethernet-коммутатор на несколько независимых логических сетей. Пакеты между разными VLAN'ами не ходят напрямую, только через маршрутизатор (L3).

Зачем

802.1Q tag

В Ethernet-фрейм между полями src MAC и EtherType вставляется 4 байта:

┌─────────────────┬────────────┬──────────┬─────────────┐
│ TPID = 0x8100   │ PCP (3 bit)│ DEI (1)  │ VID (12 bit)│
└─────────────────┴────────────┴──────────┴─────────────┘

Итого 4094 VLAN'а на одной физической сети.

Access port vs Trunk port

AccessTrunk
Что подключаетсяКонечное устройство (ПК, принтер)Другой свитч или роутер
Tag на входе/выходеНет (свитч сам добавляет/снимает)Есть (передаётся as-is)
Сколько VLAN'овОбычно 1 (иногда 2: data + voice)Много

Native VLAN

На trunk-порту один VLAN может быть «нативным» — его фреймы идут без тега. Обычно VLAN 1. Осторожно: два свитча с разными native VLAN → трафик перепутается. Best practice — native VLAN не использовать для реального трафика.

Настройка

Cisco IOS

! Создать VLAN
Switch(config)# vlan 10
Switch(config-vlan)# name Sales

! Access-порт
Switch(config)# interface Fa0/1
Switch(config-if)# switchport mode access
Switch(config-if)# switchport access vlan 10

! Trunk
Switch(config)# interface Gi0/24
Switch(config-if)# switchport mode trunk
Switch(config-if)# switchport trunk allowed vlan 10,20,30
Switch(config-if)# switchport trunk native vlan 999

Linux

modprobe 8021q

# eth0.10 = VLAN 10 на eth0
ip link add link eth0 name eth0.10 type vlan id 10
ip addr add 192.168.10.1/24 dev eth0.10
ip link set eth0.10 up

# systemd-networkd
# /etc/systemd/network/10-vlan.netdev
[NetDev]
Name=eth0.10
Kind=vlan
[VLAN]
Id=10

OpenWrt / VyOS

Настройка VLAN через UCI / config mode. Обычно на роутерах есть встроенный switch chip — работает на wire speed.

Ограничения 802.1Q — 4094 VLAN'ов

Для крупных ДЦ мало. Решения:

Атаки на VLAN

См. также