我需要一点帮助/解释为什么以下网络设置不起作用:
PC1 (192.168.66.1) <-- PLAIN --> (192.168.66.2)PC-GW(192.168.88.2) <-- ESP --> (192.168.88.1) PC2
我可以从 PC1 192.168.66.1 向 PC2 192.168.88.1 发送数据包,并且 PC-GW 封装 esp,而 PC2 接收 esp 数据包,一切正常。
但是,如果我将 esp 数据包从 PC2 192.168.88.1 发送到 PC1 192.168.66.1,则 PC-GW 会在不解封装/解密的情况下转发 esp 数据包,而 PC1 会收到一个 esp 数据包。
如果两个系统都使用 ESP,则可以正常工作:
PC1 (192.168.66.1) <-- ESP--> (192.168.88.1) PC2
我尝试了几种不同的配置,这是我使用的命令:
ip xfrm state add src 192.168.66.1/32 dst 192.168.88.1/32 proto esp spi 0x01000000 reqid 0x01000000 mode transport aead 'rfc4106(gcm(aes))' 0x000000000000000000000000000000000000000000000000000000000000000000000000 128 sel src 192.168.66.1/32 dst 192.168.88.1/32
ip xfrm state add src 192.168.88.1/32 dst 192.168.66.1/32 proto esp spi 0x01000000 reqid 0x02000000 mode transport aead 'rfc4106(gcm(aes))' 0x000000000000000000000000000000000000000000000000000000000000000000000000 128 sel src 192.168.88.1/32 dst 192.168.66.1/32
ip xfrm policy add src 192.168.66.1/32 dst 192.168.88.1/32 dir out tmpl src 192.168.66.1/32 dst 192.168.88.1/32 proto esp reqid 0x01000000 mode transport
ip xfrm policy add src 192.168.88.1/32 dst 192.168.66.1/32 dir in tmpl src 192.168.88.1/32 dst 192.168.66.1/32 proto esp reqid 0x02000000 mode transport
在 tcpdump 的帮助下,我捕获了所有接口。
我不使用 openswap,此测试设置不是实际使用场景。这只是为了尝试,我想了解它是如何工作的。
答案1
这不是传输模式应该使用的方式(即转发流量和不属于系统本地的 IP 地址)。您可能需要查看BEET 模式(从未标准化),它类似于传输模式,因为它不添加额外的 IP 标头,但允许替换源和目标 IP 地址,并且 Linux 内核和一些 IKE 守护进程支持它。
话虽如此,让我试着解释一下你看到的内容。Linux 内核首先将转发的流量与转发政策,但也反对出去策略,这就是为什么出站流量由出站 IPsec SA 处理的原因。但是,由于目标 IP 地址不是本地的,因此入站流量不会进行 IPsec SA 查找,也就是说,为了获得最佳性能,流量会立即转发。