商业虚拟专用网络技术八IPSec应用场景

一、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的不兼容
传输模式AHESP

在传输模式下,AH安全协议使用原IP报头也就是内网的私有IP地址并在整个验证范围,会导致NAT设备在对私网的源IP地址和目的地址修改为公网地址后,因为经过NAT后改变了Hash值,无法通过验证,完整性检查的失败;ESP安全协议下TCP/UDP的校验和的计算包含IP源目地址,通过nat后,nat修改了最外层IP地址,接收数据路由器检查校验和失败。
隧道模式AHESP

在隧道模式下,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    //配置IKEv1阶段1协商模式为野蛮模式
[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                 //使能NAT穿越功能,默认为开启,一般不设置。

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网关,同时涉及对客户机的修改、服务器的部署、服务器的修改等等问题.这个过程在经济上耗费较大且一时难以实现。

二、IPSec的高可靠性

两个对等体进行IKE和IPSec通信时,由于一方突然主机重启或者故障等原因,将会造成对方体双方失去连通性,这时需要一个机制来让原安全联盟失效,重新协商安全联盟,否则将会出现数据黑洞,这就是对等体在IKE协商或者通过IPSec隧道数据通信时,由于SA安全联盟一直存在着,在其生命周期内,数据包依然继续进行隧道封装并发送出去,这些数据包将不能到达目的地址。

1、IKE心跳机制

在华为设备称为heartbea机制,在其它设备上称为keepalive机制,原理都一样,原理是对等体的两端都定期发送heartbeat报文或者keepalive报文给另一端,告诉对端我还活跃着,接收端收到报文后确认发送端的活跃状态。

在这里插入图片描述
本端配置的发送heartbeat报文的时间间隔需要与对端配置的等待heartbeat报文的超时时间配合使用。当对端在配置的超时时间内未收到heartbeat报文时,如果该IKE SA带有TIMEOUT标记,则删除该IKE SA以及由其协商的IPSec SA;否则,将其标记为TIMEOUT。

注意:
IKE对等体协商采用IKEv1协议时,设备支持heartbeat检测;采用IKEv2协议时,设备不支持heartbeat检测。

heartbeat检测的局限性在于:

  • 启用heartbeat检测将消耗CPU资源来处理IKE存活消息,这限制了可建立的IPSec会话的数量。
  • 没有统一标准,各厂商设备可能无法对接。

配置heartbeat
1、配置heartbeat报文参数。
ike heartbeat { seq-num { new | old } | spi-list }
默认是eartbeat报文采用old类型序列号机制,这项可以不配置。

2、配置IKE SA发送heartbeat报文的时间间隔。
ike heartbeat-timer interval interval
默认是IKE SA不发送heartbeat报文。如要配置时间间隔对等体两端都要配置。

3、等待heartbeat报文的超时时间。
ike heartbeat-timer timeout seconds
默认是IKE SA不等待对端发送的heartbeat报文。如要配置超时时间对等体两端都要配置。超时时间是heartbeat报文的时间间隔的3倍。

2、DPD机制

对等体存活检测DPD(Dead Peer Detection)机制不用周期发送heartbeat报文,是一种按需型IKE/IPSec安全隧道对端探测机制,。若本端可以收到对端发来的IPSec流量,则认为对端处于活动状态;只有当一定时间间隔内没有收到对端发来的IPSec流量时,才会发送DPD报文探测对端的状态。若发送几次DPD报文后一直没有收到对端的回应,则认为对端不可达,此时将删除IKE对等体间的安全联盟(IKE SA和IPSec SA)。
在这里插入图片描述
DPD机制与heartbeat机制相比,DPD机制避免了周期性消息造成的资源浪费,也就不再需要对定时器维护。DPD的超时时间设置得更小,这样可以很快探测到对等体的状态变化。

配置上,heartbeat检测定期发送报文,本端和对端配置需要匹配;DPD检测中本端和对端不需要匹配(除DPD报文中的载荷顺序需要匹配外),当IKE对等体间有正常的IPSec流量时,不会发送DPD消息,只有当一段时间内收不到对端发来的IPSec报文时,才发送DPD消息,节省了CPU资源。

DPD有如下两种检测模式:

  • 按需型
    当本端需要向对端发送IPSec报文时,判断当前距离最后一次收到对端的IPSec报文已超过DPD空闲时间,则本端主动向对端发送DPD请求报文。

  • 周期型
    如果当前距离最后一次收到对端的IPSec报文或DPD请求报文的时长已超过DPD空闲时间,则本端主动向对端发送DPD请求报文。

配置DPD
1、配置DPD报文中的载荷顺序。
dpd msg { seq-hash-notify | seq-notify-hash }
默认的DPD报文中的载荷顺序缺省值为seq-notify-hash。一般不配置。

2、配置DPD空闲时间、DPD报文重传间隔和重传次数。
dpd { idle-time interval | retransmit-interval interval | retry-limit times }
默认的IKE对等体的DPD空闲时间、DPD报文重传间隔和重传次数分别为30秒、15秒和3次。

3、配置DPD检测模式,on-demand按需型或periodic周期型(定时探测模式)。
dpd type { on-demand | periodic }
默认的IKE对等体没有设置DPD检测模式。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0与1之旅

创作不易请给予一点帮助和鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值