一、IPSec NAT穿越的场景
1、IPSec与NAT 的不兼容
IPSec主要包括认证头AH(Authentication Header,验证头)、ESP(Encapsulating Security Payload,安全载荷)、SA(Security Association,安全联盟)和IKE(Internet Key Exchange,因特网密钥交换)几个相关协议。
NAT(Network Address Translation),是指网络地址转换,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术,有效的解决公网地址不足的问题。在网关处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题。
由于 IPSec和 NAT存在很大的冲突.两者存在不兼容性,导致IPSec隧道传输的数据无法穿越NAT进入内网。为什么会发生这样的状况,这种不兼容是由以下几方面原因:
(1)、AH、ESP安全协议与NAT的不兼容
在传输模式下,AH安全协议使用原IP报头也就是内网的私有IP地址并在整个验证范围,会导致NAT设备在对私网的源IP地址和目的地址修改为公网地址后,因为经过NAT后改变了Hash值,无法通过验证,完整性检查的失败;ESP安全协议下TCP/UDP的校验和的计算包含IP源目地址,通过nat后,nat修改了最外层IP地址,接收数据路由器检查校验和失败。
在隧道模式下,AH安全协议,同样是完整性检查的失败;ESP安全协议下TCP/UDP的校验和,是使用公网IP目的地址,会成功,但是由于端口是加密的,接收设备无法得知端口号而被丢弃。
(2)、校验和与NAT不兼容 TCP/UDP校验和是以IP的源地址和目的地址作为参数计算的,当NAT设备将修改为公网地址后,校验和肯定与原数据的校验和不一致,导致检验失败,数据被丢弃。
(3)、IPSec的SPI(安全参数索引)与NAT不兼容 NAT设备通过IP头和IPSec头中的信息来识别不同的IPSec数据流,主要识别是参数是目的IP地址、安全协议和IPSec的SPI(安全参数索引)。而IPSec对等体都是单向的传输,对等体发送数据的SPI与接收数据的SPI不一样,这样就造成在私网中如果两台终端同时创建到相同目的的IPSec SA时,NAT可能会错误转发数据包。
(4)、IKE与NAT的不兼容性
- IKE标识符与NAT的不兼容:IKE第一阶段或第二阶段使用IP地址作为标识符。
当为IPSec协商时经过NAT设备,NAT对于IP地址的修改,而导致标识符与IP地址不符IKE丢弃该数据包。
解决办法:使用userID和FQDN(全称域名)作为标识。
- IKE固定源端口与NAPT的不兼容性:NAPT(Network Address Port Translation,网络地址端口转换)是指一个全局IP+不同的端口号对应多个私有IP的终端,当安装NAPT设备的内网多台终端对同一网关创建IKE SA时,NAT设备需要识别不同的端口发起的IKE协商会话。
(5)、传送IP数据包载荷中内嵌IP地址与NAT的不兼容性:NAT设备使用ALG(应用层网关)技术对数据包内如多媒体协议(H.323、SIP等)、FTP、SNMP、LDAP、SCTP等很多协议在载荷中内嵌的Ip地址和端口号都转化为公网的ip地址和端口号。
但是IPSec隧道传输的数据,包括原IP地址和数据被加密无法修改。
解决办法:在主机或安全网关上安装ALG,使得数据在IPSec封装前和解封装之后对应用的数据流进行操作。
(6)、NAT的隐式定向性:NAT创建一个映射表项,首先需要内网发起一个初始包。外网发起的初始包一般会被NAT设备丢弃。这一隐式定向性会造成外部数据无法穿越NAT双向自由建立IPSec隧道。
总结:IPSec VPN穿越NAT问题主要为两个,一是IPSec无论使用AH和ESP安全协议都无法在通过NAT设备后发送到目的地,AH方式无法通过验证,ESP方式NAT设备无法得知端口号而被丢弃;二是穿越NAT后身份识别识别的问题,IPSec怎么确认改变IP的数据包。
2、NAT与IPSec的不兼容性问题的解决方案
2.1、NAT-T方案
NAT-T(NAT Traverse)技术的基本思路是在用IPSec封装好的数据包外再进行一次UDP的数据封装。这样 ,当此数据包穿过NAT设备网关时 ,只修改了最外层的 IP/UDP数据 ,而对其内部真正的 IPSec数据没有改动 ;当数据包到达目的主机时,再把外层 的IP/UDP封装去掉 ,这样就可以获得完整的IPSec数据包 。
原理:在IP和ESP报文之间插入一个8个字节UDP头部(端口号默认为4500),使得NAT对待它就像对待一个普通的UDP包一样。而且支持ESP的传输模式。 原IKEv1的主模式
2.1.1、NAT-T流程
1、IKEv1协商第一阶段主模式下前4个包确定是否支持NAT-T和是否存在NAT。
首先要明白IKE是UDP 之上的一个应用层协议,是IPSEC 的信令协议。
检测通信中是否存在NAT设备和对方是否支持NAT-T,在IKEv1的第一阶段完成,报文使用500端口进行通信。
IKEv1协商第一阶段的前两个消息会发送标识NAT-T能力的Vendor ID载荷,用于检查通信双方是否支持NAT-T(NAT Traverse)。通过3和4个包的NAT-D参数来判定,是否经过NAT。
(1)、发起方在IKE消息中插入VID载荷来告知对方自己支持NAT穿越。载荷Vendor ID值为:draft-ietg-ipsec-nat-t-ike-XX,RA告诉RB我支持IPSec隧道传输的数据穿越NAT-T,RB协商使用RFC3947标准。双方都支持NAT-T,协商继续。
(2)、IKEv1主模式消息3和消息4(野蛮模式为消息2和消息3)中发送NAT-D(NAT Discovery)载荷。
消息3:NAT-D载荷包含IKE对等体的IP地址和端口的Hash值;NAT-D载荷包含本端IP地址和端口的Hash值。
(3)、协商双方计算Hash值,如果值一样则没有NAT网关,否则Hash值不同,说明经过NAT转换。确定了经过nat后,后面的ISAKMP消息的端口号转换为4500。ISAKMP报文标识了Non-ESP Marker。以示跟封装ESP报文有区别。
2、第二阶段需确认是否使用NAT穿越以及NAT穿越的封装模式。 UDP封装隧道模式报文(UDP-Encapsulated-Tunnel)和UDP封装传输模式报文(UDP-Encapsulated-Transport)。
确认后,后续传输的ESP报文将都采用UDP封装,UDP封装ESP报文时,没有non-ESP marker字段,该位置为SPI,为非0字节。使用的IPSec安全提议ipsec proposal只支持ESP安全协议。AH协议对IP报文的验证范围涵盖了整个IP报文,对IP报文头的任何修改将导致AH的完整性校验失败,因此使用AH协议保护的IPSec隧道不能穿越NAT。
3、IPSec NAT-T配置案例:
配置方案: 由于RouterA与RouterB通过NAT网关建立通信,需要配置NAT穿越功能才能建立IPSec隧道。采用如下思路配置建立NAT穿越功能的IPSec隧道:
(1)、配置接口的IP地址和到对端的静态路由,保证两端路由可达。
(2)、在RouterA上配置ACL,以定义需要IPSec保护的数据流。
(3)、配置IPSec安全提议,定义IPSec的保护方法。
(4)、配置IKE对等体,定义对等体间IKE协商时的属性。
(5)、分别在RouterA和RouterB上配置安全策略,确定对何种数据流采取何种保护方法。其中RouterB采用策略模板方式创建安全策略。
(6)、在接口上应用安全策略组,使接口具有IPSec的保护功能。
阶段一: 分别在RouterA和RouterB上配置IKE协商时的名称类型ID。
[RA] ike local-name ra
[RouterB] ike local-name rb
在RouterA上配置IKE安全提议。
[RA] ike proposal 5
[RA-ike-proposal-5] encryption-algorithm aes-128
[RA-ike-proposal-5] authentication-algorithm sha2-256
[RA-ike-proposal-5] dh group14
RouterB此处省略
在RouterA上配置IKE对等体。
[RA] ike peer ra v1
[RA-ike-peer-ra] exchange-mode aggressive
[RA-ike-peer-ra] ike-proposal 5
[RA-ike-peer-ra] pre-shared-key cipher 123456
[RA-ike-peer-ra] local-id-type fqdn
[RA-ike-peer-ra] remote-address 192.168.10.100
[RA-ike-peer-ra] remote-id rb
[RA-ike-peer-ra] nat traversal
RouterB此处省略
阶段二: 在RouterA上配置ACL,以定义需要IPSec保护的数据流。
[RA] acl number 3001
[RA-acl-adv-3001] rule permit ip source 10.1.1.0 0.0.0.255 destination 10.10.1.0 0.0.0.255
在RouterA上配置IPSec安全提议。
[RA] ipsec proposal safe1
[RA-ipsec-proposal-safe1] esp authentication-algorithm sha2-256
[RA-ipsec-proposal-safe1] esp encryption-algorithm aes-128
RouterB此处省略
分别在RouterA和RouterB上创建安全策略
- 在RouterA上配置IKE动态协商方式安全策略。
RA] ipsec policy pass1 10 isakmp
[RA-ipsec-policy-isakmp-pass1-10] security acl 3001
[RA-ipsec-policy-isakmp-pass1-10] ike-peer ra
[RA-ipsec-policy-isakmp-pass1-10] proposal safe1
- 在RouterB上以策略模板方式配置IKE动态协商方式安全策略。
[RB] ipsec policy-template use1 10
[RB-ipsec-policy-templet-use1-10] ike-peer rb
[RB-ipsec-policy-templet-use1-10] proposal safe1
[RB-ipsec-policy-templet-use1-10] quit
[RB] ipsec policy pass1 10 isakmp template use1
查看配置的安全策略信息 [RB] display ipsec policy
分别在RouterA和RouterB的接口上应用各自的安全策略组,使接口具有IPSec的保护功能 在RouterB的接口上引用安全策略组。
[RA] interface gigabitethernet 0/0/0
[RA-GigabitEthernet0/0/0] ipsec policy pass1
在RouterB的接口上引用安全策略组。
[RB] interface gigabitethernet 0/0/0
[RB-GigabitEthernet0/0/0] ipsec policy pass1
查看配置的SA信息 [RA] display ike sa
总结: 优点:NAT-T实现简单 ,不用改动现有在设备和协议,不需要做额外的工作或做很少的工作,具有很好的安全性 ,得到广泛的应用 。
缺点:由于采用了UDP封装形式 ,加大了数据包的长度和负载 ,大约为每个数据包增加了20B的长度。这增加了设备处理的时间和负担。采用了UDP封装形式后,将IPSec的实现扩展到了第四层之上,这就与IPSec的本来意图相矛盾,并会引入安全问题;在实现NAT-T中,引入了NAT发现、NAT支持证明等无关功能,增加了IKE的复杂性,使IKE的实现趋向更加复杂;如果攻击者将UDP数据包插入UDP封装的IPSec数据流,通过伪造序列号、校验和、或更改源、目的端IP地址及端口号,可以很方便地引发对接收端的拒绝服务攻击;虽然解决了IPSec数据包通过NAT设备所遇到的大部分问题,但还存在一些未曾解决的问题,例如一些应用层协议像FTP、H.323协议、LDAP及其它许多协议,它们的协议消息包一般是在应用层数据特定区段内嵌IP地址和端口号,而不是放置在IP头,如果仅仅使用NAT协议里的IP和端口号不能指向正确的地方,从而导致通信不能正常进行。
2.2、RSIP方案
领域特定的因特网协议RSIP(Realm Specific Internet Protocol)是IETF专门开发用来替代NAT协议与IPSec配合工作的。RSIP是将一个拥有合法IP的服务器放在私有地址域内 。把公网IP地址和端口租给位于私有网络中的RSIP主机 。与 NAT不同的是 ,它不是采用替换IP来工作 ,而是允许域内主机直接同时在几个地址域内通信。在通信过程中。RSIP对IP载荷做的修改不会削弱 IPSec这类 对NAT敏感的协议的功能 ,当一个RSIP客户机想要在自己所在地址域外通信时,首先在RSIP网关上登记 ,RSIP网关给它分配一个合法的IP地址(或一 IP地址和端 E1)。并把私有地址与之绑定。RSIP客户使用这个地址作为源地址和外部设备通信 ,直到这个地址过期或被更新 。
注:RSIP假定领域特定的IP地址与私有或外部领域中的主机进行通信。两端的主机生成的数据包将基于在外部领域中端到端唯一的地址,并且不需要中间进程进行转换。
优点:不需要改变IPSEC协议(AH、ESP、IKE),解决了当多个内部主机与同一个外部设备通信时的分路冲突和SPD重叠问题,具有影响上层协议少、可以和IPSEC协同工作等特点。由于RSIP是NAT的替代方案,并且可以和现有的NAT共存.因此使用NAT的网络可以平滑地升级到RSIP。同时RSIP通过将IKE和IPSec封装在一个以其私有IP为源地址的报文内,避免了对IKE和IPSec协议本身的修改,使AH和ESP的两种模式都可以使用,很好地解决了使用NAT时存在的一些问题。
缺点:RSIP依赖端口共享公用IP,但是IPSECESP需要对端口号进行加密。当多个RSIP主机使用一个RSIP网关转发ESP时。会出现分路冲突的问题,就需要另外的鉴别器,这样就加重了IPSec设备的负担;另外在IKE重建密钥时,为了解决分路传送问题。RSIP需要修改IKE的源端口,这样就可能无法与现有的IPSec协同工作;最后该解决方案要求将NAT网关升级为RSIP网关,同时涉及对客户机的修改、服务器的部署、服务器的修改等等问题.这个过程在经济上耗费较大且一时难以实现。
|