对等体检测洞察先机,双链路备份有备无患

应用了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报文。

实际应用中keepalive很少使用。主要原因是keepalive存在如下两个方面的缺陷:

  1. Keepalive机制周期性发送Hello报文将消耗大量的CPU资源,会限制可建立的IPSec会话的数量。
  2. 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专题就讲完了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇