我通过 WAN 连接到一台服务器,并且路由上的某处会出现数据包丢失,除非我将接口 MTU 设置为 600:
ifconfig eth0 mtu 600
这样做会导致与其他设备的连接出现问题。为了让两者都能工作,我尝试为一条糟糕的路由设置 600 MTU:
ip route add 10.10.10.0/24 via 10.11.11.1 mtu 600
或者
ip route add 10.10.10.0/24 via 10.11.11.1 mtu lock 600
然后验证是否已选择此选项:
ip route get 10.10.10.20
但随后仅使用路由设置的 MTU 进行的测试表明,它不会达到 600,但就好像默认值没有进行任何更改一样。
这些调整MTU的方法之间是否有不太明显的区别?可能是 MTU 发现?
答案1
我确实发现,在丢弃碎片的一侧正确设置时,使用“ip route via mtu”确实有效。
我的设置:1500MTU 本地 eth0 -> 1428 MTU IPSEC -> WAN ->(这里有碎片丢弃防火墙?) -> 9182 MTU VPN 集中器 -> 1500 MTU 目标主机。
从本地流向目的地的所有数据包都可以正常工作,因为 1428MTU IPSEC 隧道在发送数据包之前在本地进行分段,但是,我只收到从目的地 -> 本地响应返回的第一个分段,因为它正在将 1500 字节数据包发送到VPN 集中器随后被分成 1428 个以上的附加片段,并且附加片段被防火墙丢弃在返回路径上。事实证明,设置“ip route add $local via $dest_gw mtu 1400”停止了返回数据包的碎片,从而防止防火墙丢弃返回数据包。
您可能需要设置 MTU 才能使连接两端的路径成功。