虚拟可扩展局域网文档¶
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 的新设备。该设备使用多播组 239.1.1.1 通过 eth1 处理转发表中没有条目的流量。目标端口号设置为 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