openswan在NAT環境且開啟DPD時雙方SA生存週期不同可能存在問題
-
ipsec SA存在第1階段SA
ISAKMP SA
生存週期和第2階段IPsec SA
生存週期ISAKMP SA
生存週期以兩端中配置時間最小為準IPsec SA
生存週期兩端各自以本端配置時間為準 -
ipsec DPD是一種探測對端是否存活的機制
每一個
IPsec SA
對應一個DPD,即每一條隧道對應一個DPD
如果ISAKMP SA
不存,DPD將無法工作,因為DPD發包時需使用ISAKMP SA
進行加解密 -
ipsec NAT穿越是ipsec兩端之間存在NAT裝置時對隧道報文進行封裝的機制
一般使用4500 UDP埠進行封包
如果上面描述同時使用,且ipsec兩端生存週期配置不同,則可能引起問題
例如:
雙端鏈路之間存在NAT裝置
client端ISAKMP SA
生存週期配置為3600s
,IPsec SA
生存週期配置為28800s
server端ISAKMP SA
生存週期配置為28800s
,IPsec SA
生存週期配置為3600s
當server端ISAKMP SA
到期時,server將刪除自己的ISAKMP SA
和通知client端刪除ISAKMP SA
,同時server端進行重協商,但由於client端在NAT內部,且server發出起的第一個協商報文埠為500,所以重協商報文無法到達client端。此時雙方ISAKMP SA
都不存在,意味著DPD已不工作
了,雙方IPsec SA
還存在,隧道還能互通
當server端IPsec SA
到期時,server將刪除自己的IPsec SA
和通知client端刪除IPsec SA
,但正巧這個通知報文在網路中被丟棄
,那麼client端沒有刪除IPsec SA
,還認為隧道是可用的,同時DPD也不工作了,這就出現了兩端狀態不一致問題。此時server端隧道狀態為斷開,而client端隧道狀態為連線,但實際上雙端之間隧道已不能互通了。DPD又不能工作,只能等client端IPsec
SA
生存週期到期才能重協商恢復隧道正常
雖然這種情況出現機率相當小,但還是有可能出現的,所以在配置ISAKMP SA
生存週期和IPsec SA
生存週期還是保持兩端相同為好
如果兩端生存週期相同,那麼即使出現了上面的情況,由於兩端IPsec SA
client端沒有收到server端刪除IPsec SA報文
,client端IPsec SA
也很快到期再進行重協商,恢復隧道正常
另,一般都把ISAKMP SA
生存週期時間設定得比IPsec SA
生存週期大