IPSec NAT穿越原理

在IPSec VPN部署中,如果發起者位於私網內部(如下圖FW_C),而它希望與FW_A之間直接建立一條IPSec隧道,這種情況下NAT會對部署IPSec VPN網路造成障礙。

IPSec NAT穿越原理

PC2發業務報文給PC1,IPSec先對IP包頭或埠資訊進行驗證,報文到達NAT裝置時,IP地址或埠號會被轉換,報文到達FW_A的時候,FW_A進行IPSec資料包的驗證,下面分別看一下IPSec使用 AH 和 ESP 兩種安全協議時報文能否透過。

AH 協議:因為 AH 對資料進行完整性檢查,會對包括 IP 地址在內的整個IP 包進行Hash運算。而NAT改變 IP 地址,從而破壞 AH 的 Hash 值。 因此 AH 報文無法透過 NAT 閘道器。

ESP 協議:ESP 對資料進行完整性檢查,不包括外部的 IP 頭, IP 地址轉換不會破壞 ESP 的 Hash 值。但 ESP 報文中 TCP 的埠已經加密無法修改,那麼NAT裝置讀不到埠號,不能進行正常的地址轉換。

為了解決這個問題,必須在建立 IPSec 隧道的兩個閘道器上同時開啟 NAT 穿越功能(對應命令列 nat traversal)。開啟 NAT 穿越功能後,當需要穿越 NAT 裝置時, ESP 報文會被封裝在一個 UDP 頭中,源和目的埠號均是 4500。有了這個 UDP 頭就可以正常進行轉換。

IPSec NAT穿越原理

NAT裝置對於私網使用者來說是不可見的,這裡就有個問題,網路裝置怎麼知道是否有NAT的存在,什麼時候該新增UDP報頭,什麼時候不該新增?

IPSec一般要先經過IKE協商,互動金鑰之後才傳送資料。NAT-T(NAT Traversal)技術在IKE協商階段透過某種機制來發現是否有NAT的存在。有NAT存在的時候新增UDP報頭,沒有NAT的時候就不新增。

下面分別介紹一下采用 IKEv1 和 IKEv2 時是如何進行 NAT 穿越。

IKEv1 協商 NAT 穿越

開啟

NAT

穿越時,

IKEv1

協商第一階段的前兩個訊息會發送標識

NAT

穿越(

NAT Traversal

,簡稱

NAT-T

)能力的

Vendor ID

載荷(主模式和野蠻模式都是)。用於檢查通訊雙方是否支援

NAT-T

當雙方都在各自的訊息中包含了該載荷時,才會進行相關的 NAT-T 協商。

IPSec NAT穿越原理

主模式訊息 3 和訊息 4(野蠻模式訊息 2 和訊息 3)中傳送 NAT-D(NAT Discovery)載荷。NAT-D 載荷用於探測兩個要建立 IPSec 隧道的閘道器之間是否存在 NAT 閘道器以及 NAT閘道器的位置。

透過協商雙方向對端傳送源和目的的 IP 地址與埠的 Hash 值,就可以檢測到地址和埠在傳輸過程中是否發生變化。若協商雙方計算出來的 Hash 值與它收到的 Hash 值一樣,則表示它們之間沒有 NAT。否則,則說明傳輸過程中對 IP 或埠進行了 NAT 轉換。第一個 NAT-D 載荷為對端 IP 和埠的 Hash 值,第二個 NAT-D 載荷為本端 IP 和埠的 Hash。

IPSec NAT穿越原理

發現 NAT 閘道器後,後續 ISAKMP 訊息(主模式從訊息 5、野蠻模式從訊息 3 開始)的埠號轉換為 4500。ISAKMP 報文標識了“Non-ESP Marker”。

IPSec NAT穿越原理

在第二階段會啟用 NAT 穿越協商。在 IKE 中增加了兩種 IPSec 報文封裝模式:UDP 封裝 隧 道 模 式 報 文 ( UDP-Encapsulated-Tunnel ) 和 UDP 封 裝 傳 輸 模 式 報 文(UDP-Encapsulated-Transport)。透過為 ESP 報文封裝 UDP 頭,當封裝後的報文透過NAT 裝置時, NAT 裝置對該報文的外層 IP 頭和增加的 UDP 頭進行地址和埠號轉換。UDP 報文埠號修改為 4500。

IPSec NAT穿越原理

IKEv2 協商 NAT 穿越

開啟

NAT

穿越後,

IKE

的發起者和響應者都在

IKE_SA_INIT

訊息對中包含型別為N

AT_DETECTION_SOURCE_IP

NAT_DETECTION_DESTINATION_IP

的通知載荷。這兩個通知載荷用於檢測在將要建立

IPSec

隧道的兩個閘道器之間是否存在

NAT

,哪個閘道器位於

NAT

之後。如果接收到的

NAT_DETECTION_SOURCE

通知載荷沒有匹配資料包

IP

頭中的源

IP

和埠的

Hash

值,則說明對端位於

NAT

閘道器後面。如果接收到的

AT_DETECTION_DESTINATION_IP

通知載荷沒有匹配資料包

IP

頭中的目的

IP

和埠的

Hash

值,則意味著本端位於

NAT

閘道器之後。

IPSec NAT穿越原理

檢測到 NAT 閘道器後,從 IKE_AUTH 訊息對開始 ISAKMP 報文埠號改為 4500。報文標識“Non-ESP Marker”。

IPSec NAT穿越原理

IKEv2 中也使用 UDP 封裝 ESP 報文,當封裝後的報文透過 NAT 裝置時, NAT 裝置對該報文的外層 IP 頭和增加的 UDP 頭進行地址和埠號轉換。UDP 報文埠號修改為 4500。

IPSec NAT穿越原理