NAT-T 技術深度解析 透過 UDP 4500 埠封裝 ESP 封包,解決 IPsec VPN 穿越 NAT 閘道的連線難題 IPsec VPN 在穿越 NAT 閘道時,因 ESP 協定缺乏埠號資訊,導致 NAT 設備無法正確轉換位址而斷線。 NAT-T(Network Address Translation-Traversal) 正是為此而生,透過 UDP 封裝讓 ESP 封包順利通關。 為什麼 ESP 無法穿越 NAT? NAT 設備依賴 TCP/UDP 的埠號追蹤連線狀態。ESP(IP Protocol 50)作為第三層協定, 本身不帶有埠號欄位 ,NAT 無從建立映射表,封包因此被丟棄。此外,ESP 對封包完整性的驗證機制,使得 NAT 修改 IP 標頭後,接收端的 ICV(完整性校驗值) 驗證必然失敗,雙重因素導致隧道無法建立。 NAT-T 如何解決問題? NAT-T 分兩階段運作。 偵測階段 :IKE 協商期間(UDP 500),雙端透過 Vendor ID 與 NAT-D Payload 互相偵測路徑上是否存在 NAT 設備。 封裝階段 :確認 NAT 存在後,IKE 切換至 UDP 4500 ,並在 ESP 封包前插入 4 位元組的 Non-ESP Marker(全零),將整個 ESP 封包封裝於 UDP 載荷中。NAT 設備看到標準 UDP 封包,即可正常建立映射,ESP 封包得以完整抵達遠端,隧道完整性獲得保障。 # Linux strongSwan 啟用 NAT-T(ipsec.conf) conn my-vpn left=%defaultroute right=203.0.113.1 forceencaps=yes # 強制啟用 UDP 4500 封裝 nat_traversal=yes # 啟用 NAT-T 偵測 keyexchange=ikev2 💡 重點整理 ESP 無埠號且受 ICV 保護,是 NAT 穿越失敗的根本原因。 NAT-T 將 ESP 封裝於 UDP 4500 ,讓 NAT 設備可正常追蹤連線。 IKE 協商由 UDP 500 自動切換至 UDP 4500,無需人工介...