当 IPSEC vpn 设置中未设置 DF 时,内核不会对数据包进行分段

问题描述

我使用 strongswan 连接到谷歌云 VPN 网关。创建 VTI 接口以通过 ipsec 隧道路由流量。我发现即使数据包中没有设置 DF 位,它也没有碎片化。相反,内核正在返回所需的 ICMP 数据包碎片。我知道 PMTUD,但我确实希望它对数据包进行分段 (DF=0)。内核 ipsec 堆栈不支持吗?

操作系统: centos 8 (4.18.0-147)

MTU: vti: 1480 eth0:1500

ping 10.240.3.2 -s 1411 -M dont
PING 10.240.3.2 (10.240.3.2) from 192.168.4.77 : 1411(1439) bytes of data.
From 192.168.4.77 icmp_seq=1 Frag needed and DF set (mtu = 1438)
1419 bytes from 10.240.3.2: icmp_seq=2 ttl=61 time=14.1 ms
1419 bytes from 10.240.3.2: icmp_seq=3 ttl=61 time=10.2 ms

请注意,第一个数据包会触发所需的 ICMP 碎片。因为 -M 没有,所以没有为数据包设置 DF。以下 ping 工作正常,因为内核根据路径 MTU (1438) 对数据包进行分段

我希望内核在 DF=0 时对数据包进行分段。因为当这个节点作为 vpn 网关时,另一个节点可能会根据路径 MTU 向网关节点发送分片数据包。网关节点将其重新组装并发送到 VTI 接口。猜测是因为路由 MTU 不支持转发的流量(fixed 最近在内核中),数据包不会在 VTI 接口之前在 VPN 网关节点上分段。因此,鉴于 DF=0 的事实,我确实希望内核对其进行分段。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...