应用了IPSec后,通信安全得到保障。当网络上突发问题时,比如路由问题、对端设备重启等,会导致IPSec通信中断或时断时续,那么如何才能快速的检测到故障并迅速恢复IPSec通信呢?这就需要用到IKE对等体检测机制和IPSec可靠性了。
对等体检测洞察先机
当两个对等体之间采用IKE和IPSec进行通信时,对等体之间可能会由于路由问题、IPSec对等体设备重启或其他原因导致连接断开。由于IKE协议本身没有提供对等体状态检测机制,一旦发生对等体不可达的情况,只能等待安全联盟老化。只有快速检测到对等体的状态变化,才可以尽快恢复IPSec通信。
现在强叔给大家展示一下由于对端设备重启导致IPSec中断的情况。
网关FW_A跟网关FW_B之间采用IPSec进行通信。重启网关FW_B后,查看两端IPSec隧道情况。
- 发现网关FW_A上的IPSec隧道还在。
<FW_A> display ike sa
current ike sa number: 2
———————————————————————
conn-id peer flag phase vpn
———————————————————————
40015 2.2.3.2 RD v1:2 public
40014 2.2.3.2 RD v1:1 public
- 发现网关FW_B重启后其上的IPSec隧道不在了。
<FW_B> display ike sa
current sa Num :0
这就会导致如下的问题:
- 总舵的PC1先访问分舵的PC2,无法通信。
原因就在于FW_A上的安全联盟还存在,但FW_B上的安全联盟已经没有了。从PC1访问PC2会采用原有的安全联盟,而无法触发FW_A与FW_B之间建立新的安全联盟。从而导致访问失败。 - 分舵的PC2先访问总舵的PC1,可以正常通信。
因为FW_B上不存在安全联盟,因此可以触发建立安全联盟。安全联盟建立后,双方可以正常通信。
针对这种问题的解决办法就是需要开启IPSec检测机制。开启IPSec检测机制后,当一端设备故障后,另一端设备的安全联盟也同时删除。
USG系列防火墙支持两种IPSec检测机制:
- Keepalive机制
Keepalive机制通过IKE对等体周期性发送Hello消息来告诉对方自己处于活动状态。若在超时时间内没有收到Hello报文,则认为对端不可达。此时将删除该IKE SA及由它协商的IPSec SA。
Keepalive机制默认关闭。配置相应参数后,keepalive机制生效。 - DPD机制
DPD(Dead Peer Detection)机制不用周期性发送Hello消息,而是通过使用IPSec流量来最小化对等体状态检测所需消息报文的数量。若可以收到对端发来的流量,则认为对方处于活动状态;只有当一定时间间隔内没有收到对端发来的流量时,才会发送DPD报文探测对端的状态。若发送几次DPD报文后一直没有收到对端的回应,则认为对端不可达,此时将删除该IKE SA及由它协商的IPSec SA。- IKEv1时配置DPD机制
IKEv1默认不支持DPD。需要在隧道两端同时配置。两端配置的DPD参数彼此独立,不需要匹配。 - IKEv2时配置DPD机制
IKEv2默认支持DPD。只要在隧道一端配置DPD,另一端就可以响应DPD报文。
- IKEv1时配置DPD机制
实际应用中keepalive很少使用。主要原因是keepalive存在如下两个方面的缺陷:
- Keepalive机制周期性发送Hello报文将消耗大量的CPU资源,会限制可建立的IPSec会话的数量。
- Keepalive没有统一标准,各厂商的设备可能无法对接。
说明:对等体检测机制虽然不是必配项,但对IPSec故障恢复有益,推荐大家配置IPSec时配置DPD检测机制。
下面以配置DPD机制为例,说明FW_B发生故障后FW_A上的变化。
配置 | 总舵 | 分舵 |
配置DPD | ike dpd interval 10 2 | ike dpd interval 10 2 |
说明:采用IKEv2是只要一端配置就可以了。
配置完成后,设备检测到链路状态的变化。此时查看IKE SA和IPSec SA的情况,发现FW_A上的安全联盟已经删除了。
<FW_A> display ike sa
current sa Num :0
此时可以正常建立IPSec隧道了。
双链路备份有备无患
IPSec可靠性可以分为设备可靠性和链路可靠性。设备可靠性主要是双机热备,由于双机热备非常复杂,不是一句两句可以说清的,强叔将在后面专门讲解。本次讲解的重点是链路可靠性。
由于天地会的发展壮大,总舵要与所有分舵进行通信,网络带宽倍感压力。一旦网络出问题,就完全不能通信了。为避免此等悲剧,陈总舵主决定为总舵再购买一条链路,既可缓解带宽压力,又可以双链路备份。针对双链路的场景可以采用如下两种方案进行配置:
方案一:IPSec主备链路备份
总舵采用双链路与分舵通信,采用IPSec主备链路备份方式的典型组网如下图所示。
FW_B上配置两个Tunnel接口(借用GE1/0/0的IP地址)分别于FW_A的主链路接口GE1/0/0和备链路接口GE1/0/1进行IPSec对接。其配置的关键在于必须配置IP-Link,并采用IP-Link检测主链路的状态。
- 不配置IP-Link时,当FW_A的主链路故障时,FW_B无法感知。因此FW_B上的路由表不会变化,其出接口仍然是与主链路对接的Tunnel1。这会导致IPSec隧道建立失败。
- 配置IP-Link时,FW_B上可以感知FW_A上的主链路状态的变化。当FW_A的主链路故障时,FW_B上的路由表也会同步发生改变。此时可以通过备链路建立IPSec隧道,恢复通信。
总舵和分舵网关的关键配置如下:
关键配置 | 总舵 | 分舵 |
IP-Link//用于监控主链路的情况 | ip-link check enableip-link 1 destination 2.2.2.2 interface GigabitEthernet1/0/0 mode icmp next-hop 202.38.163.2 | ip-link check enableip-link 1 destination 202.38.163.1 interface GigabitEthernet1/0/0 mode icmp next-hop 2.2.2.1 |
路由配置 | ip route-static 10.2.1.0 24 202.38.163.2 preference 10 track ip-link 1 //到分支的路由,GE1/0/0出口的链路为主链路ip route-static 10.2.1.0 24 202.38.164.2 preference 20 //到分支的路由,GE1/0/1出口的链路为备链路ip route-static 0.0.0.0 0.0.0.0 202.38.163.2 preference 10 track ip-link 1 //缺省路由,GE1/0/0出口的链路为主链路ip route-static 0.0.0.0 0.0.0.0 202.38.164.2 preference 20//缺省路由,GE1/0/1出口的链路为备链路 | ip route-static 10.1.1.0 255.255.255.0 Tunnel 1 preference 10 track ip-link 1 //Tunnel1跟主链路对接ip route-static 10.1.1.0 255.255.255.0 Tunnel 2 preference 20 //Tunnel2跟备链路对接ip route-static 0.0.0.0 0.0.0.0 2.2.2.1 //配置缺省路由,下一跳为2.2.2.1 |
定义被保护的数据流 | acl 3000 rule 5 permit ip source 10.1.1.0 0.0.0.255 destiantion 10.2.1.0 0.0.0.255acl 3001 rule 5 permit ip source 10.1.1.0 0.0.0.255 destiantion 10.2.1.0 0.0.0.255 | acl 3000 rule 5 permit ip source 10.2.1.0 0.0.0.255 destiantion 10.1.1.0 0.0.0.255acl 3001 rule 5 permit ip source 10.2.1.0 0.0.0.255 destiantion 10.1.1.0 0.0.0.255 |
配置IPSec安全提议 | ipsec proposal pro1 | ipsec proposal pro1 |
配置IKE安全提议 | ike proposal 10 | ike proposal 10 |
IKE对等体 | ike peer fenduo pre-shared-key tiandihui1 ike-proposal 10 | ike peer a1 pre-shared-key tiandihui1 ike-proposal 10 remote-address 202.38.163.1//原有链路的出接口IP地址ike peer a2 pre-shared-key tiandihui1ike-proposal 10remote-address 202.38.164.1//原有链路的出接口IP地址 |
IPSec安全策略//创建两条IPSec安全策略 | ipsec policy-template tem1 1 security acl 3000 proposal pro1 ike-peer fenduoipsec policy policy1 1 isakmp template tem1ipsec policy-template tem2 1 security acl 3001 proposal pro1 ike-peer fenduoipsec policy policy2 1 isakmp template tem2 | ipsec policy policy1 1 isakmp security acl 3000 proposal pro1 ike-peer a1ipsec policy policy1 1 isakmp security acl 3001 proposal pro1 ike-peer a2 |
应用IPSec安全策略 | interface GigabitEthernet1/0/0 ip address 202.38.163.1 24 ipsec policy policy1interface GigabitEthernet1/0/1 ip address 202.38.164.1 24 ipsec policy policy2 | interface Tunnel1 ip address unnumbered interface GigabitEthernet1/0/0 //借用物理口GE1/0/0的IP地址 tunnel-protocol ipsec ipsec policy policy1interface Tunnel2 ip address unnumbered interface GigabitEthernet1/0/0//借用物理口GE1/0/0的IP地址 tunnel-protocol ipsec ipsec policy policy2 |
配置完成后,建立IPSec VPN。从PC2 ping PC1,可以ping通。查看IKE SA的建立情况如下:
<FW_B> display ike sa
current ike sa number: 2
———————————————————————
conn-id peer flag phase vpn
———————————————————————
40003 202.38.163.1 RD|ST v2:2 public
3 202.38.163.1 RD|ST v2:1 public
断开主链路(shutdown GE1/0/0接口)后,可以使用备链路建立IPSec VPN。从分舵PC ping总舵PC,可以ping通。查看IKE SA建立情况如下:
<FW_B> display ike sa
current ike sa number: 2
———————————————————————
conn-id peer flag phase vpn
———————————————————————
40009 202.38.164.1 RD|ST v2:2 public
9 202.38.164.1 RD|ST v2:1 public
说明IP-Link检测到主链路的接口故障后,修改了FW_A上和FW_B上使用的路由。
主链路正常情况下FW_B上的路由表(只给出静态路由):
<FW_B> display ip routing-table
Route Flags: R – relay, D – download to fib
———————————————————————
Routing Tables: Public
Destinations : 10 Routes : 12
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 Static 60 0 RD 2.2.2.1 GigabitEthernet1/0/0
10.1.1.0/24 Static 10 0 D 2.2.2.2 Tunnel1
主链路断开后FW_B上的路由表(只给出静态路由):
<FW_B> display ip routing-table
Route Flags: R – relay, D – download to fib
———————————————————————
Routing Tables: Public
Destinations : 10 Routes : 12
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 Static 60 0 RD 2.2.2.1 GigabitEthernet1/0/0
10.1.1.0/24 Static 20 0 D 2.2.2.2 Tunnel2
方案二:IPSec隧道化链路备份
IPSec主备链路备份需要分别在两个物理接口上应用IPSec策略,配置复杂;且需要通过IP-Link跟踪路由状态,以便正确的进行IPSec隧道切换。那能否不直接在物理接口上应用IPSec策略呢,这样是否就可以避免隧道切换的问题呢?
当然是可以的。方法就是将IPSec策略应用到一个虚拟的Tunnel接口上。由于策略不是应用到实际物理接口,那么IPSec并不关心有几条链路可以到达对端,也不关心哪条链路发生故障,只有可以查找到可以到达对端的路由,IPSec通信就不会中断。
总舵采用双链路与分舵通信,采用IPSec隧道化链路备份方式组网如下图所示。
下面强叔就讲一下IPSec隧道化链路备份时报文是如何封装和解封装的。
FW_A上报文加封装的过程如下图所示:
(1) FW_A收到需要进行IPSec处理的报文后,将收到的IP明文送到转发模块进行处理。
(2) 转发模块通过查找路由,发现路由出接口为Tunnel接口。转发模块依据路由查询结果将IP明文发送到Tunnel接口。
(3) 由于Tunnel接口应用了IPSec策略,报文在Tunnel接口上进行IPSec加封装。封装后的报文的源IP和目的IP分别为两端隧道接口(应用IPSec策略的接口)的IP地址。
(4) 封装后的IP报文被送到转发模块进行处理。转发模块再次对密文查找路由。
(5) 转发模块通过查找路由,发现路由下一跳为物理接口的路由。根据路由的优先级等选择合适的路由,将IP密文从设备的某个实际物理接口转发出去。
FW_A上报文解封装的过程如下图所示:
(1) FW_A收到加密后的IPSec报文后,将收到的IP密文送到转发模块进行处理。
(2) 转发模块识别到此IP密文的目的地址为本设备Tunnel接口的IP地址且IP协议号为AH或ESP,将IP密文发送到Tunnel接口进行解封装。
(3) IPSec报文在Tunnel接口上进行解封装。
(4) 解封装后的IP明文被再次送到转发模块进行处理。转发模块再次对明文查找路由。
(5) 转发模块通过查找路由,将IP明文从隧道的实际物理接口转发出去。
总舵和分舵网关的关键配置如下:
关键配置 | 总舵 | 分舵 |
路由配置 | ip route-static 10.2.1.0 24 tunnel1//到分舵的路由ip route-static 2.2.2.2 32 202.38.163.2//到分舵网关的路由ip route-static 2.2.2.2 32 202.38.164.2//到分舵网关的路由 | ip route-static 10.1.1.0 255.255.255.0 2.2.2.1//到总舵的路由ip route-static 1.1.1.2 255.255.255.0 2.2.2.1//到总舵网关Tunnel1接口的路由 |
定义被保护的数据流 | acl 3000 rule 5 permit ip source 10.1.1.0 0.0.0.255 destiantion 10.2.1.0 0.0.0.255 | acl 3000 rule 5 permit ip source 10.2.1.0 0.0.0.255 destiantion 10.1.1.0 0.0.0.255 |
配置IPSec安全提议 | ipsec proposal pro1 | ipsec proposal pro1 |
配置IKE安全提议 | ike proposal 10 | ike proposal 10 |
IKE对等体 | ike peer fenduo pre-shared-key tiandihui1 ike-proposal 10 | ike peer zongduo pre-shared-key tiandihui1 ike-proposal 10 remote-address 1.1.1.2//Tunnel接口的IP地址 |
IPSec安全策略 | ipsec policy-template tem1 1 //配置模板方式 security acl 3000 proposal pro1 ike-peer fenduoipsec policy policy1 1 isakmp template tem1 | ipsec policy policy1 1 isakmp security acl 3000 proposal pro1 ike-peer zongduo |
应用IPSec安全策略 | interface Tunnel1 ip address 1.1.1.2 24 tunnel-protocol ipsec ipsec policy policy1 | interface GigabitEthernet0/0/0 ip address 2.2.2.2 24 ipsec policy policy1 |
配置完成后,建立IPSec VPN。从分舵PC ping 总舵PC,可以ping通。查看IKE SA的建立情况如下:
<FW_B> display ike sa
current ike sa number: 2
———————————————————————
conn-id peer flag phase vpn
———————————————————————
40003 1.1.1.2 RD|ST v2:2 public
3 1.1.1.2 RD|ST v2:1 public
主链路正常情况下FW_A上的路由表(只给出静态路由):
<FW_B> display ip routing-table
Route Flags: R – relay, D – download to fib
——————————————————————————
Routing Tables: Public
Destinations : 17 Routes : 18
Destination/Mask Proto Pre Cost Flags NextHop Interface
2.2.2.2/0 Static 60 0 RD 202.38.163.1 GigabitEthernet1/0/0
2.2.2.2/0 Static 60 0 RD 202.38.164.2 GigabitEthernet1/0/1
10.2.1.0/24 Static 60 0 D 1.1.1.2 Tunnel1
主链路中断情况下FW_A上的路由表(只给出静态路由):
<FW_B> display ip routing-table
Route Flags: R – relay, D – download to fib
——————————————————————————
Routing Tables: Public
Destinations : 17 Routes : 18
Destination/Mask Proto Pre Cost Flags NextHop Interface
2.2.2.2/0 Static 60 0 RD 202.38.164.2 GigabitEthernet1/0/1
10.2.1.0/24 Static 60 0 D 1.1.1.2 Tunnel1
由于分舵是与总舵Tunnel接口的IP地址建立IPSec隧道,所以在总舵FW_A上断开GE1/0/0接口所属链路后,分舵PC ping 总舵PC的业务流量不会中断。在FW_B上查看IKE SA,可以看到对端的IP地址还是1.1.1.2。
IPSec隧道化链路备份跟IPSec主备链路备份相比有如下优势,推荐采用IPSec隧道化备份。
IPSec链路备份方案 | IPSec主备链路备份 | IPSec隧道化链路备份 |
配置 | 复杂 | 简单 |
平滑切换 | IPSec隧道切换,需重新协商隧道 | 不需要隧道切换 |
适用场景 | 双链路 | 双链路或多链路 |
至此IPSec专题就讲完了。