我使用 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 dont,所以没有为数据包设置 DF。由于内核根据路径 MTU (1438) 对数据包进行分段,因此以下 ping 正常工作
我希望内核在 DF=0 时对数据包进行分段。因为当这个节点作为vpn网关时,另一个节点可能会根据路径MTU向网关节点发送分片的数据包。网关节点将其重新组装并发送到 VTI 接口。猜测是因为转发流量不支持路由 MTU(最近在内核中修复),因此数据包不会在 VTI 接口之前的 VPN 网关节点上分段。因此,鉴于 DF=0 的事实,我确实希望内核对其进行分段。