虚拟可扩展局域网文档¶
VXLAN 协议是一种隧道协议,旨在解决 IEEE 802.1q 中 VLAN ID 限制(4096个)的问题。通过 VXLAN,标识符的大小扩展到 24 位(16777216个)。
VXLAN 由 IETF RFC 7348 描述,并已由多家供应商实现。该协议通过 UDP 运行,使用一个单一目的端口。本文档描述了 Linux 内核隧道设备,Openvswitch 也有一个独立的 VXLAN 实现。
与大多数隧道不同,VXLAN 是一个 1 对 N 网络,而不仅仅是点对点。VXLAN 设备可以以类似于学习型网桥的方式动态学习其他端点的 IP 地址,或者使用静态配置的转发条目。
VXLAN 的管理方式与其两个最近的邻居 GRE 和 VLAN 类似。配置 VXLAN 需要使用与 VXLAN 最初合并到上游内核版本相匹配的 iproute2 版本。
创建 VXLAN 设备
# ip link add vxlan0 type vxlan id 42 group 239.1.1.1 dev eth1 dstport 4789
这将创建一个名为 vxlan0 的新设备。该设备通过 eth1 使用多播组 239.1.1.1 来处理转发表中没有条目的流量。目的端口号设置为 IANA 分配的值 4789。Linux 的 VXLAN 实现在 IANA 选择标准目的端口号之前就已经存在,并默认使用 Linux 选择的值以保持向后兼容性。
删除 VXLAN 设备
# ip link delete vxlan0
显示 VXLAN 信息
# ip -d link show vxlan0
可以使用新的 bridge 命令创建、销毁和显示 VXLAN 转发表。
创建转发表条目
# bridge fdb add to 00:17:42:8a:b4:05 dst 192.19.0.2 dev vxlan0
删除转发表条目
# bridge fdb delete 00:17:42:8a:b4:05 dev vxlan0
显示转发表
# bridge fdb show dev vxlan0
以下 NIC 功能可能表明支持 UDP 隧道相关的卸载(最常见的是 VXLAN 功能,但对特定封装协议的支持是 NIC 特定的)
tx-udp_tnl-segmentation
- tx-udp_tnl-csum-segmentation
能够对 UDP 封装帧执行 TCP 分段卸载
- rx-udp_tunnel-port-offload
对 UDP 封装帧进行接收端解析,这允许 NIC 执行协议感知卸载,例如内部帧的校验和验证卸载(仅适用于不支持协议无关卸载的 NIC)
对于支持 rx-udp_tunnel-port-offload 的设备,可以通过 ethtool 查询当前已卸载的端口列表
$ ethtool --show-tunnels eth0
Tunnel information for eth0:
UDP port table 0:
Size: 4
Types: vxlan
No entries
UDP port table 1:
Size: 4
Types: geneve, vxlan-gpe
Entries (1):
port 1230, vxlan-gpe