锐捷网络——IPSec NAT的问题探讨:IPSEC与NAT的兼容性问题

目录

IPSec NAT的问题探讨:IPSEC与NAT的兼容性问题

一、端口兼容性问题

二、地址兼容性问题

三、校验和与NAT兼容性问题

IKE中的IPSEC NAT穿越(NAT-T)介绍

一、概述

二、IKE协商使用UDP封装

1、能力检测

2、UDP封装协商

UDP封装IPSEC ESP穿越NAT分析

一、报文封装过程

二、报文解封装过程


IPSec NAT的问题探讨:IPSEC与NAT的兼容性问题

一、端口兼容性问题

       IKE使用的源目端口都是UDP 500,如果存在端口转换的情况,IKE的源端口可能被改变,这样如果响应者判断该端口不是UDP 500的话,就可能存在IPSEC第一阶段协商不通过的问题。

二、地址兼容性问题

       在报文内部封装IP地址进行一些地址信息协商的时候,如果报文通过明文方式传输,可以在NAT设备上启用ALG进行检查修改这些报文的内容,如FTP,H.323协议。但是一旦启用IPSEC,报文进行ESP加密后NAT网关就无法检测经过的报文,因此对报文内部地址也就无法修改,也就意味着存在共存问题。

三、校验和与NAT兼容性问题

       由于TCP和UDP中校验和的计算是依赖于IP报文中的源目地址进行的,如果在NAT网关处不修改TCP或者UDP的校验和的话,就会导致校验和校验失败。在没有IPSEC 的情况下,NAT设备可以对TCP和UDP的校验和进行修改。但是启用了IPSEC后,数据报文被ESP加密,就无法看到里面的内容了,故也不能对其进行修改。

       在IPV4的报文中,UDP对校验是可选的,但是TCP是必须的,然而在IPV6报文中,TCP,UDP报文对校验和都是必须的。因此校验和对穿越NAT的IPSEC,也是存在问题的。

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

UDP封装IPSEC ESP穿越NAT分析

一、报文封装过程

       首先原始报文按照普通的ESP报文封装过程进行ESP封装,然后再如下图所示红色部分插入一个UDP的报文头,最后插入一个新的IP报文头,计算最终报文的IP头中的可变字段,例如总长度,协议ID以及校验和等。

二、报文解封装过程

       首先将上图中的UDP头部去掉,重新计算IP投中的可变字段,在进行普通的ESP解封装过程。

猜你喜欢

转载自blog.csdn.net/weixin_57099902/article/details/132765845