IKE中的IPSEC NAT穿越(NAT-T)介绍
一、概述
IPSec提供了端到端的IP通信的安全性,但在NAT环境下对IPSec的支持有限,AH协议是肯定不能进行NAT的了,这和AH设计的理念是相违背的;现在通过ESP封装进UDP报文中,可以实现多个主机与外部的peer建立IPSEC 隧道。
二、IKE协商使用UDP封装
RFC3947主要描述如何检测是否存在NAT设备,并如何在IKE中协商使用UDP来封装IPSec数据包。
1、能力检测
功能是检测通信中是否存在NAT设备和对方是否支持NAT-T。NAT-T能力检测是发生在IKE协商的第一阶段。且在第一阶段的1,2两个消息报文中完成的,通过在消息保证中加入一个vendor ID的载荷,在RFC3947中定义,该值通过hash算法后为十六进制数字:vendor_id=0x4a 0x13 0x1c 0x81 0x7 0x3 0x58 0x45 0x5c 0x57 0x28 0xf2 0xe 0x95 0x45 0x2f,该值在第一,二个报文中都是一致的,用于检测对端是否支持NAT-T。当收到的IKE报文中携带该值,说明对端设备支持NAT-T。
第一阶段的3,4报文主要作用是:协商并确认传输过程中是否发生了NAT转会。协商报文中双方各自至少要发送两个NAT-D载荷,第一个载荷是对方的地址和端口的HASH,后面的载荷是自己的地址和端口,如果本地有多个地址,则要发送多个载荷,包括所有地址和端口的HASH,对方接收到载荷后重新根据收到的包的实际地址端口来计算HASH值后进行比较,就可以知道是否有NAT设备以及哪一方在NAT设备之后了。如果IPSEC的peer之间协商出的hash值与其收到的hash值相同的话,则表示他们之间没有NAT。反之则是在传输中地址和端口进行了转换。
协商机制如下图所示:

2、UDP封装协商
UDP封装方式有两种,一种是UDP通道模式封装,一种是UDP传输模式封装,分别表示如下:
UDP-Encapsulated-Tunnel
UDP-Encapsulated-Transport