Linux

ipsec xfrm esp 路由

  • June 22, 2021

我需要一點幫助/解釋為什麼以下網路設置不起作用:

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 地址不是本地的,即立即轉發流量以獲得最佳性能。

引用自:https://serverfault.com/questions/1067457