IPSec与NAT协同工作的研究

时间:2022-03-02 05:48:16

【摘要】(Library,Anhui University of Technology,Maanshan,243002,China) Abstract:Application range of IP security protocol(IPSec) is badly restricted due to the incompatibilit...

IPSec与NAT协同工作的研究

摘 要:因特网网络层安全协议( ipsec)和网络地址翻译 (nat)不兼容,这严重限制了IPSec的应用范围。在分析IPSec与NAT不兼容原因、讨论IPSec与NAT协同工作的一些方法及所存在的问题的基础上,对UDP封装IPSec数据包方法中所存在的安全隐患,以及在NAPT环境下,外出的数据根据SPD的选择符无法正确定位SAD中的SA问题,提出了解决办法。

关键词:IPSec;网络地址翻译;虚拟专用网;UDP封装

中图分类号:TP309文献标识码:A文章编号:1004373X(2008)1909104

Research on the Coordination between IPSec and NAT

XU Jiexing

(Library,Anhui University of Technology,Maanshan,243002,China)

Abstract:Application range of IP security protocol(IPSec) is badly restricted due to the incompatibility of IPSec and Network Address Translator (NAT).On the basis of analyzing the cause of the incompatibility between IPSec and NAT,and discussing the methods and the problems of the coordination between IPSec and NAT,this paper puts out the solution to hidden secure trouble about UDP encapsulation IPSec packet,to the circumstance of Network Address and Port Translation(NAPT),output data is unable to locate SA probloms in Secure Association Database(SAD) correctly by selector in Secure Policy Database(SPD).

Keywords:IPSec;network address translator;virtual private network;UDP encapsulation

1 引 言

随着各种网络应用的快速发展,人们越来越重视网络上数据传输的安全性,VPN(Virtual Private Network)技术得到了广泛应用。VPN是近年来网络应用中不可缺少的营运模式,VPN把数据封装在隧道协议中,利用已有的公网建立专用隧道,实现端到端的连接。VPN技术中,又以IPSec的保密性最为完整,系VPN技术主流。

IPSec是一种由IETF设计的基于通讯的数据安全机制,极大地提高了TCP/IP协议的安全性,实现了在主机或安全网关环境中对IP传输的保护,但其所使用的加密技术却造成了与NAT技术的不兼容。本文在对IPSec和NAT不兼容性分析的基础上,讨论IPSec与NAT协同工作的一些方法及所存在的问题,并提出改进办法。

2 IPSec和NAT原理及不兼容性分析

2.1 IPSec

IPSec协议是应用于IP层上网络数据安全的一整套体系结构,包括认证头协议(AH)、封装安全载荷协议(ESP)、密钥管理协议(IKE)和用于网络认证及加密的算法等。

IKE动态协商通信双方的加密/认证密钥及算法等信息,建立安全关联(SA)。AH为IP包提供数据源认证、数据完整性和抗重放攻击等保护,但不能保密。ESP为IP包提供数据机密性、数据完整性、数据源认证和抗重放攻击等保护。AH和ESP都有两种工作模式:传输模式和隧道模式,两种模式的区别在于它所保护的数据内容不同,一个是IP包,一个是IP载荷。在实际应用中并不采用隧道模式中的AH,因为它所保护的数据与传输模式中的AH所保护的数据是一样的。图1是应用AH或ESP的传输模式所形成的数据包的格式,图2是应用ESP的隧道模式所形成的数据包格式。

2.2 NAT

NAT是对不同地址域内的地址进行转换的一种方法,通过在地址域边界对不同的地址和端口进行转换并维持这个转换的映射关系,可以使不同地址域的主机之间透明地进行数据传输。NAT有3种类型:静态NAT、动态NAT、网络地址端口转换NAPT[2]。静态NAT将每一个私有IP地址固定映射到一个合法的公网IP地址;动态NAT将私有IP地址动态映射成NAT网关某个未分配的公网IP地址;NAPT将私有IP地址映射到NAT网关一个合法公网IP地址的不同端口[ 1 ]。NAT很大程度上缓解了IPv4网络中IP地址紧张的问题,并使得内外网络隔离,从而提供一定的网络安全保障。

2.3 IPSec和NAT间的不兼容性分析

IPSec和NAT之间存在多个方面的不兼容性,主要包含AH、ESP分别与NAT之间的不兼容以及IKE与NAT之间的不兼容[3]。

(1) IPSec AH和NAT间的不兼容性。由于AH头部将IP源地址和目标地址包含在完整性校验中,NAT设备对地址域的改变将使得完整性检查失败。

(2) 校验和与NAT间的不兼容性。TCP和UDP在计算校验和时使用了伪头部,因而校验和与IP源和目的地址有依赖关系。但数据包通过NAT设备后,源地址或目的地址将会发生改变,在接收处将会检验到校验和不一致,丢弃此数据包。

(3) 固定的IKE目标端口和NAPT间的不兼容性。IPSec的某些实现使用UDP端口500同时作为源和目标端口号。然而对于一个位于NAT之后的IPSec对话方,NAT会改变初始IKE主模式包的源端口号,所以来自500之外的其他端口的IKE数据包可能会被接收方丢弃。

(4) IKE地址标识符与NAT间的不兼容性。在IKE协商第一阶段或第二阶段中使用IP地址作为标识符,则NAT设备对IP源或目的地址的修改会引起IP头中的地址和标识符不符。IKE实现会将这样的包丢掉。

(5) 重叠的SPD(Secure Policy Database)项和NAT的不兼容性。在IKE协商的第二阶段中,NAT后的主机对相同响应者IP地址协商重叠的SPD项,响应者可能在错误的IPSec SA下发送数据包。

(6) NAT无法多路传输IPSec数据包。ESP保护的IPsec数据包中的TCP或UDP报头被加密,因此无法通过TCP或UDP端口号将数据包多路传输到专用网内不同的主机。

(7) 内嵌的IP地址和NAT间的不兼容性。由于载荷受到完整性保护,IPSec包中的任何IP地址不能被NAT转换。因此某些协议,如FTP、SNMP等,在IPSec和NAT并存的环境中不能正常应用。

3 IPSec与NAT间协同工作方法讨论

3.1 RSIP

用RSIP(Realm Specific IP)替代NAT。RSIP是指在不同地址域通信的主机自己能处理跨越不同地址域的地址变换问题。一般在私有网络和公共网络的边界上部署一台RSIP服务器,实现地址映射。

RSIP采取C/S模式,当RSIP客户机要与公共网络上主机通信的时候,它查询RSIP服务器以便获得一个端口号和公网IP地址。接着客户机通过隧道将包发往RSIP服务器,RSIP服务器将隧道头剥掉,然后将包发向互联网。对于到达的包RSIP服务器基于端口号查找客户机IP地址,加入隧道头,然后将它们发往RSIP客户机。

RSIP虽解决了IPSec和NAT的冲突问题, 但也有缺点,它要求IPSec设备实现RSIP的客户端协议;在IKE重建密钥时,要修改IKE源端口,可能无法与现有IPSec协同工作;要求将NAT网关升级为RSIP网关,花费较大[4]。

3.2 6 to 4

6 to 4方案的基本原理是[5]:相互通信的主机均使用IPv6协议栈,IPSec协议在IPv6协议栈中实现。在IPv6网络边界安装NAT。发送时,当IPv6的数据报到达NAT时,NAT提取IPv6的地址前缀作为IPv6数据报的IPv4隧道地址,NAT把IPv6数据包封装在IPv4数据包中发送出去;接收时,相应的NAT作IPv4隧道的解封,解封后的数据包在局部网络中用IPv6协议进行路由。

由于6 to 4方案要求给NAT配置一个可路由的IPv4地址来产生IPv6前缀,当在客户端和VPN网关中存在多个NAT设备时,此方案将不适用,同时,6 to 4方案虽然对已经支持IPv6的主机无需作太多的变更,但需要改变目前的NAT设备配置。

3.3 UDP封装方案

因为NAT通过改变IP地址和传输端口号来使数据包从一个地址空间传输到另一个地址空间,但由于IPSec协议头在IP头之后,而传输层协议数据单元作为IPSec协议的有效载荷,这对纯地址翻译来说,可通过在IP头中修改地址来完成地址翻译,而对地址端口翻译来说,它要修改数据包的端口,当端口在传输协议头中被IPSec加密后,NAPT就不能修改传输协议头来作地址端口翻译。

用UDP协议封装IPSec协议数据单元,是在IPSec协议头前面加上一个UDP协议头,在通信中间系统上看到传输的是UDP数据包,IPSec数据包作为UDP协议的用户数据,其实质是在通信实体之间建立一个UDP隧道,用UDP隧道来穿越NAT设备[6]。

4 UDP协议封装方案

4.1 UDP协议封装方案的总体构架

UDP协议封装方案的总体构架[7]如图3所示:通信双方首先通过交换Vendor ID信息来探测对方是否支持NAT穿越;如果验证通过,则继续互相发送NAT-D(NAT Discovery)数据包来探测通信双方之间是否存在NAT设备;一旦探测到NAT设备存在后,通信发起方就将通信端口改为4500端口后继续协商,并且在进行IPSec处理后协商UDP封装模式并进行UDP模式封装(封装模式如图4、图5所示);IPSec发起协商的一方定时发送keep-alive消息判断连接是否存在,以保证NAT网关对其UDP端口的动态映射不被删除。

4.2 UDP封装方案的分析

(1) UDP封装方案只适用于ESP协议。由于AH协议要认证整个IP数据包,与NAT冲突,在UDP封装方案中也没有解决,但ESP协议完全可以代替AH协议完成所需的功能[8]。

(2) UDP封装方案在总体上对IPSec与NAT的不兼容性问题有了较好的解决,方案所付出的额外代价不是很高。

(3) 安全性上存在一些隐患。在探测通信双方是否存在NAT时,通信双方通过发送NAT-D载荷,每个NAT-D载荷包含一个HASH值。通信双方在主模式第3、第4个包,野蛮模式第2、第3个包中交换NAT-D载荷。实现过程如下:发送方首先利用对方IP地址和端口号(500)进行HASH运算,然后利用本机的IP地址和端口号进行HASH运算,将结果分别放在NAT-D载荷中, 发送给对方。响应方在处理时,首先利用本机的IP地址和端口号(500)进行相应HASH运算,察看结果是否与接收到的第一个NAT-D载荷中的HASH值相同,若不相同则证明自己在NAT后;然后利用收到的IP包的IP地址和端口号进行相应HASH运算,若与后面的NAT-D中的HASH值不同,则说明对方在NAT后。

攻击者可能会修改NAT-D载荷中的HASH值,使通信双方在没有NAT存在的情况下使用UDP封装,这会浪费网络带宽,浪费通信双方的CPU资源。当网关与数量较多客户端连接时,这种攻击会使网关不能正常工作。

(4) 在NAPT环境下,当NAT后的多个主机向外网安全网关建立安全连接时,外部安全网关会产生多个地址相同(NAPT的公网地址),SPI不同的SA。对于进入的数据根据ESP头中的SPI值可以定位SA,但是对于外出的数据根据SPD(Secure Policy Database)的选择符无法定位SAD(Secure Association Database)中正确的SA。

4.3 UDP封装方案中问题解决办法

对4.2中(3)的问题,本文的解决办法是进行2次HASH运算,即对由IP地址和端口号得出的HASH值(称为HASH-l) 再次进行HASH运算(结果称为HASH-2)。在这种设计下响应方首先利用(HASH-2)对HASH-1的有效性进行验证,方法是利用接收到的HASH-1进行规定的HASH运算。若与接收到的HASH-2不相同,载荷无效丢弃;若与接收到的HASH-2相同,则利用HASH-1检查是否存在NAT。

NAT-D载荷的格式如图6所示。

设计中所使用的HASH运算表达式如下:

HASH-1=HASH(CKY-ICKY-RIPPORT)

HASH-2=HASH(CKY-ICKY-RHASH-1)

CKY-I,CKY-R分别为发起方(I)和响应方(R)IKE协商中的COOKIE值,IP为地址,PORT为本地端口号。

对4.2中(4)问题,本文的解决办法是利用NAT后主机的私有地址作为目的地址定位SA。即通过把私有地址传到对方,并在对方主机中维护一个映射表,映射表中包含NAT转换后的公网地址、端口号与私有地址的对应关系,在响应数据包时查找映射表中所对应的私有地址进而定位SA进行IPSec处理。

UDP-ESP封装模式下是通过NAT-OA(NAT Original Address)载荷来传送地址。NAT-OA载荷在IKE协商的快速模式的第一个和第二个包发送。如果发起者选择的是UDP封装ESP传输模式那他必须发送NAT-OA载荷,同样响应者也必须发送。

由此,不论是否ESP传输模式,双方在快速模式中都要发送NAT-OA载荷,并且双方就利用这个载荷建立映射表(NAT转换后的公网地址、端口号与私有地址的对应关系),这样的话双方原始地址均安全送达对方。

另一个要考虑的问题就是映射表的维持。本文采用的方式不是每个IP数据包都携带原始地址信息,而是利用IKE的通知载荷定期传送,通过在通知载荷中

增加一个通知消息类型(NOTIFY-NAT-OA)用于传送原始地址信息。由于通知载荷是在双方SA建立后传送,所以载荷是加密的。

5 结 语

IPSec和NAT不兼容制约了IPSec的使用范围。基于UDP封装IPSec数据包方案基本消除了导致IPSec和NAT冲突的根源,较好地解决IPSec和NAT的不兼容性问题。但要注意的是,IPSec与NAT的矛盾根深蒂固,因而从根本上解决它不大可能,研究和改进的目的就是用尽可能少的代价在一定的条件下解决一些问题,为我们所用。

参考文献

[1]Srisuresh P,Egevang K.Traditional IP Network Address Translator.RFC 3022,January 2001./rfc/rfc3022.txt.

[2]谢希仁.计算机网络[M].5版.北京:电子工业出版社,2008.

[3]Aboba B,Dixon W.IPSec-NAT Compatibility Requirements.RFC3715,2004.

[4]彭近兵,龙翔,高小鹏,等.一种新的IPSec穿越NAT方法[J].北京航空航天大学学报,2007,33(1):65-66.

[5]Carpente B,Moore K.Connection of IPv6 Domains via IPv4 Cloud.RFC 3056,2001.

[6]姚志林,刘淑芬,韩正服.IPSec的NAT兼容性改进[J].吉林大学学报:理学版,2005,43(4):450-54.

[7]Huttunen A,DiBurro L.UDP Eneapsulation of IPSec Packets.IETF RFC 3948,2005.

[8]潘登,徐佩霞.一种新的IPSec穿越NAT方案[J].小型微型计算机系统,2005,26(2):196-198.

作者简介 许杰星 男,1960年出生,副教授/计算机应用专业硕士,现任安徽工业大学图书馆馆长。主要研究方向为计算机网络安全、管理信息系统。

上一篇:基于PLECS的Buck变换器模糊PID控制 下一篇:光伏并网发电/独立供电系统的工作原理探究