IPsec VPN增强特性—对等体检测机制

一、对等体检测机制

IPsec是一种对等体到对等体的技术,是作为IP的补充协议,因此对等体之间建立IPsec会话的前提就是必须网络层可达。常常会因为路由选择或者对等体重启的问题,导致网络层丢失连接性,IPsec和IKE协议无法感知到网络层是否连接:

  • IKE基于UDP,因此是无连接的;

  • 寿命到期前,对等体之间的IKE和IPsec SA会一直存在;

从IPsec高可用性来说,IPsec需要具备在故障时的主备切换能力。一旦IPsec会话中断,那么就会出现数据流黑洞、浪费CPU计算能力。建立主备对等体是一种很好的方法,但是因为IPsec没有网络层感知的能力,所以需要让IPsec对等体之间具备这种能力。对等体恢复后存在两种问题:

  • 接收方对等体收到加密分组后因为没有有效的SA而被丢弃;

  • 旧SA仍存在,导致无法创建新的SA;

对等体故障检测机制可以解决上述问题。对等体故障检测技术分为IKE KeepaliveDPD两种。

二、IKE Keepalive

IKE Keepalive是指对等体通过定期(每隔60s)的发送IKE存活消息来告知对方自己处于活动状态。IKE Keepalive判断机制:超过3条存活消息未收到确认,判断为对等体失效,相关动作为删除对应SA并建立一条到备用对等体的IPsec隧道。

IKE Keepalive的优点:

  • 检测失效IKE对等体

  • 防范数据黑洞

  • 节省CPU资源

IKE Keepalive的缺点:

  • 扩展性低,对于超过1000个以上的IPsec会话会消耗CPU资源来处理IKE Keepalive消息,这将限制IPsec可创建会话能力;

  • 无法检测对等体后的网络是否可达;

三、DPD

DPDDead Peer Detection死亡对等体检测)可以用于替代IKE Keepalive来检测失效对等体,可扩展性更高。为什么说DPD可扩展性更高是因为它是一种基于数据流的检测方法,即DPD认为如果两个对等体之间有数据流,则隐式说明对等体可用,无需发送存活消息确认,只有当对等体在一段时间内没有交换数据流,才会发送存活消息,这种方式避免了很多不必要的存活消息,也减少了CPU用于处理存活消息的处理周期。

DPD配置时需要注意空闲间隔(或叫置信区间)和重传间隔。空闲间隔是指对等体A没有从对等体B收到任何数据,用于故障检测以及恢复空闲资源。对等体A的空间间隔超时后且对等体A有数据需要发送给对等体B(此策略有助于节省资源),对等体A发送R-U-THERE消息给对等体B,并期望收到ACK消息,如果没有收到,则重传R-U-THERE消息3次,每次的时间间隔为重传间隔,然后才宣称对等体B死亡。对等体A宣称对等体B死亡后,会拆除本地IPsec连接并回收分配的SA,然后重新尝试建立到对等体B或者备用对等体的连接。

DPD优点:拒绝了类似IKE Keepalive的定期轮询,通过基于数据流的检测方式从而节省了系统资源,提高了IPsec的可扩展性。

DPD缺点:无法检测对等体后的网络是否可达,也就是无法防止数据流经过对等体后被数据黑洞吞噬。

DPD配置部署建议:

  • 空闲间隔30s、重传间隔3s,可快速检测可能出现的无效ISAKMP SA和IPsec SA;

  • 如果某一对等体只支持IKE Keepalive,另一对等体两者均支持,则采用IKE keepalive;

  • 如果两个对等体之间存在NAT或防火墙,那么必须使用IKE Keepalive来刷新NAT或防火墙中的状态条目;或者选择采用NAT存活机制来刷新NAT或防火墙中的状态条目。

ASA配置DPD

ASA(config)#tunnel-group x.x.x.x ipsec-attributes
ASA(config-ipsec)#isakmp keepalive threshold 30 retry 3 #配置DPD
ASA(config-ipsec)#isakmp keepalive disable #禁用DPD