我需要一点帮助/解释为什么以下网络设置不起作用:
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,这个测试设置不是真正的使用场景。这只是为了尝试,我想了解它是如何工作的。
这不是应该使用传输模式的方式(即,转发的流量和不是系统本地的 IP 地址)。您可能想研究BEET 模式(从未标准化),它类似于传输模式,因为它不添加额外的 IP 标头,但允许替换源和目标 IP 地址以及 Linux 内核和一些 IKE 守护程序支持。
话虽如此,让我试着解释一下你所看到的。Linux 内核首先将转发的流量与fwd策略进行匹配,然后再将其与出站策略进行匹配,这就是出站 IPsec SA 处理出站流量的原因。但是,没有 IPsec SA 查找入站流量,因为目标 IP 地址不是本地的,即立即转发流量以获得最佳性能。