静态路由如何快速感知链路故障——与BFD联动应用场景

2022-04-18 17:08:52

不少中小型单位为了节约成本,访问外网会使用相对便宜的家庭/企业宽带,在出口路由设备上往往配置的是默认路由+ NAPT。使用默认路由(一种特殊的静态路由)的好处是比较简单,也就不用和营运商做更多的配置方面的协商;但静态路由的缺点也很明显,如果连接外网的链路某个位置故障,它可能无法感知到。下面以一些中小单位比较常见的拓扑为例,概括模拟如图1所示

图1

其中左边红色区域的R1为单位总部的出口路由器,右边橙色区域的R6为单位分支的出口路由器,用于连接互联网;中间紫色区域R2~R5模拟营运商的路由设备,SW1~SW4则模拟营运商提供接入互联网的光猫(桥接模式)。在R1和R6的G0/0/1、G0/0/2配置了公网IP和NAPT,且均配置了两条用于访问外网的默认路由,这两条默认路由配置为主备方式(上方的为主、下方的为备。另外,不管是主备方式还是负载分担方式不影响下面对静态路由缺点的观察)。

R1、R6默认路由的初始配置如下:

R1:

[R1]ip route-static 0.0.0.0 0.0.0.0 12.12.12.2

[R1]ip route-static 0.0.0.0 0.0.0.0 13.13.13.3 preference 70

R6:

[R6]ip route-static 0.0.0.0 0.0.0.0 46.46.46.4

[R6]ip route-static 0.0.0.0 0.0.0.0 56.56.56.5 preference 70

当R1和R6之间的链路没有问题的时候,单位总部和分支是可以访问互联网,同时它们内部局域网之间通过VPN等方式也是可以进行互访的。

下面以R1—SW1(光猫)—R2之间的链路为例,来看看当链路上某个位置出现故障,静态路由存在的缺点(R1—SW3(光猫)—R3、R6—SW2(光猫)—R4或R6—SW4(光猫)—R5之间存在同样的问题)。

注:

拓扑中R2~R5之间存在冗余链路,它们之间如果只是某条链路故障,动态路由可以感知,与R1或R6上配置的静态路由是不同的。

一、当R1—SW1(光猫)之间的链路出现问题时

例如SW1(光猫)的G0/0/1出现问题、或者它们之间的网线出现问题,因为R1—SW1(光猫)是直接相连的,所以R1的G0/0/1口一般会down掉,此时R1上配置的下一跳为12.12.12.2的默认路由会从路由表中去除,同时会将下一跳为13.13.13.3的默认路由添加到路由表中,主备是可以自动切换的;当故障消除R1的G0/0/1口up后,因为优先级的原因,会再次切换回原来的主备状态。

手动将SW1(光猫)的G0/0/1接口shutdown来模拟故障,输入

display ip routing-table

显示如图2

图2

将SW1(光猫)的G0/0/1接口undo shutdown模拟故障恢复,再次观察R1的路由表,如图3

图3

可以看出当R1对外的物理上直连设备(二层或三层)之间出现问题时,一般R1的G0/0/1口会down掉,在路由表中相对应的默认路由条目被备用的默认路由替换掉了;故障消除后,一般R1的G0/0/1口会up,相对应的默认路由条目(优先级高)又会替换掉备用的默认路由。

二、当SW1(光猫)—R2之间的链路之间某个位置出现问题时

例如SW1(光猫)的上联PON口出现问题、或者SW1(光猫)—R2之间的光纤中断,因为此时与R1不是直接相连(中间隔着工作在桥接的光猫),所以R1到SW1(光猫)的网口G0/0/1口仍然处于up状态,则R1上配置的下一跳为12.12.12.2的默认路由不会自动从路由表中去除,下一跳为13.13.13.3的默认路由也不会添加到路由表中,那么单位总部也就不能访问外网,更无法与分支互访了。

手动将R2的G0/0/1接口shutdown来模拟故障,观察R1的路由表,如图4

图4

可以看出当R1对外的非直连链路出现问题,无法让R1的G0/0/1口down掉,相对应的静态路由条目不会在路由表中被删除。这也是与动态路由的主要不同之一。

针对这种非直连链路出现问题的情况,可以通过静态路由与BFD(或NQA等)检测方式联动来解决(需要设备支持)。

一、当只需检测访问互联网是否正常时

此时一般只要检测到营运商的网关即R1—SW1(光猫)—R2之间是否正常即可,这也是比较容易出问题的地方。这种情况可以尝试配置静态BFD单臂回声功能,不用与营运商协商在R2上做其他配置。配置如下:

(一) 配置静态BFD单臂回声

[R1]bfd toisp1 bind peer-ip 12.12.12.2 interface GigabitEthernet0/0/1 one-arm-echo

[R1-bfd-session-toisp1]discriminator local 11

[R1-bfd-session-toisp1]commit

[R1-bfd-session-toisp1]quit

(二) 配置静态路由与BFD联动

[R1]ip route-static 0.0.0.0 0.0.0.0 12.12.12.2 track bfd-session toisp1

[R1]ip route-static 0.0.0.0 0.0.0.0 13.13.13.3 preference 70

手动将R2的G0/0/1接口shutdown来模拟其接口故障后,输入

[R1]display bfd session all

显示如图5

图5

可以看到R1对应的BFD会话状态会down掉,它会通知R1的路由模块,将配置的下一跳为12.12.12.2的默认路由会从路由表中去除,同时会将下一跳为13.13.13.3的默认路由添加到路由表中,通过display ip routing-table可观察到,如图6

图6

当故障恢复后BFD的会话状态恢复为up,路由条目也恢复到故障前,分别如图7、图8

图7

图8

注:

与上面所说的R1—SW1(光猫)直连不同,对于静态BFD单臂回声来说,需要R1与R2之间是三层直连或是单跳,中间隔着二层设备是可以的;但如果光猫工作在路由模式则不行)

R6的配置类似

[R6]bfd toisp11 bind peer-ip 46.46.46.4 interface GigabitEthernet0/0/1 one-arm-echo

[R6-bfd-session-toisp1]discriminator local 1

[R6-bfd-session-toisp1]commit

[R6-bfd-session-toisp1]quit

[R6]ip route-static 0.0.0.0 0.0.0.0 46.46.46.4 track bfd-session toisp11

[R6]ip route-static 0.0.0.0 0.0.0.0 56.56.56.5 preference 70

二、当需要检测单位总部与分支之间VPN是否正常时

例如R1—SW1(光猫)—R2,或者R4—SW2(光猫)—R6之间的某个位置出现问题时,在单位总部和分支之间配置了隧道两端为(12.12.12.1、46.46.46.6)和(13.13.13.1、56.56.56.6)的两条IPSec VPN,使得单位总部和分支的局域网可以互访。这种情况可以在前面默认路由与静态BFD单臂回声功能联动的基础上,尝试分别在R1、R6配置静态BFD多跳检测。配置如下:

(一) 配置BFD多跳检测

1、R1

[R1]bfd

[R1-bfd]quit

[R1]bfd tofenbu bind peer 46.46.46.6

[R1-bfd-session-tofenbu]discriminator local 1

[R1-bfd-session-tofenbu]discriminator remote 2

[R1-bfd-session-tofenbu]commit

[R1-bfd-session-tofenbu]quit

2、R6

[R6]bfd

[R6-bfd]quit

[R6]bfd tozongbu bind peer 12.12.12.1

[R6-bfd-session-tofenbu]discriminator local 2

[R6-bfd-session-tofenbu]discriminator remote 1

[R6-bfd-session-tofenbu]commit

[R6-bfd-session-tofenbu]quit

(二) 配置静态路由与BFD联动

1、R1

[R1]ip route-static 10.0.0.0 255.255.255.0 12.12.12.2 track bfd-session tofenbu

[R1]ip route-static 10.0.0.0 255.255.255.0 13.13.13.3 preference 70

2、R6

[R6]ip route-static 192.168.1.0 255.255.255.0 46.46.46.4 track bfd-session tozongbu

[R6]ip route-static 192.168.1.0 255.255.255.0 56.56.56.5 preference 70

只要R1—SW1(光猫)—R2,或者R4—SW2(光猫)—R6之间的某个位置出现问题,相应的BFD的会话状态就会处于非up(down或init),R1和R6同时会从主用的静态路由切换到备用静态路由。

手动将R2的G0/0/1接口shutdown来模拟其接口故障后,观察R1、R6的BFD会话和路由表分别如图9、图10、图11、图12

图9

图10

图11

图12


注:

1、默认路由配置为与BFD单臂回声联动,是因为访问互联网可能不需要切换路由。例如R1—SW1(光猫)—R2之间某处出现问题,单位总部访问互联网需要R1切换到备用的默认路由,如图11中的默认路由;但对单位分支来说并不影响其访问互联网,因此R6的没必要切换到备用的默认路由,如图12中的默认路由。

2、默认路由配置为与BFD单臂回声联动,可能会出现R1使用备用的默认路由(图11)、R6使用主用默认路由(图12)的情形,此时会导致单位总部和分支的VPN不通,分别在R6的G0/0/2、G0/0/0、G0/0/1抓包如图13、图14、图15

图13

图14

图15

因此分别配置了到对方私有局域网网段的静态路由并与BFD多跳检测联动,以引导数据走对应的VPN。

3、配置上面静态路由并与BFD多跳检测联动后,因为到VPN隧道两端的IP会受默认路由的影响,因此可能会产生次优路由(因为路由的迭代性)。例如当R2的G0/0/1故障时R1切换到备用默认路由后,单位总部PC2 发往分支PC3的数据的路径是PC2—R1—R3—R5—R6—PC3;但R6可能还在使用主用的默认路由,单位分支PC3发往总部PC2的数据的路径是PC3—R6—R4—R5—R3—R1—PC2。分别在R6的G0/0/2、G0/0/1抓包如图16、图17

图16

图17

可以尝试增加到VPN隧道两端的IP的静态路由解决。例如R2的G0/0/1故障,可以在R6配置

[R6]ip route-static 13.13.13.0 255.255.255.0 56.56.56.5

在R6的G0/0/2抓包如图18

图18

此时P2 ping PC3的数据往返路径是一致的了,没再绕路。

三、R2—R4之间如果没有可自动切换路由的冗余链路时

如图2所示

图2

只要R1—SW1(光猫)—R2—R4—SW2(光猫)—R6之间的任意某个位置出现问题,配置多跳BFD检测的会话状态就会处于非up(down或init),R1和R6同时会从主用的静态路由切换到备用静态路由,单位总部和分支之间的路径为R1—SW3(光猫)—R3—R5—SW4(光猫)—R6。


以上举例不一定很恰当,输入和描述可能有疏漏、错误,欢迎大家在下方评论区留言指正!

另以上实验如有帮助,望不吝转发!


附:

《华为路由器静态路由与BFD联动方式实现外网链路备份实验》