Ip

為什麼 IPsec 隧道只需要 3 個 ip xfrm 策略?

  • January 4, 2021

我在strongswan(v5.2.0)實例(站點 A)和RouterOS路由器(站點 B)之間建立並執行了一個站點到站點 IPsec 隧道。一切正常,為站點 A ( 10.10.0.0/16) 和 B ( 10.50.0.0/16) 設置的兩個私有子網中的主機可以正常通信。

我不明白的是ip xfrm policy站點 A 的路由器的以下輸出(公共 IP 被混淆)。這些策略是由創建的strongswan,我沒有手動安裝或修改它們:

ip xfrm policy 
src 10.50.0.0/16 dst 10.10.0.0/16 
   dir fwd priority 2947 ptype main 
   tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A>
       proto esp reqid 1 mode tunnel
src 10.50.0.0/16 dst 10.10.0.0/16 
   dir in priority 2947 ptype main 
   tmpl src <PUBLIC_IP_B> dst <PUBLIC_IP_A>
       proto esp reqid 1 mode tunnel
src 10.10.0.0/16 dst 10.50.0.0/16 
   dir out priority 2947 ptype main 
   tmpl src <PUBLIC_IP_A> dst <PUBLIC_IP_B>
       proto esp reqid 1 mode tunnel

每個輸入和輸出都有一個策略,但只有一個用於轉發(從站點 B 到站點 A)。但我仍然可以成功 ping,例如,10.50.4.1110.10.0.89

ping -R 10.50.4.11
PING 10.50.4.11 (10.50.4.11): 56 data bytes
64 bytes from 10.50.4.11: icmp_seq=0 ttl=62 time=10.872 ms
RR:     10.10.0.89
   10.50.0.1
   10.50.4.11
   10.50.4.11
   10.50.4.11
   10.10.0.2
   10.10.0.89

關於此路由跟踪的有趣部分是站點 A 的路由器 ( 10.10.0.2) 僅顯示在從 ping 目標返回的路由上,而站點 B 的路由器 ( 10.50.0.1) 僅針對傳出路由列出。

這似乎證實了站點 A 的路由器實際上不需要10.10.0.0/16通過 IPsec 隧道轉發到的轉發策略10.50.0.0/16,但我不明白為什麼。

感謝您的任何解釋!

fwd策略不是由核心自動生成的,而是由鍵控守護程序(在本例中為 strongSwan)安裝的。

它們需要允許流量在隧道模式下轉發到和來自 VPN 網關後面的主機。

對於指向未安裝在網關本身上的 IP 地址的入站數據包,在解密後會搜尋轉發策略*。**對於本地流量,*查找策略中的匹配項。如果沒有找到,則丟棄該數據包。

對於 VPN 網關本身未生成的出站流量,將搜尋轉發策略。如果數據包未加密,則如果沒有找到匹配的轉發策略,則不會失敗。如果流量在兩條隧道之間轉發,則安裝其中一條的入站轉發策略將充當另一條的出站轉發策略,反之亦然。之後,查找出策略以決定是否通過隧道傳輸數據包。這就是為什麼通常不需要出站方向的轉發策略的原因。

但是,如果有一個匹配所有內容的低優先級的丟棄/阻止轉發策略(例如,如果沒有建立隧道,避免明文流量通過網關),則明確需要出站方向的轉發策略,因為**阻止策略將否則丟棄所有未加密的流量。這就是為什麼 strongSwan 開始使用5.5.0雙向安裝fwd策略。


該答案的先前版本指出,單一(入站)fwd策略是對稱的(即srcdst在任一方向上工作)。這不是真的,但正如上面所解釋的,在許多情況下這並不重要。

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