vxlan(Virtual Extensible LAN)
虚拟可扩展局域网,是一种 overlay
的网络技术,使用 MAC in UDP
的方法进行封装。Vxlan 最多支持 16777216(24 bits)
个网络,使用 4789
作为 VXLAN
的目的 UDP
端口。
产生原因
- 4096 个 vlan 不能满足云计算和数据中心需求
- 解决 ToR (Top of Rack) 交换机 MAC表耗尽问题
- 云计算/虚拟化东西向流量导致更多的MAC表项
- 云计算多租户需要 IP 地址重叠
报文
vxlan
报文头:
- 20-byte
outer IP header
: Valid addresses of VTEPs or VXLAN multicast groups on the transport network. Devices in the transport network forward VXLAN packets based on the outer IP header. - 8-byte
outer UDP header
for VXLAN: The default VXLAN destination UDP port number is 4789
. - 8-byte
VXLAN header
: VXLAN information for the frame.- Flags: If the I bit is 1, the VXLAN ID is valid. If the I bit is 0, the VXLAN ID is invalid. All other bits are reserved and set to 0.
- 24-bit VXLAN ID: Identifies the VXLAN of the frame. It is also called the virtual network identifier (VNI).
其中,
VTEP(VXLAN Tunnel Endpoints,VXLAN 隧道端点)
是 VXLAN 网络的边缘设备,也是 VXLAN 隧道的起点和终点,VXLAN 对用户原始数据帧的封装和解封装均在 VTEP 上进行VNI(VXLAN Network Identifier,VXLAN 网络标识符)
是一种类似于 VLAN ID
的用户标识,一个 VNI 代表了一个网络,属于不同 VNI 的虚拟机之间不能直接进行二层通信
参考:https://techhub.hpe.com/eginfolib/networking/docs/switches/5710/5200-5004_vxlan_cg/content/517705090.htm
Vxlan 实验
实现两个虚拟机配置 vxlan 网络通信。架构如下:
ip link add name vxlan100 type vxlan id 100 dstport 4789 local 172.20.0.132 remote 172.20.0.133
ip link set vxlan100 up
ip addr add 192.168.0.132/32 dev vxlan100
ip route add 192.168.0.0/24 dev vxlan100
ip link add name vxlan100 type vxlan id 100 dstport 4789 local 172.20.0.133 remote 172.20.0.132
ip link set vxlan100 up
ip addr add 192.168.0.133/32 dev vxlan100
ip route add 192.168.0.0/24 dev vxlan100
$ ping -c 1 192.168.0.133
PING 192.168.0.133 (192.168.0.133) 56(84) bytes of data.
64 bytes from 192.168.0.133: icmp_seq=1 ttl=64 time=0.676 ms
--- 192.168.0.133 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.676/0.676/0.676/0.000 ms
此时,vm2 抓包如下:
$ tcpdump -i vxlan100 -nnt -vvv
tcpdump: listening on vxlan100, link-type EN10MB (Ethernet), capture size 262144 bytes
IP (tos 0x0, ttl 64, id 65217, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.132 > 192.168.0.133: ICMP echo request, id 8, seq 1, length 64
IP (tos 0x0, ttl 64, id 7153, offset 0, flags [none], proto ICMP (1), length 84)
192.168.0.133 > 192.168.0.132: ICMP echo reply, id 8, seq 1, length 64
...
$ tcpdump udp -i ens33 -nnt -vvv
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
IP (tos 0x0, ttl 64, id 9254, offset 0, flags [none], proto UDP (17), length 134)
172.20.0.132.44131 > 172.20.0.133.4789: [udp sum ok] VXLAN, flags [I] (0x08), vni 100
IP (tos 0x0, ttl 64, id 65217, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.132 > 192.168.0.133: ICMP echo request, id 8, seq 1, length 64
IP (tos 0x0, ttl 64, id 18629, offset 0, flags [none], proto UDP (17), length 134)
172.20.0.133.56771 > 172.20.0.132.4789: [bad udp cksum 0x59b5 -> 0x124d!] VXLAN, flags [I] (0x08), vni 100
IP (tos 0x0, ttl 64, id 7153, offset 0, flags [none], proto ICMP (1), length 84)
192.168.0.133 > 192.168.0.132: ICMP echo reply, id 8, seq 1, length 64
...
其他使用: