一、AH/ESP协议能否与NAT/PAT共存?
对于AH协议来说,无论是传输模式还是隧道模式,都会对包括IP头中源/目IP地址等字段在内的整个数据包进行哈希计算。对源/目IP地址或TCP/UDP端口号的任何修改都会破坏AH协议对数据包哈希计算的结果,导致数据包在接收端完整性校验失败,最终被丢弃。同时,AH协议的设计初衷是防止数据包在传输过程中被篡改/伪造,保证数据包的完整性,这与NAT/PAT需要修改数据包的源/目IP地址或TCP/UDP端口号的做法相违背,因此AH协议本质上就无法与NAT/PAT共存,如果IPSec对等体之间存在NAT/PAT设备,则必须用ESP代替AH协议。
注:AH协议只对数据包IP头中的源/目IP地址、协议号等固定字段进行哈希计算,而不会包括TTL/校验和这种传输过程中每跳都会变化的字段,在哈希计算和完整性校验时会将TTL/校验和字段的值视为零,保证TTL/校验和字段的改变不会破坏哈希计算结果导致完整性验证失败。
对于ESP协议来说,无论是传输模式还是隧道模式,都不会对数据包的IP头部进行哈希计算,并且哈希计算(完整性验证功能)是可选的,对数据包头中的源/目IP地址的改变不会导致数据接收端完整性校验失败。但ESP协议在面对NAT/PAT时仍然面临着两个问题:
1. 无论传输模式还是隧道模式,ESP协议报文没有TCP/UDP端口供PAT进行转换。
2. 传输模式下,NAT转换数据包头中的源/目IP地址后,无法更新TCP/UDP校验和导致数据接收端TCP/UDP校验失败。
为了解决IPSec在NAT/PAT环境下遇到的通信问题,使ESP协议报文能够穿越NAT/PAT设备,IETF提供了一种解决机制即NAT-T(Network Address Translation Traversal),使ESP协议能够与NAT/PAT共存。NAT-T作为IPSec的一个扩展协议,发布在RFC3947/RFC3948中,它只适用于ESP协议,不支持AH协议。
二、NAT-T的工作原理
1. IKE阶段一中的NAT-T协商
通过主模式或积极模式的1/2包交互负载内容为字符串‘RFC 3947’的MD5散列值(4a131c81070358455c5728f20e95452f)的vendor ID,检测双方是否支持NAT-T功能。
如果双方支持NAT-T,则通过主模式的3/4包(积极模式的2/3包)交互NAT-D负载检测双方通信路径中是否存在NAT/PAT设备。双方各自会发送至少两个NAT-D负载,第一个NAT-D负载内容是对端IP地址和端口号的散列值;第二个NAT-D负载内容是本端IP地址和端口号的散列值。如果收到的第一个NAT-D与本端第二个NAT-D不匹配,则说明本端存在NAT/PAT设备;如果收到的第二个NAT-D与本端的第一个NAT-D不匹配,则说明对端存在NAT/PAT。
注:NAT-D负载内容算法HASH = HASH(CKY-I | CKY-R | IP | Port),CKY-I/CKY-R分别是IKE初始方(initiator)和响应方(responder)的cookie;第一个NAT-D的IP | Port为对端(目的)IP地址/端口号,第二个NAT-D的IP | Port为本端(源)IP地址/端口号;哈希算法为双方在1/2包中协商好的。
若检测到双方通信路径中存在NAT/PAT设备,后续IKE通信端口由UDP源/目500转换成4500。
由于后续的ESP报文也用UDP 4500端口来封装,为了区分UDP 4500端口承载的是IKE报文还是ESP报文,为此在UDP和IKE报头之间插入一个值为0的4字节Non-ESP Marker(非ESP标记)字段,用于标记UDP承载的是一个IKE报文。Non-ESP Marker字段与ESP报文的SPI字段对齐(位置和长度一致),若该字段值为非0,则该字段为ESP的SPI,UDP承载的是一个ESP报文。
UDP封装的IKE报文格式
UDP封装的ESP报文格式
为了防止NAT/PAT设备的地址转换表中的UDP 4500端口转换表项过期被删除,导致后续数据包找不到对应的转换表项而被丢弃,因此存在NAT/PAT设备一方启用NAT keepalive功能,定期发送NAT-keepalive报文防止地址转换表中的UDP 4500转换表项过期。接收方会忽略这个NAT-keepalive,不会做出响应。
2.IKE阶段二中的NAT-T协商及数据封装格式
NAT-T中新定义了两种IPSec数据封装模式:UDP-Encapsulated-Tunnel(UDP封装隧道模式)/UDP-Encapsulated-Transport(UDP封装传输模式)。如果IPSec配置的是隧道模式,当IPSec对等体间存在NAT/PAT设备,则使用UDP封装隧道模式;如果IPSec配置的是传输模式,当IPSec对等体间存在NAT/PAT设备,则使用UDP封装传输模式。双方通过快速模式的1/2包协商ESP报文的封装模式。UDP封装传输模式/UDP封装隧道模式的报文格式如下:
UDP封装传输模式报文格式
服务热线
1391-024-6332
Copyright 2015-2018 www.intsavi.com.cn All Rights Reserved
电话:010-62980070 010-62961051 手机:13910246332
版权所有北京赛维博信科技发展有限公司 备案号:京ICP备14043711号-1 京ICP备14043711号-3