无法在ovs隧道中捕获大于MTU 1500的流量

时间:2019-01-28 09:23:42

标签: openvswitch

创建了一座桥梁

ovs-vsctl add-br br0

在网桥br0中添加了vxlan类型的端口

ovs-vsctl add-port br0 tun1 \
 -- set Interface tun1 type=vxlan \
 options:remote_ip=10.2.3.204 options:key=10 options:df_default=False

在网桥br0中添加了内部端口

ovs-vsctl add-port br0 iface1 \
 -- set Interface iface1 type=internal options:df_default=False

设置接口

ip link set vxlan_sys_4789 up
ip link set iface1 up

我正在接口iface1中接收流量,并且期望给定隧道封装的流量相同。

我发送的帧大小为1472字节的数据包,在远程主机(10.2.3.204)进行的封装中也收到相同的消息。但是,当帧大小超过1472字节时,数据包将在接口iface1中分段,所有分段的数据包都会通过流。但是,我在远程主机(10.2.3.204)中仅收到未设置更多片段位的流量的最后一个片段。

在进一步调试中,我发现在隧道接口vxlan_sys_4789中,我看到仅接收到流量的最后一部分,而其他部分被丢弃了。

ovs中是否有任何明确的条件来丢弃这些数据包? 尽管片段标记设置为true,但为什么片段不通过隧道呢?

1 个答案:

答案 0 :(得分:0)

默认情况下,Open vSwitch会覆盖内部接口(例如br0)MTU。如果您只有一个内部接口(例如br0)和一个物理接口(例如eth0),则MTU对eth0的每一次更改都将反映到br0。在内部接口上使用ip进行的任何手动MTU配置都将被Open vSwitch覆盖,以匹配当前的网桥最小值。

有时这种行为是不希望的,例如在隧道中。可以使用以下命令显式设置内部接口的MTU:

ovs-vsctl set int br0 mtu_request=1450

此后,Open vSwitch将br0 MTU配置为1450。由于此设置在数据库中,因此它将是持久性的(与ip相比)。

可以通过以下操作删除MTU配置以恢复默认行为:

$ ovs-vsctl set int br0 mtu_request=[]

mtu_request列甚至可以用于配置MTU,甚至用于物理接口(例如eth0)。