全国直销电话:4006-854-568
IT-technology
以人为本,众志成城,以“用户至上”.“服务上乘”为原则,
追求产品和服务高质量,努力实现与客户之间真诚有效的沟通,
不断地圆梦、奔跑与腾飞。
新闻动态   NEWS
当IPSec遇上NAT之问题的解决之道-北京赛维博信科技发展有限公司
来源:本人摘自网络,如有侵权请联系删除 | 作者:毛豆 | 发布时间: 2024-07-08 | 562 次浏览 | 分享到:

一、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。

主模式下的NAT-D交互及端口转换过程
积极模式下的NAT-D交互及端口转换过程


由于后续的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,不会做出响应。


NAT-keepalive报文格式(源/目端口4500)


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封装传输模式报文格式


UDP封装隧道模式报文格式

UDP封装传输模式/UDP封装隧道模式都是在IP头和ESP头之间插入一个UDP头,插入的这个UDP头在ESP哈希计算之外,并不会破坏ESP哈希计算结果导致接收方完整性验证失败。同时,通过添加这个UDP头使PAT设备可以对ESP报文执行端口转换,解决了ESP协议报文在传输模式/隧道模式下没有TCP/UDP端口供PAT进行转换的问题。

如果IPSec对等体使用的是UDP封装传输模式,双方会通过快速模式的1/2个包各自发送NAT-OAi和NAT-OAr。NAT-OAi是的负载内容是IKE初始方的IP地址;NAT-OAr是IKE响应方的IP地址。如果IKE响应一侧存在NAT/PAT设备,对于IKE初始方来说NAT-OAr内的IP地址为响应方的公网地址;如果IKE初始方一侧存在NAT/PAT设备,对于IKE响应方来说NAT-OAi内的IP地址为初始方的公网地址。

NAT-OA交互过程

通过交互NAT-OA负载,存在NAT/PAT设备一侧的对等体就能够获知其经过NAT/PAT转换后的公网地址。虽然传输模式下,NAT/PAT设备在对IP头中地址进行转换后无法更新载荷内的TCP/UDP校验和,但数据发送方通过NAT-OA获悉了转换后的公网地址,因此数据发送方可以替代NAT/PAT设备根据转换后的IP地址提前更新TCP/UDP报文中的校验和。根据转换后的IP地址,数据发送方可以采用增量更新TCP/UDP校验和,也可以重新计算TCP/UDP校验和。TCP/UDP校验和更新后再交由ESP协议进行加密和哈希计算等处理,这样就避免了数据接收方TCP/UDP校验失败。

至此,通过NAT-T技术无论是传输模式还是隧道模式的ESP报文都能够穿越NAT/PAT设备,实现ESP协议与NAT/PAT共存。另一种实现ESP协议与NAT/PAT共存的技术是IPSec over UDP,它与NAT-T类似都是将ESP报文封装到UDP中,但NAT-T只有在对等体间存在NAT/PAT设备时才会采用UDP封装模式,而IPSec over UDP无论对等体间是否存在NAT/PAT设备,都会把ESP报文封装到UDP中。对于IPSec over UDP的工作原理这里就不做介绍了,有兴趣的朋友可以查找相关资料。



 

服务热线

1391-024-6332