IPSec VPN高可用性解决方案需要用到DPD、RRI、路由、SLA等技术组合使用才能做到简单的高可用性,缺点是使用场景单一且配置繁琐。由于IPSec VPN的局限性,思科基于IPSec VPN和动态路由推出了新的VPN技术DMVPN(动态多点VPN),DMVPN我们将在VPN系列的后续内容中讲述,此章节主要讲述IPSec VPN如何实现高可用性。
下图为此文章所用拓扑图:
实验拓扑
以上实验配置内容较多不便贴入文章当中,文章中仅体现必要配置,如需要实验全部配置可私信我获取。
前文讲到,IKE SA有效时长24小时,IPSec SA有效时长1小时,如果在有效时间内链路中间发生了故障,加密数据无法正常传输,这时我们需要尽快清除有问题的IPSec SA,与正常工作的其他peer建立IPsec VPN隧道。
这时我们将使用到IPSec VPN的保活机制叫做DPD(Dead Peer Detection),用其来检查对端加密点路由器是否可用,如果对端设备不可用则不需要等到SA有效期到期立即清除不可用的SA。
VPN高可用性
如上图所示,为保证IPSec的高可用性,外地办事处与总部的两台VPN设备分别建立了两条VPN隧道做主备备份。但是如果没有使用DPD技术,如果主用VPN隧道出现线路故障,VPN又没有使用DPD保活机制,VPN设备不知道远端设备已经不可达,SA依旧存在,则数据包依旧使用主用VPN隧道进行发送,结果就是报文被丢弃,这时需要网络管理员手动清除两端设备的SA,使VPN设备通过IKE重新协商使用备用线路建立备用VPN隧道,但网络管理员手动清除SA显然不符合VPN高可用性的标准,从故障发现到处理故障响应时长也比设备自动检测保活时间长。
这时就需要使用DPD技术,通过VPN设备之间"按需"或"定时"发送HELLO报文探测远端VPN设备是否存活,如果远端VPN设备已经不可达则自动删除现有SA,与备用线路建立IPSec VPN。根据设备性能、设置的DPD检测时长不通,切换时间也不尽相同,但基本保持在10s-20s左右,与网络管理员发现故障后手动清除VPN两端设备的SA相比大大缩短了响应时间。
下图为DPD功能配置:
crypto isakmp keepalive [探测周期时间 [超时重试间隔时间] [模式]
探测周期:设置每多少秒进行一次保活探测。
超时重试间隔时间:设备对端响应时间,如远端VPN设备未在要求响应时间内响应则再次放松一次保活探测,共持续5次,5次均未响应则清除此SA。
模式:on-demand模式:按需模式,一旦有数据报文激活SA则开始进行探测。
periodic模式:周期模式,只要存在SA即每指定时间内周期发送探测报文。
举例:crypto isakmp keepalive 10 2 on-demand
开启DPD一旦有数据报文激活SA,则每10秒发送HELLO报文探测远端存活性,远端超出2秒内没有响应则继续发送HELLO报文探测远端存活性,共发送5次,如远端VPN设备5次都没有在2秒钟内响应探测报文则此SA将被清除。
下图为DPD探测报文(由于探测报文为密文,所以我们抓取debug信息):
正常探测报文:
探测报文抓取
正常SA建立情况:
SA建立情况
这时手动shutdown端口,让其中一条隧道的加密点不可达。
探测报文:
探测报文抓取
发现加密点没有响应,开始每隔两秒发送一条探测报文,共发送五条。
第一次探测:
探测报文-1
第二次探测:
探测报文-2
第三次探测:
探测报文-3
第四次探测:
探测报文-4
第五次探测未响应后删除相应加密点的SA:
探测报文-5
此时再查看SA建立情况发现对应加密点的SA已经被删除:
IKE SA建立状态
附:外地办事处路由器IPSec VPN高可用的相关配置:
crypto isakmp keepalive 10 periodic
crypto map fenzhi 1 ipsec-isakmp
set peer 202.111.34.2 default
set peer 60.111.34.2
set transform-set 20
match address 100
由配置能发现分支与总部两台VPN设备都建立了关联
知识扩展:set peer 202.111.34.2 default为什么后面加了一个 default?
增加default的作用在于如果此设备与多台VPN设备建立了联系,在没有设置default的情况下,是基于设置peer的顺序来选择使用哪一个peer建立的SA进行传输的,一旦第一个peer的SA失效则选择第二的SA进行加解密传输,第二个SA失效则选择第三个SA进行加解密传输,以此类推。
设置上default与未设置default的区别在于,default SA失效以及第二个SA失效后、会再次探测并尝试使用default进行加解密传输,如果default还是处于失效状态,这时才会选择第三个SA进行加解密传输,以此类推。
default set peer的作用
然而,仅适用DPD技术只能保证VPN隧道的建立,无法解决下图所描述问题:
新问题图示
由于公司总部有多个出口VPN设备,所以核心交换机的默认网关一定是指向主用VPN隧道的VPN出口设备,一旦主用VPN链路断掉,DPD删除主用VPN隧道SA,重新建立备用VPN隧道后,数据报文虽然能够通过备用VPN隧道发送至总部服务器,但总部服务器将响应报文发送给核心交换机后,核心交换机根据自己的默认路由将加密报文发送给了主用VPN设备,由于主用VPN设备上的SA已经被DPD删除,所以加密数据报文无法发出,如何告知核心交换机将默认网关指向备用VPN设备将是一大问题。
这时我们将使用OSPF与RRI技术的组合或等价路由与SLA技术的组合来进行解决。
RRI的作用在于应用在IPSec VPN的map中,一旦此map建立SA,则生成一条静态路由,该静态路由是目标地址为对端通信点,下一条为对端加密点的静态路由。
然后使用OSPF的重分布静态路由功能,将RRI产生的静态路由告知三层交换机。
正常数据传输:
OSPF+RRI技术图示
主用VPN隧道SA因加密点不可达被DPD清除:
OSPF+RRI技术解决方案图示
相关配置:
总部联通路由器:
1、 在IPSec VPN的map中启用RRI并打上tag
crypto map zongbu-lt 1 ipsec-isakmp
set peer 202.102.134.2
set transform-set 11
set reverse-route tag 10 为产生的静态路由打上tag10,便于后面再route-map调用
match address 100
reverse-route 启用RRI
2、 创建名为static的route-map并匹配tag 10,建立route-map的作用是为了在ospf中引入此静态路由。
route-map static permit 10
match tag 10
3、在OSPF中重分布名为static的route-map中的静态路由。
router ospf 1
redistribute static subnets route-map static
network 10.1.1.0 0.0.0.255 area 0
总部电信路由器:
电信路由器与联通路由器配置基本相同。
1、在IPSec VPN的map中启用RRI并打上tag
crypto map zongbu-dx 1 ipsec-isakmp
set peer 202.102.134.2
set transform-set 12
set reverse-route tag 20 为产生的静态路由打上tag20,便于后面再route-map调用
match address 100
reverse-route 启用RRI
2、创建名为static的route-map并匹配tag 20,建立route-map的作用是为了在ospf中引入此静态路由。
route-map static permit 20
set tag 20
3、在OSPF中重分布名为static的route-map中的静态路由。
router ospf 1
redistribute static subnets route-map static
network 10.1.1.0 0.0.0.255 area 0
总部核心交换机:
核心交换机只需要加入OSPF域中等待静态路由的引入即可。
router ospf 1
network 10.1.1.0 0.0.0.255 area 0
正常数据传输:
等价路由+SLA技术图示
主用VPN隧道SA因加密点不可达被DPD清除:
等价路由+SLA技术解决方案图示
相关配置:
核心交换机:
1、 创建两个SLA
ip sla 1
icmp-echo 202.111.34.2 source-interface Vlan1
frequency 5
ip sla schedule 1 life forever start-time now
ip sla 2
icmp-echo 60.111.34.2 source-interface Vlan1
frequency 5
ip sla schedule 2 life forever start-time now
2、 track绑定SLA
track 1 ip sla 1 reachability
track 2 ip sla 2 reachability
3、 创建等价路由并使用track探测
ip route 0.0.0.0 0.0.0.0 10.1.1.1 60 track 1
ip route 0.0.0.0 0.0.0.0 10.1.1.2 60 track 2
知识扩展:由于测试需要这里的等价路由我使用的是基于包的随机负载分担,具体命令如下:
Int vlan 1
ip load-sharing per-packet
默认情况下是基于目标地址的负载分担:
ip load-sharing per-destination
以上内容均为本人对所掌握知识的总结归纳所创作的原创文章,希望能给大家的学习过程带来帮助,如有技术理解错误希望能够及时得到大家的指正,大家共同学习,共同进步。
欢迎关注我的头条号,私信交流,学习更多网络技术!