出口线路断了静态路由还在硬撑?华为交换机NQA联动探测自动撤路由
静态路由有个天生的死穴:它自己没有检测机制。出口线路明明已经断了,路由表里那条静态路由还稳稳挂着,报文继续一车一车往死路上送,业务一断就是半小时起步,直到管理员手工登上设备把路由撤掉。网络简单或者跑不了动态路由协议的场景,静态路由往往是唯一选择,这个死穴就绕不开。
给静态路由配"心跳探测"有两条路。BFD 联动是快,但它要求链路两端的设备都支持 BFD 功能——出口对端是运营商的设备或者一台老路由器,你根本管不着它配不配 BFD。这种情况下用 NQA(Network Quality Analysis)联动:NQA 是一种实时的网络性能探测和统计技术,用 ICMP 探测对端地址,当测试例检测到链路故障后,会把与其绑定的静态路由从 IP 路由表删除,业务流量自动切换到没有故障的那条路由。对端什么都不用改,会回 ping 就行。贵州诚鑫致达科技在做企业网出口改造时,双出口场景基本都按这个思路给静态路由上保险。
配置步骤
官方示例的组网:某公司 SwitchA 上配两条静态缺省路由,分别指向出口路由器 RouterA 和 RouterB,实现负载分担。目标是为这两条缺省路由部署检测机制,链路出故障时及时切换,避免业务较长时间中断。
官方给的配置思路是一条直线:先创建 VLAN 并配置各接口所属 VLAN、配好各 VLANIF 接口的 IP 地址,实现相邻设备网络互通;再创建 ICMP 类型的 NQA 测试例用来检测链路故障——测试例建在客户端 SwitchA 上,被测试对象是 RouterA 和 RouterB,各建一个;最后配置静态缺省路由并绑定 NQA 测试例。两条缺省路由等价负载分担,哪条链路的探测失败就只撤哪条路由,剩下那条自动接住全部流量。
第一步,把基础互通配好。SwitchA 上建 VLAN100、200、300,GE1/0/1 走 VLAN100 连 RouterA,GE1/0/2 走 VLAN200 连 RouterB,GE1/0/3 走 VLAN300 连内网,再配上三个 VLANIF 地址:
[SwitchA] vlan batch 100 200 300
[SwitchA] interface vlanif 100
[SwitchA-Vlanif100] ip address 10.1.10.2 24
[SwitchA-Vlanif100] quit
[SwitchA] interface vlanif 200
[SwitchA-Vlanif200] ip address 10.1.20.2 24
[SwitchA-Vlanif200] quit
[SwitchA] interface vlanif 300
[SwitchA-Vlanif300] ip address 10.1.30.2 24
[SwitchA-Vlanif300] quit
第二步,配 NQA 测试例。建两个 ICMP 类型的测试例:test1 探测 RouterA 的 10.1.10.1,test2 探测 RouterB 的 10.1.20.1。每 11 秒发起一轮测试(frequency 11),每轮发 2 个探测报文(probe-count 2),报文间隔 5 秒(interval seconds 5),超时时间 4 秒(timeout 4)——探测报文发出后 4 秒收不到回应就算失败,start now 立即启动:
[SwitchA] nqa test-instance user test1
[SwitchA-nqa-user-test1] test-type icmp
[SwitchA-nqa-user-test1] destination-address ipv4 10.1.10.1
[SwitchA-nqa-user-test1] frequency 11
[SwitchA-nqa-user-test1] probe-count 2
[SwitchA-nqa-user-test1] interval seconds 5
[SwitchA-nqa-user-test1] timeout 4
[SwitchA-nqa-user-test1] start now
[SwitchA-nqa-user-test1] quit
[SwitchA] nqa test-instance user test2
[SwitchA-nqa-user-test2] test-type icmp
[SwitchA-nqa-user-test2] destination-address ipv4 10.1.20.1
[SwitchA-nqa-user-test2] frequency 11
[SwitchA-nqa-user-test2] probe-count 2
[SwitchA-nqa-user-test2] interval seconds 5
[SwitchA-nqa-user-test2] timeout 4
[SwitchA-nqa-user-test2] start now
[SwitchA-nqa-user-test2] quit
第三步,配置静态缺省路由并绑定 NQA 测试例。关键就在命令尾部的 track nqa——路由的存亡从此跟着探测结果走:
[SwitchA] ip route-static 0.0.0.0 0.0.0.0 10.1.10.1 track nqa user test1
[SwitchA] ip route-static 0.0.0.0 0.0.0.0 10.1.20.1 track nqa user test2
验证
先看绑定关系有没有生效,display current-configuration 里过滤 nqa 关键字:
[SwitchA] display current-configuration | include nqa
ip route-static 0.0.0.0 0.0.0.0 10.1.10.1 track nqa user test1
ip route-static 0.0.0.0 0.0.0.0 10.1.20.1 track nqa user test2
nqa test-instance user test1
nqa test-instance user test2
正常状态下看测试结果,Completion 一栏是 success,丢包率 0%:
[SwitchA] display nqa results test-instance user test1
NQA entry(user, test1) :testflag is active ,testtype is icmp
1 . Test 10 result The test is finished
Send operation times: 2 Receive response times: 2
Completion:success RTD OverThresholds number: 0
Destination ip address:10.1.10.1
Lost packet ratio: 0 %
此时路由表里两条静态缺省路由并存,分别指向 RouterA 和 RouterB。
真正的考验在故障时刻。把 SwitchA 的 GE1/0/2 接口关掉模拟链路故障:
[SwitchA] interface gigabitethernet 1/0/2
[SwitchA-GigabitEthernet1/0/2] shutdown
[SwitchA-GigabitEthernet1/0/2] quit
再看 test2 的结果,Completion 变成 failed,Operation timeout 出现 2 次,丢包率 100%:
[SwitchA] display nqa results test-instance user test2
NQA entry(user, test2) :testflag is active ,testtype is icmp
1 . Test 13 result The test is finished
Send operation times: 2 Receive response times: 0
Completion:failed RTD OverThresholds number: 0
Destination ip address:10.1.20.1
Lost packet ratio: 100 %
此时再查路由表,指向 RouterB 的那条缺省路由已经被自动撤掉,只剩指向 RouterA 的一条,流量切换全程不需要人碰设备:
[SwitchA] display ip routing-table
Route Flags: R - relay, D - download to fib, T - to vpn-instance
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 7 Routes : 7
Destination/Mask Proto Pre Cost Flags NextHop Interface
0.0.0.0/0 Static 60 0 RD 10.1.10.1 Vlanif100
10.1.10.0/24 Direct 0 0 D 10.1.10.2 Vlanif100
两个前置坑提前说:一是交换机的 NQA 特性需要 License 支持,没有 License 时命令能敲进去但功能不实现,上线前先确认授权;二是该场景下互联接口的 STP 要处于未使能状态,环形网络里用 VLANIF 构建三层网络,STP 阻塞端口会导致三层业务跑不起来。