技术点详解---IPSec穿越NAT

IPSec在NAT环境中的部署是VPN的热门难点技术之一,本专栏针对该问题进行原理性探讨,为后续VPN部署方案做下铺垫。

IPSec VPN穿越NAT会遇到哪些问题


nat会把IP数据包中的内网源地址改为外网地址。

IPSec VPN穿越NAT遇到的问题主要有2个:

1.   穿越NAT后的身份确认:在IP网络中IP地址是最好的身份标识,IPSec VPN中标准身份标识也是IP地址,如上图所示,从前几期专栏的介绍中我们可以得知,NAT处理过程中会改变IP地址,因此IPSec的身份确认机制必须能够适应IP地址变化;目前解决此问题的方法主要有两种,第一种是使用数字证书替代IP地址作为身份标识,第二种是使用字符串取代IP地址作为身份标识;我国内市场范围内,第二种方法更为常见,部署也更为简单,所以本期主要对第二种方法着重进行介绍。

2.   IP地址复用: 从上期专栏中,IPSec由AH和ESP两个协议组成,其中AH无法穿越NAT,ESP从理论上可以穿越NAT,但是ESP的IP协议号是50,并不是基于UDP和TCP的协议,因此当NAT网关背后存在多个ESP应用端时,无法只根据协议号进行反向映射,为了使ESP能够在NAT环境中进行地址复用,ESP必须做出改变。

IKE身份确认及野蛮(激进)模式协商

IPSec的身份确认最常见是通过IKE协议代劳,IKE支持的身份认证机制有两种:

1.   数字证书方式,通过CA数字证书体系确认身份,是最为安全、可靠的方式。

2.   身份标识+预共享密钥方式,通过发起方和响应方预先配置相同的密钥,如bigtree,完成双方对彼此身份的认证,这是最为常见的方式;在预共享秘密钥认证机制中,身份标识则可以分为几类:

a)   指定IP地址,使用IP地址作为身份标识,是IKE的默认方式,响应方只允许指定IP地址发起协商,安全性比较高;

b)   指定IP地址范围,这种方式依然使用IP地址作为身份标识,由于发起方必须要指定IP地址,否则无法发起协商,指定IP地址范围是响应方特性,如响应方可以指定2.0.0.0/8范围内的地址都可以发起协商,而不是只允许2.1.1.2发起协商,能够减少配置,但安全性略有下降;

c)   什么都不指定,也是使用IP地址作为身份标识,但允许任意IP地址发起协商,只要预共享密钥一致,双方就能够通过身份确认,通常适用于发起方动态获取公网地址,如PPPoE接入互联网方式,还适用于发起方众多,而响应方不想单独为每个发起方单独指定预共享密钥,这种方式虽然不是非常安全,但是可以简化配置,安全性再次下降;

d)   指定对端名字,发起方和响应方都预先配置好本端名字,使用该名字作为身份标识,与指定IP地址类似,通过指定对端名字方式,即使双方预共享密钥一致,只要对端名字不合法,立即中断协商,由于名字未与IP地址进行绑定,而且名字在网络中明文传递,故安全性不如指定IP地址方式高,但这种身份标识方式可以穿越NAT。


在上图中,发起方Spartucus和响应方Crixus都是用CA颁布的数字证书作为身份标识,通过数字证书体系检验对方身份的真伪,由于数字证书中的身份信息并不包含IP地址信息,所以使用数字证书是可以轻松穿越NAT的。


在预共享密钥身份确认体系中,使用名字作为身份标识,也能穿越NAT,由于该方式不需要搭建CA服务器,在穿越NAT的应用场景中,该方式使用较广。


如果要使用名字作为身份标识,那么IKE协商就必须要使用一种特殊的协商方式——野蛮模式(Aggressive Mode)或者叫激进模式

1.   发起方协商的第一条信息就包含身份信息,并且是明文显示,因此有身份泄露的隐患;

2.   响应方根据发起方的身份信息进行确认,并使用预共享密钥信息计算hash;

3.   发起方根据响应方的身份信息也进行hash计算,与响应方提供的hash进行比较,如果一致则身份确认通过,进行IKE SA密钥种子确认,如果不一致则双方协商结束;

4.   IKE SA协商完毕之后,利用该SA协商IPSec SA,从第三条报文开始都是加密的,但双方身份信息都使用明文传送

在上一期专栏中,我们介绍了常规的IKE协商方式,称为主模式(Main Mode),它正常情况下需要6条报文协商出IKE SA,预共享认证方式只能使用IP地址作为身份标识;

而野蛮模式只需要3条报文就能实现,预共享认证中既可以使用IP地址也可以使用名字方式作为身份标识。主模式穿越NAT只能使用数字证书认证方式

IKE协商IPSec SA的过程称为快速模式(Quick Mode),和野蛮模式一样只需要3条报文即可协商完成,在我们的专栏中,为了介绍简便,通常只画出2条报文交互的示意。

IPSec UDP封装穿越NAT

从前面几期专栏的反复介绍可以得知,基于UDP、TCP的应用可以在NAT出口进行复用,不会有麻烦,那么在IPSec中是否如此呢?IPSec是一个框架协议,直接构建在IP层之上,具体协议由AH和ESP组成,ESP协议号50,AH协议号51,它们都没有类似于UDP/TCP端口号的概念,因此也就没有NAT复用标识,ESP要穿越NAT还需要想其它办法,而AH则因为保护源IP地址的关系,在NAT穿越中属于天生无法支持。


ESP穿越NAT其实很简单,通过借用UDP的方式,巧妙地实现了NAT地址复用,它使用的是UDP端口500(IKE协商协议ISAKMP所使用端口),ESP在什么时候会进行UDP封装呢?它是通过IKE协商时检测出来的:

1.   发起方Spartacus在协商报文中携带自己的WAN口IP地址信息192.168.1.2;

2.   Spartacus的协商报文经过NAT处理后其源IP地址变成了2.1.1.2;

3.   响应方Crixus接收到协商报文后发现源地址2.1.1.2和协商报文中的IP地址信息192.168.1.2不一致,即判断中间经过了NAT设备,并告知Spartacus,双方要使用UDP封装;如果Crixus没有检测到NAT转换,那么继续使用原生的非UDP封装模式。

本期专栏主要介绍了IPSec在NAT环境中的变化,为下一期IPSec VPN部署方案介绍做预热,敬请期待第15期专栏。


http://www.h3c.com.cn/Service/Channel_Service/Operational_Service/ICG_Technology/201006/677319_30005_0.htm


----------------------------------------------------------------------------------------------------------------------------

IPSec是基于网络层的,不能穿越通常的NAT、防火墙,这篇文章就是要讨论,在需要NAT网络的环境中,如果使用IPsec VPN  隧道技术。

    IPsec 协议有两种运行模式:

  IPSec隧道模式

  IPSec传输模式

  隧道模式通常是建立在双方的网关之间的。传输模式下,IPSec主要对上层的传输进行封装保护,通常情况下,传输模式只用于两台主机之间的通信。

  因为我们讨论的是NAT环境下的VPN传输,所以我们就只是关注隧道模式下IPSec是如何动作的。

  不过我们先来看一看两种模式的区别,下面给出包头的结构,就一目了然。


一、封装AH认证头的两种方式的不同

  1、传输模式:


   AH协议(IP协议号为51)提供数据源认证、数据完整性校验和防报文重放功能,它能保护通信免受篡改,但不能防止窃听,适合用于传输非机密数据。AH的工作原理是在每一个数据包上添加一个身份验证报文头,此报文头插在标准IP包头后面,对数据提供完整性保护。可选择的认证算法有MD5(Message Digest)、SHA-1(Secure Hash Algorithm)等。MD5算法的计算速度比SHA-1算法快,而SHA-1算法的安全强度比MD5算法高。

  设计AH认证协议的目的是用来增加IP数据报的安全性。AH协议提供无连接的完整性、数据源认证和抗重放保护服务,但是AH不提供任何保密性服务。IPSec验证报头AH是个用于提供IP数据报完整性、身份认证和可选的抗重传攻击的机制,但是不提供数据机密性保护。验证报头的认证算法有两种:一种是基于对称加密算法(如DES),另一种是基于单向哈希算法(如MD5或SHA-1)。 

       传输模式只对上层协议数据(传输层数据)和IP头中的固定字段提供认证保护,把AH插在IP报头的后面,主要适合于主机实现。

 2、隧道模式:

  隧道模式把需要保护的IP包封装在新的IP包中,作为新报文的载荷, 然后把AH插在新的IP报头的后面。隧道模式对整个IP数据报提供认证保护。


二、ESP认证加密方法

传输模式:

隧道模式:


  ESP(Encapsulate Security Payload,封装安全载荷)协议:封装安全载荷(ESP)用于提高Internet协议(IP)协议的安全性。它可为IP提供机密性、数据源验证、抗重放以及数据完整性等安全服务。ESP属于IPSec的机密性服务。其中,数据机密性是ESP的基本功能,而数据源身份认证、数据完整性检验以及抗重传保护都是可选的。ESP主要支持IP数据包的机密性,它将需要保护的用户数据进行加密后再重新封装到新的IP数据包中。

  上面看过了AH和ESP认证头的结构,与两种模式下的不同。下面讨论的是,为什么在NAT环境中,ipsec vpn 不能使用AH认证方法?

  IPSec协议的主要目标是保护IP数据包的完整性,这意味着IPSec会禁止任何对数据包的修改。但是NAT处理过程是需要修改IP数据包的IP包头、端口号才能正常工作的。所以,如果从我们的网关出去的数据包经过了ipsec的处理,当这些数据包经过NAT设备时,包内容被NAT设备所改动,修改后的数据包到达目的地主机后其解密或完整性认证处理就会失败,于是这个数据包被认为是非法数据而丢弃。无论传输模式还是隧道模式,AH都会认证整个包头,不同于ESP 的是,AH 还会认证位于AH头前的新IP头,当NAT修改了IP 头之后,IPSec就会认为这是对数以完整性的破坏,从而丢弃数据包。因此,AH是不可能与NAT一起工作的。

  意思就是说,AH处理数据时,所使用的数据是整个数据包,甚至是IP包头的IP地址,也是处理数据的一部分,对这些数据作整合,计算出一个值,这个值是唯一的,即只有相同的数据,才可能计算出相同的值。当NAT设备修改了IP地址时,就不符合这个值了。这时,这个数据包就被破坏了。

  而ESP并不保护IP包头,ESP保护的内容是ESP字段到ESP跟踪字段之间的内容,因此,如何NAT只是转换IP的话,那就不会影响ESP的计算。但是如果是使用PAT的话,这个数据包仍然会受到破坏。

  所以,在NAT网络中,只能使用IPSec的ESP认证加密方法,不能用AH。

  但是也是有办法解决这个缺陷的,不能修改受ESP保护的TCP/UDP,那就再加一个UDP报头。


解决方案:NAT穿越


  NAT-T的基本思路是IPSec封装好的数据包外再进行一次UDP数据封装。这样,当此数据包穿过NAT网关时,被修改的只是最外层的IP/udp数据报。

NAT-T的操作步骤:

  一、判断双方是否支持NAT-T,这是IKE协商的第一阶段,双方通过发送一个VENDOR ID来识别是否支持NAT-T,等一下做实验会看到这个。

  二、判断通信链路上是否存在NAT设备,这一步是NAT 发现,NAT发现的原理是判断通信方的IP地址和端口是否发生了改变,判断的方法是,使用IP地址和端口号进行HASH运算,送往对方进行校验。一旦发现NAT,则立即进行端口浮动,也就是在IKE协议的第二阶段将IKE的UDP 500浮动到UDP 4500端口。

  三、进行ESP处理


http://forum.h3c.com/thread-142867-1-1.html


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

金融行业对信息安全的要求强度高,除了网上银行,很少通过互联网采取IPSEC VPN方式开展业务和办公。但在金融行业网络内部,完全可以利用IPSEC VPN在数据传输、身份认证与审计等功能方面所具备的优势,实现多种应用。例如,利用IPSEC VPN技术,实现通过CDMA构建安全的ATM业务传输网络,以及解决金融行业内部服务器系统管理所存在的安全问题。

一、网络技术——NAT与IPsec

NAT网络地址翻译(Network Address Translation)是目前使用比较广泛的一种网络技术,它的基本功能是进行IP数据包网络地址的转换,主要用来解决IPv4地址紧张的问题。其工作原理为:当内部网络流量流经NAT服务器时,由NAT设备将内部网络的IP源地址替换为Internet网络源地址,然后在Internet网络上进行传送。
NAT技术的实现方式有3种:静态NAT方式,内部网络中的每个主机都被永久映射成外部网络中的某个合法地址;NAT池方式,采用动态分配的方法将外部网络中定义的一系列合法地址映射到内部网络;端口NAT方式,内部地址被映射到外部网络的一个IP地址的不同端口上。通过上述3种方式,可使公共IP地址紧张的矛盾得到一定程度的缓解,而拥有有限IP资源的ISP(入侵防御系统)服务商也能尽可能地为更多用户提供网络服务。
当NAT设备转换的是源地址时,我们称其为SNAT(源地址NAT)。简单过程如下:当内网一个外出的数据包经过NAT设备时,数据包的源地址就会被NAT设备的公网地址所替代,同时NAT设备会记录内外地址的映射信息,数据包被路由后在Internet上就可以传输了。当数据包返回到NAT设备时,NAT设备通过记录下的地址映射信息将网络目标地址转为原来的内部网络源地址,我们称其为DNAT(目标地址NAT)。
由于通过NAT设备实现了内部IP地址信息的对外隐藏,形成内外网的隔离,使得外网无法访问内部主机,所以NAT技术在一定程度上提高了内部网络的安全性。
早期对Internet安全的需求非常少,在IP协议设计之初并没有考虑其安全性。随着基于Internet的商业发展,安全问题日益突出,必须建立新的安全协议标准来满足这种需求。由此,IPSec(IP Security)协议应运而生,它主要用于提供网络层上的数据保护,提供透明的安全通信,保证企业内部信息能够在Internet上进行安全交换。IPSec通过对数据加密、认证、完整性检查提供数据的保密性、完整性、可靠性,同时,通过安全策略配置还可抵抗重放攻击。
IPSec的安全结构包括3个基本协议:AH(头部认证)协议、ESP(封装安全载荷)协议、密钥管理协议。AH协议为IP包提供信息源验证和完整性保证;ESP协议提供加密保证;密钥管理协议提供双方交流时的共享安全信息。IPSec通过以上3个基本协议在IP包头后增加新的字段以保证安全。
AH协议为IP数据包提供无连接的数据完整验证、数据源身份认证和防重放攻击3种服务。ESP协议除了为IP数据包提供AH已有的3种服务,还提供数据包加密和数据流加密。对于ESP协议,加密是其基本功能,而数据源身份的认证、数据完整性验证以及防重放攻击则是可选的。
IPSec协议有两种工作模式:隧道模式和传输模式。在隧道模式下,IPSec将整个原始IP数据包放入一个新的IP数据包中,这样每一个IP数据包都有两个IP包头:外部IP包头和内部IP包头。外部IP包头指定将对IP数据包进行IPSec处理的目的地址,内部IP包头指定原始IP数据包最终的目的地址。IP包的源地址和目的地址都被隐藏起来,使IP包能安全地在网上传送。其最大优点在于终端系统不必为了适应IP安全而作任何改动。隧道模式既可以用于两个主机之间的IP通信,又可以用于两个安全网关之间或一个主机与一个安全网关之间的IP通信。
在传输模式下,要保护的内容是IP包的载荷,在IP包头之后和传输层数据字段之前插入IPSec包头(AH或ESP或二者同时),原始的IP包头未作任何修改,只对包中的净荷(数据)部分进行加密。由于传输模式的IP包头暴露在外,因而容易遭到攻击。传输模式常用于两个终端节点间的连接,如客户机和服务器之间。
传输模式数据包封装格式:

隧道模式数据包封装格式:

IPSec的优点:它定义了一套用于认证、保护私有性和完整性的标准协议。 IPSec支持一系列加密算法如DES、3DES。它检查传输数据包的完整性,以确保数据没有被修改。IPSec可用来在多个防火墙和服务器之间提供安全性,确保运行在TCP/IP协议上的VPN之间的互操作性。

二、NAT与Ipsec的冲突

在多数情况下,NAT的处理对用户使用是完全透明的,但是当用户希望使用IPSec技术组建VPN网络时,NAT却带来了很大的麻烦。IPSec协议的主要目标是保护IP数据包的完整性,保护数据信息不能被修改,无论是故意改动还是发生了随机的传输错误,数据报都将被IPSec抛弃,意味着IPSec会禁止任何对数据包的修改。但NAT的处理过程需要修改IP数据包的IP头数据、传输层报文头数据甚至传输数据的内容(如FTP应用),才能够正常工作。所以一旦经过IPSec处理的IP包穿过NAT设备时,IP包内容被NAT设备所改动,修改后的数据包到达目的主机后其解密或完整性认证处理就会失败,于是这个报文将被认为是非法数据而被丢弃。从而导致在使用了NAT设备的网络链路中无法实现标准IPSec 的通讯。
目前NAT 技术已被广泛地应用于防火墙、接入路由等网络设备中,如果IPSec VPN无法与这些设备协调工作,那么它的应用范围将受到极大的限制。
由于无论在传输模式还是在隧道模式下,AH都会认证整个数据包,包括认证位于AH头之前的IP头。当NAT设备修改了IP头之后,IPSec就会认为这是对数据包完整性的破坏,从而丢弃数据包。因此AH是绝对不可能和NAT在一起工作的。
ESP在传输模式时会保护TCP/UDP头,但是并不保护IP头,因此修改IP地址并不会破坏整个数据包的完整性。但如果数据包是TCP/UDP数据包,NAT设备就需要修改数据包的校验值,而这个校验值是被ESP所保护的,从而导致完整性校验失败。所以可能和NAT一起工作的只能是隧道模式下的ESP。

三、解决方案

现在有许多的解决方案来解决NAT 和IPSec共存问题,这里我们主要讨论一种最主要的解决方法:NAT-T。
NAT-T设计简单,不需要改动已有的设备或者协议,只需要边界设备支持即可。这个技术的基本思路是在IPSec封装好的数据包外再进行一次UDP的数据封装。这样,当此数据包穿过NAT网关时,被修改的只是最外层的IP/UDP数据,而对其内部真正的IPSec 数据没有进行改动;在目的主机处再把外层的IP/UDP封装去掉,就可以获得完整的IPSec数据包。NAT-T在实际运作时,第一步是探测通信双方是否支持NAT-T,这主要通过IKE协商时彼此发送的第一个数据包来判断。在判断双方均支持NAT-T后,进入到第二步NAT设备的发现,即去发现在上方的链路中间是否存在NAT设备,通过判断通信双发的IP地址或者端口是否发生了改变而得知。当发现上方的链路中存在NAT设备后,通信双方NAT-T开始协商所采用的数据包封装方式,至此完成协商过程。
UDP的封装格式:
标准IPV4

隧道ESP模式

NAT-T的协商和建立连接分为以下几个独特步骤,步骤执行时完全透明,无需管理员人为操作。
1)在IKE协商过程中,隧道两端的IPSec主机协商并同意在必要时使用NAT-T功能。
2)隧道两端的IPSec主机通过计算和比较出站/入站数据包头中IP地址的哈希数值检查通讯链路中是否存在NAT设备。
3)如果发现存在NAT设备,NAT-T模块自动对IPSec数据包进行再次封装,封装时使用UDP包头和附加的NAT-T包头作为额外的地址信息。
4)完成NAT-T封装后的UDP数据包被正确路由到远端IPSec主机。
5)远端IPSec主机在收到NAT-T数据包后进行解包处理,并将还原后的IPSec数据包交给IPSec处理引擎。
NAT-T功能使用IKE 端口(UDP 500)和UDP 4500端口实现NAT-T封装数据包的传递。

四、NAT-T解决冲突的办法

NAT-T采用以下方式解决通过 NAT使用IPSec的问题。
1)NAT无法更新上层校验和的问题。
通过在NAT-OA IKE有效载荷中发送原始地址,接收方拥有检验解密之后的上层校验和(源和目标IP地址和端口)所需的所有信息。
2)鉴定IKE有效载荷中包含嵌入的IP地址问题。
通过在 NAT-OA IKE有效载荷中发送原始地址,接收方拥有了可用来在快速模式协商期间检验鉴定IKE有效载荷内容的原始地址。
3)无法改变IKE UDP端口号问题。
IPSec NAT-T对话方能够接受来自500之外其他端口的IKE消息。为了防止IKE敏感(IKE-aware)的NAT修改IKE包,IPSec NAT-T对话方在主模式协商期间把IKE UDP端口500改为UDP端口4500。为允许IKE流量使用这个新的UDP端口,您可重新配置防火墙以允许UDP端口4500。
4)NAT无法多路传输IPSec数据流的问题。
通过使用UDP报头封装ESP PDU,NAT能够使用UDP端口来多路传输IPSec数据流。不必要再跟踪ESP报头中的SPI。
5)IKE UDP端口映射的NAT超时可能导致的问题。
通过定期发送NAT Keepalive包,用于后续IKE协商和UDP封装的ESP PDU的UDP 端口映射同时在NAT中得到刷新。

五、NAT-T的局限性

在VPN中使用NAT-T功能,管理员需要注意以下局限性。
1.增加数据处理和通讯的额外开销
使用NAT-T功能会导致在IKE协商过程中增加大约200字节的开销,同时数据传输过程中每个数据包都会增加大约20字节的开销。
2.降低了安全性
由于AH协议需要对数据包头和有效负载都进行验证,而NAT-T则需要在通讯过程中对数据包头进行修改,所以NAT-T无法用于安全性更高的AH通讯,而只能用于ESP通讯。NAT-T需要对IPSec数据包的包头进行修改,造成了IPSec数据包认证的不充分,导致通讯双方身份的可信度降低。
3.多重NAT-T客户端支持
目前多数NAT设备都使用同一个公共IP的不同端口为多个内部终端提供地址转换服务,由于NAT-T协议无法区别同一地址的不同端口,通常情况下在一个NAT设备后同时只能有一台VPN 主机与VPN 服务器建立IPSec连接。目前,已有IPSec VPN产品引入了多重NAT-T客户端支持技术。该技术在NAT-T协商和处理过程中引入了端口等消息封装机制,以使IPSec服务器能够识别使用同一个NAT地址的多个IPSec终端发出的不同隧道协商请求,并建立彼此独立的安全关联。
4.安全关联的更新周期
由于不能保证NAT设备始终使用固定的IP或固定的端口为内部主机进行访问映射,所以IPSec必须能够自动检测到NAT 设备为IPSec主机提供的当前映射地址及端口,并在映射地址及端口发生变化时及时更新安全关联中的地址参数,保证远程VPN主机与VPN网关的通讯始终畅通。

http://blog.csdn.net/ddv_9527/article/details/5679469


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值