【问题标题】:Unable to capture traffic greater than MTU 1500 in ovs tunnel无法在 ovs 隧道中捕获大于 MTU 1500 的流量
【发布时间】:2019-01-28 09:23:42
【问题描述】:

创建了一座桥梁

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 中是否有任何明确的条件来丢弃这些数据包? 尽管片段标志设置为真,为什么片段不通过隧道?

【问题讨论】:

    标签: openvswitch


    【解决方案1】:

    默认情况下,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)。

    【讨论】:

    • 是的,我明白了。你能帮我解决这个问题吗?尽管设置了“df_default=False”,但我发现隧道数据包的外部 IP 层设置了 DF 标志。为什么会这样?
    • 试试这个评论看看结果:sudo ethtool -k eth0 并关闭generic segmentation offload @Keerthana
    • 我应该在 vxlan_sys_4789 界面上试试这个评论吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多