无法将 vxlan 添加到绑定接口

无法将 vxlan 添加到绑定接口

我正在尝试将 vxlan100 添加到 bond0 接口,但似乎不起作用

以下是命令。我有一个 wg0 (wireguard) 接口,正在其上创建 L2 vxlan100。

sudo ip link add vxlan100 type vxlan id 100 dev wg0 
sudo ip link add bond0 type bond
echo 0 > /sys/class/net/bond0/bonding/mode

sudo ip link set vxlan100 master bond0

但是最后一行“sudo ip link set vxlan100 master bond0”给了我一个错误

RTNETLINK answers: Invalid argument

请帮忙,我不确定我哪里做错了。

答案1

重现此问题可以通过以下方式获取特定的内核消息dmesg

bond0: (slave vxlan100): Error -22 calling dev_set_mtu

(并且我们有 EINVAL = 22 = 无效参数)

所以这是关于 MTU 的问题。WireGuard 确实有 MTU 开销,因此通常为 MTU 1420,并且VXLAN将使用父接口的 MTU 减去 50 字节(20(IP 报头)+ 8(UDP 报头)+ 8(VXLAN 特定报头)+ 14(MAC 报头)= 50)。1420-50=1370 MTU。一些测试表明,VXLAN 的 MTU 不能设置为高于其初始值:1370(但可以设置得更低),否则将得到 EINVAL。

当设置vxlan100为的bond0从属时,内核尝试将从属接口的 MTU 设置为其主接口的 MTU(默认值为 1500),但由于上述原因,此操作会失败:vxlan100的 MTU 不能增加到 1370 以上。

为了使操作成功,必须预先降低主设备的 MTU:

ip link set dev bond0 mtu 1370

因此以下命令(重新排序、缩短和更正以使用 IANA 分配的端口 4789)将起作用:

ip link add name bond0 mtu 1370 type bond mode balance-rr
ip link add name vxlan100 master bond0 type vxlan id 100 dev wg1 dstport 4789

ip -d link show dev vxlan100注意:中似乎没有关于最大 MTU 的信息maxmtu 65535。我不知道这是错误还是其他不可用的属性。

为了避免猜测正确的 MTU,可以使用 JSON 输出和jq命令复制vxlan100的 MTU 为bond0

ip link add name vxlan100 type vxlan id 100 dev wg0 dstport 4789
ip link add name bond0 mtu $(ip -json link show dev vxlan100 | jq -r '.[].mtu') type bond mode balance-rr
ip link set dev vxlan100 master bond0

当然,其他所有相关位置(例如:的其他从属设备bond0以及与之通信的对等链路bond0)也应使用类似的 MTU,否则可能会出现其他与 MTU 相关的问题。相反,要保持 1500 MTU bond0:WireGuard 的 MTU 为 1550,因此外层的 MTU 为 1630,这看起来并不容易实现。

相关内容