為什麼 IPsec 隧道只需要 3 個 ip xfrm 策略?
我在
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.11
從10.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策略是對稱的(即src和dst在任一方向上工作)。這不是真的,但正如上面所解釋的,在許多情況下這並不重要。