VLAN
VLAN (Virtual LAN, IEEE 802.1Q) — способ разбить один физический Ethernet-коммутатор на несколько независимых логических сетей. Пакеты между разными VLAN'ами не ходят напрямую, только через маршрутизатор (L3).
Зачем
- Разделить трафик отделов: Sales в VLAN 10, Engineering в VLAN 20 — они не видят друг друга даже подключаясь к одному коммутатору.
- Broadcast-домены меньше — меньше ARP-флуда, широковещательного мусора.
- Безопасность: гости в VLAN 100 не могут спам-ARP серверам.
- Один кабель между свитчами — много изолированных сетей.
802.1Q tag
В Ethernet-фрейм между полями src MAC и EtherType вставляется 4 байта:
┌─────────────────┬────────────┬──────────┬─────────────┐
│ TPID = 0x8100 │ PCP (3 bit)│ DEI (1) │ VID (12 bit)│
└─────────────────┴────────────┴──────────┴─────────────┘
- TPID = 0x8100 — говорит что это VLAN-tagged фрейм.
- PCP (Priority Code Point) — приоритет 0-7, QoS.
- DEI (Drop Eligible Indicator) — можно ли дропнуть при перегрузке.
- VID (VLAN ID) — 12 бит, значения 1-4094 (0 и 4095 зарезервированы).
Итого 4094 VLAN'а на одной физической сети.
Access port vs Trunk port
| Access | Trunk | |
|---|---|---|
| Что подключается | Конечное устройство (ПК, принтер) | Другой свитч или роутер |
| 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'ов
Для крупных ДЦ мало. Решения:
- QinQ / 802.1ad — два тега (S-tag провайдера + C-tag клиента). До ~16 млн комбинаций.
- VXLAN — 24-битный VNI, 16 млн сегментов, работает поверх IP.
- GENEVE — 24 бита + расширяемые опции.
Атаки на VLAN
- VLAN hopping (double tagging). Клиент шлёт фрейм с двумя тегами. Первый свитч снимает свой native-тег, оставляя второй → пакет попадает в чужой VLAN. Защита: native VLAN не использовать вообще, включить
tagged-only. - Switch spoofing. Клиент притворяется свитчем и включает trunk через DTP (Dynamic Trunking Protocol). Защита: явно
switchport mode accessиnonegotiate. - Yersinia, Scapy — инструменты pen-теста VLAN.