VXLAN

VXLAN (Virtual Extensible LAN, RFC 7348) — инкапсуляция Ethernet-фреймов в UDP. Позволяет строить L2-сегменты поверх L3-инфраструктуры и иметь 16 миллионов VLAN'ов вместо 4094. Стандарт для облачных ДЦ, Kubernetes CNI (Flannel, Weave, Calico), OpenStack, VMware NSX.

Формат

┌────────────┐
│ Outer L2   │   ← Ethernet между VTEP'ами
├────────────┤
│ Outer IP   │
├────────────┤
│ Outer UDP  │   ← dst port 4789
├────────────┤
│ VXLAN hdr  │   ← 8 байт, VNI 24 бита
├────────────┤
│ Inner L2   │   ← оригинальный Ethernet-фрейм
│ Inner IP   │      (для гостей / контейнеров)
│ payload    │
└────────────┘

VXLAN header

ПолеБайтЗначение
Flags1Обычно 0x08 — I-flag установлен (VNI валиден)
Reserved30
VNI (VXLAN Network Identifier)324 бита, 0-16777215. Аналог VLAN ID
Reserved10

VTEP

VTEP (VXLAN Tunnel Endpoint) — точка инкапсуляции. Это может быть:

Как передаётся broadcast

Проблема: VXLAN — точка-точка, но L2 требует broadcast (ARP, DHCP). Три подхода:

  1. Multicast. Каждый VNI мапится на IP-multicast группу. VTEP'ы шлют broadcast в multicast, все получают. Красиво, но требует multicast-routing.
  2. Unicast head-end replication. VTEP-отправитель сам делает копии для всех известных VTEP'ов и шлёт unicast'ом. Проще, но плохо масштабируется.
  3. EVPN control plane. BGP-EVPN распространяет MAC-address learning явно, broadcast почти не нужен. Промышленный стандарт для ДЦ.

Linux VXLAN пример

# На node A (10.0.0.1)
ip link add vxlan10 type vxlan \
    id 100 \
    dstport 4789 \
    remote 10.0.0.2 \
    dev eth0
ip addr add 192.168.100.1/24 dev vxlan10
ip link set vxlan10 up

# На node B (10.0.0.2)
ip link add vxlan10 type vxlan \
    id 100 dstport 4789 \
    remote 10.0.0.1 \
    dev eth0
ip addr add 192.168.100.2/24 dev vxlan10
ip link set vxlan10 up

# Теперь пинг между 192.168.100.1 и 192.168.100.2 идёт через VXLAN
node-a$ ping 192.168.100.2

Multicast режим

ip link add vxlan10 type vxlan \
    id 100 \
    group 239.1.1.1 \
    dstport 4789 \
    dev eth0

Все VTEP'ы с тем же VNI подписываются на 239.1.1.1 (IGMP), получают broadcast'ы друг друга.

Проблемы

Аналоги

VXLANGENEVENVGREGRE
ТранспортUDP:4789UDP:6081GRE (IP proto 47)GRE
Segment ID24 бита24 бита24 бита32 бита (Key)
РасширяемостьНетОпции TLVНет
ПродвигаютVMware, CiscoRed Hat, IntelMicrosoftCisco (старый)
Kubernetes CNIFlannel, WeaveOVN, OVSHyper-V

EVPN — control plane для VXLAN

BGP-EVPN (RFC 8365) распространяет MAC/IP-адреса через BGP. Каждый VTEP объявляет «за мной эти MAC'и». Другие VTEP'ы обновляют forwarding-таблицы без broadcast learning. Стандарт де-факто для новых ДЦ.

См. также