思科路由器使用 IP SLA 结合浮动静态路由实现简单的主备宽带切换


一、前言

大型企业,尤其是电商企业,是绝对不能容忍外网连接中断的。

为此,这些企业通常拉了两条属于不同 ISP 的宽带,一条带宽大,另一条带宽小。

企业平常使用带宽大的宽带作为主宽带连接外网。而当带宽大的主宽带出现故障时,网络流量能够迅速切换到带宽小的备份宽带上,确保外网连接不会中断。

本文将介绍如何使用思科路由器实现简单的主备宽带切换功能。

本文纯属个人学习经验分享。如有错误,请尽管提出,非常感谢!


二、浮动静态路由、IP SLA 简介

浮动静态路由指的是管理距离大于路由表中去往相同目的网段路由表项的管理距离的静态路由条目(静态路由默认的管理距离为 1)。

如果路由器存在多条去往相同目的网段的路由条目,路由器默认会把管理距离最小的路由条目加入到路由表中用作数据转发。

如果此时路由表中去往该网段的路由表项由于某些原因消失了,那么剩余去往相同目的网段管理距离最小的路由条目就会加入到路由表中用作数据转发。

由此可见,浮动静态路由可当作备份路由表项使用。

IP SLA 的全称是 IP 服务等级协议。它是思科 IOS 中的一个组件,通过发送各种协议的报文(称为探针),然后检测能否收到预期的回应,来检测网络的连通性以及质量。


三、网络拓扑图及说明

假设 R1 是某企业的出口路由器,R2 是主宽带线路,R3 是备份宽带线路。两条宽带线路均使用静态 IP 接入。

R2、R3 的环回接口上均配置了相同的 IP 地址,来模拟公网上的 IP 地址。

R1 连接了一个网段为 192.168.1.0/24 的企业内网,该内网需要通过 NAT 来连接到外网。PC1 用来模拟内网中的一台主机。

各路由器各接口的 IP 地址如上图所示。

下面通过配置来实现:内网日常使用主宽带线路连接外网;当主宽带线路出现故障时,能立即切换到备份宽带线路。

以下只讲 R1 的配置。


四、路由器的配置

4.1 配置接口

Router>enable
Router#configure terminal

Router(config)#interface ethernet 0/0
Router(config-if)#ip address 100.1.1.1 255.255.255.252
Router(config-if)#ip nat outside
Router(config-if)#no shutdown 
Router(config-if)#exit

Router(config)#interface ethernet 0/1
Router(config-if)#ip address 100.2.2.1 255.255.255.252
Router(config-if)#ip nat outside
Router(config-if)#no shutdown 
Router(config-if)#exit

Router(config)#interface ethernet 0/2
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#ip nat inside
Router(config-if)#no shutdown 
Router(config-if)#exit

4.2 配置浮动静态默认路由

% 配置一条管理距离为 254,出接口为备份宽带所在接口的静态默认路由
Router(config)#ip route 0.0.0.0 0.0.0.0 ethernet 0/1 100.2.2.2 254

4.3 配置 IP SLA 专用路由

% 配置一条目的地址为 IP SLA 检测的目标,出接口为主宽带所在接口的永久静态路由
Router(config)#ip route 114.114.114.114 255.255.255.255 ethernet 0/0 100.1.1.2 permanent

说明
• 建议选择一个所有 ISP 均可访问且企业中不使用的公共 DNS 服务器作为 IP SLA 的检测目标。上面以 114.114.114.114 为例。
• 添加 permanent 的目的是为了保持该路由条目在路由表中永久存在,不受出接口 Up/Down 的影响。确保可以持续监控主宽带的连接是否有问题。

4.4 配置 IP SLA

% 配置 1 号 SLA
Router(config)#ip sla 1

% 以主宽带接口的 IP 为源 IP 对 114.114.114.114 进行 ping 测试
Router(config-ip-sla)#icmp-echo 114.114.114.114 source-ip 100.1.1.1

% 门限值设为 0ms(门限值是用来检测链路质量的,在这里没有任何意义,但系统要求门限值小于下面的超时值,所以设置为 0ms)
Router(config-ip-sla-echo)#threshold 0

% 超时值设为 2500ms(如果一个 ping 包在 2.5s 内得不到回应,视为不可达)
Router(config-ip-sla-echo)#timeout 2500

% 每 5s 发送一次 ping 包(注意单位)
Router(config-ip-sla-echo)#frequency 5

% 退出 SLA 配置模式
Router(config-ip-sla-echo)#exit

% 立即启用 1 号 LSA,永久有效
Router(config)#ip sla schedule 1 start-time now life forever

4.5 配置跟踪器

% 配置 1 号跟踪器,检测 1 号 SLA 的可达性
Router(config)#track 1 ip sla 1 reachability 

% 退出跟踪器配置模式
Router(config-track)#exit

4.6 配置默认路由

% 当跟踪器检测到 1 号 SLA 可达时才在路由表中添加出接口为主宽带所在接口的静态默认路由
Router(config)#ip route 0.0.0.0 0.0.0.0 ethernet 0/0 100.1.1.2 track 1

4.7 配置 NAT

说明
• 这里的 NAT 需要配合 route-map 工具才能实现主备宽带切换的功能。
• route-map 工具简单来说就是为符合某些特征的数据包创建规则,然后在接口或其他地方应用这些规则。

% 在 1 号 ACL 中添加一条允许企业内网所在网段的条目
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255

% 配置主宽带的 route-map 规则
Router(config)#route-map Main_ISP

% 匹配源 IP 为企业内网所在网段
Router(config-route-map)#match ip address 1

% 匹配出接口为主宽带所在接口
Router(config-route-map)#match interface Ethernet0/0

% 退出 route-map 配置模式
Router(config-route-map)#exit

% 配置备份宽带的 route-map 规则
Router(config)#route-map Backup_ISP

% 匹配源 IP 为企业内网所在网段
Router(config-route-map)#match ip address 1

% 匹配出接口为备份宽带所在接口
Router(config-route-map)#match interface Ethernet0/1

% 退出 route-map 配置模式
Router(config-route-map)#exit

% 为主宽带创建 PAT 规则(当数据包符合主宽带的 route-map 规则时生效)
Router(config)#ip nat inside source route-map Main_ISP interface Ethernet0/0 overload

% 为备份宽带创建 PAT 规则(当数据包符合备份宽带的 route-map 规则时生效)
Router(config)#ip nat inside source route-map Backup_ISP interface Ethernet0/1 overload

五、验证结果

5.1 检查路由器的 IP SLA 状态

下面是 R2(主宽带)、R3(备份宽带)正常时 R1 的 IP SLA 跟踪器的状态:

Router#show track 1
Track 1
  IP SLA 1 reachability
  Reachability is Up  ← IP SLA 可达
    14 changes, last change 00:00:56
  Latest operation return code: Over threshold
  Latest RTT (millisecs) 1
  Tracked by:
    Static IP Routing 0

现在把 R2(主宽带)关机。等待 5s 左右,R1 的控制台上会出现日志信息提示 IP SLA 已经不可达:

*Jul  3 04:55:24.453: %TRACK-6-STATE: 1 ip sla 1 reachability Up -> Down

再检查下 R1 的 IP SLA 跟踪器的状态:

Router#show track 1
Track 1
  IP SLA 1 reachability
  Reachability is Down  ← IP SLA 不可达
    15 changes, last change 00:01:22
  Latest operation return code: Timeout
  Tracked by:
    Static IP Routing 0

接着重新开启 R2(主宽带)。等待 10s 左右,R1 的控制台上会出现日志信息提示 IP SLA 又变为可达:

*Jul  3 04:57:54.561: %TRACK-6-STATE: 1 ip sla 1 reachability Down -> Up

可以看出,路由器已经能感知到主宽带是否出现故障。

5.2 检查路由器的静态路由表

下面是 R2(主宽带)、R3(备份宽带)正常时 R1 的静态路由表:

Router#show ip route static 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 100.1.1.2 to network 0.0.0.0

S*    0.0.0.0/0 [1/0] via 100.1.1.2, Ethernet0/0  ← 下一跳为主宽带所在接口的静态路由生效
      114.0.0.0/32 is subnetted, 1 subnets
S        114.114.114.114 [1/0] via 100.1.1.2, Ethernet0/0

下面是 R2(主宽带)关机、R3(备份宽带)正常时 R1 的静态路由表:

Router#show ip route static 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 100.2.2.2 to network 0.0.0.0

S*    0.0.0.0/0 [254/0] via 100.2.2.2, Ethernet0/1  ← 下一跳为备份宽带所在接口的静态路由生效
      114.0.0.0/32 is subnetted, 1 subnets
S        114.114.114.114 [1/0] via 100.1.1.2, Ethernet0/0

可以看出,在主宽带正常时,下一跳为主宽带所在接口的静态路由生效,下一跳为备份宽带所在接口的静态路由没有生效;而在主宽带出现故障时,下一跳为主宽带所在接口的静态路由自动失效,下一跳为备份宽带所在接口的静态路由则自动生效。静态默认路由可以做到自动切换。

5.3 检查上网情况

现在先让 R2(主宽带)、R3(备份宽带)正常工作,然后在 PC1 上 trace 8.8.8.8,观察结果:

VPCS> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.1.1   1.032 ms  0.565 ms  0.812 ms
 2   *100.1.1.2   1.467 ms (ICMP type:3, code:3, Destination port unreachable)  *
        ↑ 走主宽带

说明
• 这里和下面的 trace 的结果会出现端口 ICMP 不可达的提示,具体原因不明,但不会影响到结果的观察。

接着让 PC1 不停地 ping 8.8.8.8,在 ping 的时候,关闭 R2(主宽带),观察 ping 状态:

VPCS> ping 8.8.8.8 -c 99999
84 bytes from 8.8.8.8 icmp_seq=1 ttl=254 time=1.814 ms
84 bytes from 8.8.8.8 icmp_seq=2 ttl=254 time=1.682 ms
84 bytes from 8.8.8.8 icmp_seq=3 ttl=254 time=0.973 ms
84 bytes from 8.8.8.8 icmp_seq=4 ttl=254 time=1.586 ms
84 bytes from 8.8.8.8 icmp_seq=5 ttl=254 time=0.627 ms
84 bytes from 8.8.8.8 icmp_seq=6 ttl=254 time=1.523 ms
8.8.8.8 icmp_seq=7 timeout
8.8.8.8 icmp_seq=8 timeout
8.8.8.8 icmp_seq=9 timeout
8.8.8.8 icmp_seq=10 timeout
8.8.8.8 icmp_seq=11 timeout
84 bytes from 8.8.8.8 icmp_seq=12 ttl=254 time=1.428 ms
84 bytes from 8.8.8.8 icmp_seq=13 ttl=254 time=1.438 ms
84 bytes from 8.8.8.8 icmp_seq=14 ttl=254 time=1.298 ms
84 bytes from 8.8.8.8 icmp_seq=15 ttl=254 time=1.259 ms
84 bytes from 8.8.8.8 icmp_seq=16 ttl=254 time=1.289 ms

停止 ping,再 trace 8.8.8.8,观察结果:

VPCS> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.1.1   0.396 ms  0.217 ms  0.212 ms
 2   *100.2.2.2   1.006 ms (ICMP type:3, code:3, Destination port unreachable)  *
         ↑ 走备份宽带

最后重新开启 R2(主宽带),再 trace 8.8.8.8,观察结果:

VPCS> trace 8.8.8.8
VPCS> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.1.1   1.041 ms  0.734 ms  0.905 ms
 2   *100.1.1.2   1.190 ms (ICMP type:3, code:3, Destination port unreachable)  *
          ↑ 走主宽带

可以看出,外网的连接已经可以做到主备宽带自动切换,而且速度非常快。已经达到预期目的!

发表评论

电子邮件地址不会被公开。