IPSec NAT穿越场景
在IPSec VPN部署中,如果发起者位于私网内部(如FW_C),而它希望与FW_A之间直接建立一条IPSec隧道,这种情况下 NAT会对部署IPSec VPN网络造成障碍。
PC2发业务报文给PC1,IPSec先对IP包头或端口信息进行验证,报文到达NAT设备时,IP地址或端口号会被转换,报文到达FWA的时候,因报文已经被修改,FW_A进行IPSec AH验证失败。如果IPSec使用了ESP进行加密,那么NAT设备读不到端口号,不能进行正常的地址转换。
IPSec穿越分析
AH会对整个IP报文进行保护,包括IP头,任何对Data或者IP头的修改都会导致验证失败。
TCP在计算检验和时,要加上一个12字节的伪首部。伪首部顾名思义就是假的首部,既不往上传也不往下传,只是用于校验TCP/UDP报文段。
伪首部共有12字节,包含IP首部的一些字段,有如下信息:32位源IP地址、32位目的IP地址、8位保留字节(置0)、8位传输层协议号(TCP是6,UDP是17)、16位报文长度(首部+数据)。
ESP的传输模式下,NAT修改IP头,由于TCP会对IP进行校验然后加上对数据的校验,所以导致报文到达对端后,由于IP头部已经改变,导致TCP校验不正确丢包;
ESP的隧道模式下,NAT修改的是假IP头,所以可以,但是ESP会加密原始数据包的传输层端口信息,所以不支持PAT(不支持修改端口)。仅仅支持一对一的NAT。
总结:
- AH的传输模式和隧道模式都不支持NAT穿越
- ESP传输模式也是不支持的
- ESP隧道模式默认只支持一对一NAT转换,不支持PAT
IPSec VPN NAT穿越原理
NAT-T技术在ESP封装和外层IP报头之间插入8个字节的UDP报头,端口号为4500。有了端口号之后,NAT就可以正常进行转发了。
NAT设备对于私网用户不可见,所以网络设备要想知道是否有NAT的存在,以及什么时候该添加UDP报头,通过IPSec的IKE协商阶段决定
IPSec NAT穿越协商过程一
NAT穿越能力协商:在第一阶段IKE协商中通过Vender ID进行能力协商。
- NAT穿越能力由IKE消息携带的厂商ID来决定。
- 用来确定对端是否支持NAT穿越,如果对端不支持,本端添加UDP头后,对端无法识别会导致业务报文不能被正常处理。
- 这个IKE协商报文是发起者的第一个报文,对端COOKIE为0。
IPSec NAT穿越协商过程二
NAT网关检测:在第一阶段IKE协商中实用NAT-D负载用于发现是否存在NAT。
为了侦测IP地址或者端口信息是否在传输过程中发生变化,双方交换IP地址/端口号的 Hash值,Hash值不同,说明使用了NAT或者PAT。Hash值以NAT-D负载进行发送,一个 NAT-D负载包含一个Hash值,一般情况下,只有本端和对端的两个Hash值。NAT-D负载包含在主模式的消息3、4中或者是包含在野蛮模式的消息2、3中。
IPSec NAT穿越协商过程三
NAT网关检测:在第一阶段IKE协商中测试UDP 4500端口是否可用
当设备检测到有NAT存在时,发起方将消息5、6的源端口和目的端口都设置为4500,
所有和发起方交换的IKE消息都使用4500端口通信。
IPSec NAT穿越协商四
- NAT穿越功能启用协商∶IKE第二阶段的SA载荷中协商是否使用NAT穿越
- 使用UDP封装IPSec ESP报文穿越NAT。
- IKE第一阶段完成后,通信双方都知道了NAT的存在,然后在IKE第二阶段的SA载荷中协商是否使用NAT穿越。
- 如果使用NAT穿越,则在UDP报头后面直接封装ESP报文头。在UDP报文头中源端口号以及目的端口号采用和IKE协议一致的端口号4500。共用端口号的情况下如何区分这是IKE报文还是ESP报文呢?为了区分这两种报文,RFC3948规定采用UDP封装方式的ESP报文的SPI一定不能为0,同时规定使用启用NAT穿越的IKE协商报文在UDP报文头后插入4个值为0的字节,作为非ESP报文的标识。
- 至此,双方完成NAT穿越协商,能够对后续的报文进行正确的处理。
IPSec VPN NAT穿越配置
场景分析∶
- FWA与FWC之间需要建立IPSec隧道;
- FWA通过分支机构宽带接入公网,即FWA外网口获得的是私网 地址;
- NAT设备将分支机构的用户私有地址转换为公网地址以便在公网 路由
- NAT设备通常处于ISP,对于分支机构不可见。
配置思路:
[ FWA-ike-peer-a ] nat traversal
- IPSec NAT穿越功能配置比较简单,和普通IPSecVPN的配置最大的区别就在于多了这条命令。
- FW_C的IPSec配置需指向FW_B公网地址,且需FW_A先发起协商,否则需在NAT设备上配置NAT-Server,放行UDP500和UDP4500端口。
- FWB的配置、型号与IPSec隧道的建立无关。只需保证FWC经过FWB做地址转换后还可和FWA互通。 IPSec隧道两端均需配置该命令。
- 需要在IPSec两端都配置NAT穿越
略