首页 / 资讯中心 / 文章详情

浮动路由原理与配置实战:华为思科双链路冗余备份指南

浮动路由原理与配置实战:华为思科双链路冗余备份指南 ★ FEATURED ARTICLE
1. 从一个真实故障说起为什么需要浮动路由很多刚接触网络工程的朋友第一次听到“浮动路由”这个词脑子里浮现的可能是某种动态路由协议的花哨特性。其实不是。浮动路由本质上是一种静态路由的冗余备份机制它解决的是一个非常朴素的问题当主链路断了流量怎么自动切到备用链路上去。我最早接触这个概念是在一个双出口的小型网络里。主出口走一条光纤备用出口走一条宽带。两条链路平时都通但默认情况下路由器只会把流量往其中一条上送——具体走哪条取决于路由表里谁的开销值更小。问题来了如果主链路悄无声息地断了路由表不会自动感知流量依然往那个已经不通的接口上怼结果就是整个网络对外失联。用户打电话过来第一句话永远是“网是不是坏了”。浮动路由就是用来兜这个底的。它的核心思路非常直接给备用路由设置一个更大的优先级数值在华为体系里叫Preference在思科体系里叫Administrative Distance让它在正常情况下“浮”在主路由上面不参与转发。只有当主路由因为链路故障从路由表里消失时备用路由才会“沉”下来接管转发任务。这个机制听起来简单但实际配置的时候有几个地方特别容易翻车。比如优先级数值设成多少合适、两条链路的接口类型不同会不会影响切换、路由表里看到的路由状态到底代表什么含义。这些问题光看文档是看不明白的得自己动手搭环境、断链路、抓包看现象才能真正吃透。这篇文章我就围绕浮动路由的原理和配置把我在实际项目中踩过的坑、验证过的参数、以及不同厂商设备上的配置差异一次性讲清楚。不管你是正在备考网络认证还是手头正好有个双链路冗余的需求看完应该都能直接上手。2. 浮动路由的底层逻辑优先级数值到底在比什么2.1 路由表里的“隐形排序规则”要理解浮动路由首先得搞清楚路由器是怎么选路的。路由器收到一个数据包会拿目的IP去查路由表。如果有多条路由都能到达同一个目的网段路由器不会随便选一条而是按照一套严格的优先级规则来排序。这套规则的核心就是优先级数值越小越优先。在华为设备上这个值叫Preference范围是0到255。直连路由的默认Preference是0静态路由是60OSPF内部路由是10RIP是100。数值越小路由越“优”越容易被放进路由表参与转发。浮动路由的巧妙之处就在于它利用了这个排序规则。我们手动给备用静态路由指定一个比主路由更大的Preference值比如主路由用默认的60备用路由设成100。这样在正常情况下主路由的Preference更小路由器会把它放进路由表备用路由则被“压制”住不会出现在路由表里。这里有一个关键点需要特别注意备用路由不是被删除了而是没有被激活。它依然存在于配置文件中只是路由表里看不到。一旦主路由因为接口down、链路故障或者下一跳不可达而从路由表里消失路由器会重新计算发现备用路由的Preference虽然大但现在是唯一可用的于是把它激活流量自动切换过去。这个过程是自动的不需要人工干预切换时间通常在秒级以内。对于大多数中小型网络来说这个切换速度完全可以接受。2.2 为什么不用动态路由协议做冗余看到这里可能有朋友会问既然要冗余为什么不直接跑OSPF或者BGP动态路由协议不是能自动收敛吗这个问题问得好。动态路由协议确实能实现冗余和自动切换但它有几个前提条件第一两条链路都要跑协议意味着路由器要消耗CPU和内存去维护邻居关系、计算路由第二动态协议的收敛需要时间OSPF从邻居超时到重新计算路由通常需要几十秒第三配置复杂度高一旦出问题排查起来更麻烦。浮动路由的优势在于轻量。它不需要额外的协议开销不占用额外的资源配置就几行命令排查也简单——看路由表就行。对于只有两条出口链路、网络拓扑不复杂的小型网络浮动路由是性价比最高的方案。当然如果网络规模大、链路多、对收敛时间要求高那还是得上动态协议。浮动路由更适合作为补充或者用在那些“平时主链路跑得好好的备用链路只是以防万一”的场景。2.3 主备路由的Preference差值怎么定Preference设成多少这个没有标准答案但有一个原则备用路由的Preference必须大于主路由且差值要足够明显。我见过有人把主路由设成60备用路由设成61觉得差1就够了。理论上确实够因为路由器选路时只要有一条更优的就不会选另一条。但实际环境中如果网络里还有其他路由来源比如跑了一个OSPFOSPF内部路由的Preference是10那你的主静态路由60和备用静态路由61在OSPF面前都是“劣质路由”根本进不了路由表。这时候浮动路由就失效了。所以我的建议是先搞清楚网络里所有可能的路由来源及其默认Preference然后让主备路由的Preference都小于那些动态协议的值同时备用路由比主路由大20到40。比如主路由用60备用路由用80或100。这样既保证了主备之间的明确优先级又不会因为差值太小而被其他路由“插队”。另外如果两条链路的质量差异很大比如主链路是专线、备用链路是普通宽带那备用路由的Preference可以设得更大一些比如150甚至200。这样即使主链路只是短暂抖动路由器也不会轻易切换到备用链路上避免流量在质量差的链路上跑。3. 华为设备上的浮动路由配置实操3.1 基础拓扑搭建与接口配置先说一下我这次演示用的拓扑。两台路由器R1和R2R1模拟企业出口R2模拟运营商。R1有两个出口接口G0/0/0接主链路G0/0/1接备用链路。R2上对应两个接口分别和R1的两个出口对接。R1内网侧还有一个G0/0/2接口接一台模拟内网PC的Loopback接口。接口IP规划如下设备接口IP地址说明R1G0/0/010.1.1.1/30主链路出口R1G0/0/110.1.2.1/30备用链路出口R1G0/0/2192.168.1.1/24内网网关R2G0/0/010.1.1.2/30主链路对端R2G0/0/110.1.2.2/30备用链路对端R2Loopback08.8.8.8/32模拟外网目标配置接口IP的命令很基础这里快速过一下# R1接口配置 system-view sysname R1 interface GigabitEthernet0/0/0 ip address 10.1.1.1 30 interface GigabitEthernet0/0/1 ip address 10.1.2.1 30 interface GigabitEthernet0/0/2 ip address 192.168.1.1 24 quit # R2接口配置 system-view sysname R2 interface GigabitEthernet0/0/0 ip address 10.1.1.2 30 interface GigabitEthernet0/0/1 ip address 10.1.2.2 30 interface Loopback0 ip address 8.8.8.8 32 quit接口配完之后先别急着配路由。用display ip interface brief确认一下接口状态确保物理层和协议层都是UP的。我遇到过好几次接口看着配了IP但协议状态是DOWN结果路由怎么配都不生效最后发现是运营商那边端口没开。3.2 主备静态路由的完整配置命令接口确认没问题之后开始配路由。R1需要一条默认路由指向R2让内网流量能出去。主路由走G0/0/0的下一跳10.1.1.2备用路由走G0/0/1的下一跳10.1.2.2。# 主路由使用默认Preference 60 ip route-static 0.0.0.0 0.0.0.0 10.1.1.2 # 备用路由手动指定Preference为100 ip route-static 0.0.0.0 0.0.0.0 10.1.2.2 preference 100就这两行。第一行不写preference默认就是60。第二行显式指定preference 100。配置完之后用display ip routing-table查看路由表。正常情况下你只会看到一条默认路由下一跳是10.1.1.2Preference是60。备用路由那条不会显示因为它被压制了。这时候如果你用display ip routing-table 0.0.0.0查看详细信息可能会看到备用路由以“Inactive”状态存在但不会参与转发。这里有一个细节华为设备上静态路由的Preference默认值是60但如果你在配置时写了preference参数它会覆盖默认值。所以备用路由的Preference是100而不是60100。这个理解很重要别搞混了。3.3 验证切换效果断掉主链路看现象配置配好了不验证等于没配。验证的方法很简单把主链路的接口shutdown掉模拟链路故障然后看路由表怎么变。# 在R1上关闭主链路接口 interface GigabitEthernet0/0/0 shutdown关掉之后等几秒钟再查路由表display ip routing-table这时候你应该能看到默认路由的下一跳变成了10.1.2.2Preference是100。说明备用路由已经激活流量自动切换到了备用链路。再验证一下连通性从R1 ping R2的Loopback0地址8.8.8.8ping -a 192.168.1.1 8.8.8.8如果通了说明切换成功。然后恢复主链路接口interface GigabitEthernet0/0/0 undo shutdown等几秒再查路由表默认路由应该又回到了10.1.1.2Preference 60。备用路由重新被压制。这个“断掉-恢复”的过程建议至少做三遍。第一遍看现象第二遍看切换时间第三遍看恢复后路由表是否干净。我遇到过一种情况主链路恢复后备用路由的条目还残留在路由表里虽然不参与转发但看着很别扭。后来发现是设备的路由老化机制问题重启一下或者等几分钟就自动清了。3.4 常见配置错误与排查思路浮动路由配置本身不复杂但有几个坑特别常见。第一个坑Preference值设反了。有人把主路由的Preference设成100备用路由设成60结果备用路由变成了主路由主路由反而被压制。这种错误通常是因为对“数值越小越优先”的规则记反了。排查方法很简单看路由表里哪条路由是Active的如果和你预期的主链路不一致先检查Preference值。第二个坑下一跳不可达但接口没down。这种情况比接口down更隐蔽。比如主链路的物理接口是UP的但对端设备挂了或者中间传输设备故障导致下一跳IP不可达。这时候路由器不会自动切换到备用路由因为接口状态还是UP的路由表里主路由依然有效。解决办法是配置BFD联动或者NQA探测让路由器能感知到下一跳的真实可达性。这个后面会详细讲。第三个坑两条链路的接口类型不同导致切换失败。比如主链路是以太网接口备用链路是串口。以太网接口down的时候路由会立即失效但串口down的时候如果配置了keepalive可能需要几秒钟才能感知到。这会导致切换时间不一致。解决办法是统一接口类型或者调整keepalive参数。第四个坑路由表里看不到备用路由以为配置没生效。前面说过备用路由在正常情况下不会出现在路由表的主视图里。如果你想确认它是否存在可以用display ip routing-table protocol static查看静态路由的详细信息或者用display current-configuration | include ip route-static看配置文件。只要配置文件里有就说明配上了。4. 思科设备上的差异与BFD联动进阶4.1 思科与华为的术语对照如果你平时用的是思科设备配置逻辑是一样的但命令和术语有差异。思科管优先级叫Administrative Distance简称AD。默认值方面直连路由是0静态路由是1EIGRP内部是90OSPF是110RIP是120。浮动路由在思科上的配置是这样的# 主路由默认AD为1 ip route 0.0.0.0 0.0.0.0 10.1.1.2 # 备用路由手动指定AD为100 ip route 0.0.0.0 0.0.0.0 10.1.2.2 100注意思科的命令格式AD值直接写在下一跳后面不需要像华为那样写preference关键字。而且思科的静态路由默认AD是1不是60。所以如果你在思科设备上把备用路由的AD设成60它依然比主路由的1大浮动效果是成立的。思科上查看路由表的命令是show ip route查看静态路由详细信息的命令是show ip route static。验证切换的方法和华为一样shutdown主接口看路由表变化。4.2 BFD联动让切换更快更准前面提到如果主链路的接口是UP的但下一跳实际不可达浮动路由不会自动切换。这个问题在实际网络中非常常见尤其是链路中间经过传输设备的时候。解决办法是配置BFDBidirectional Forwarding Detection双向转发检测。BFD是一种轻量级的链路检测协议它能在毫秒级内检测到链路故障并通知路由协议或静态路由做出反应。华为设备上配置BFD联动静态路由的步骤如下# 全局开启BFD bfd quit # 创建BFD会话检测主链路下一跳 bfd R1-to-R2 bind peer-ip 10.1.1.2 interface GigabitEthernet0/0/0 discriminator local 1 discriminator remote 2 commit quit # 配置静态路由联动BFD ip route-static 0.0.0.0 0.0.0.0 10.1.1.2 track bfd-session R1-to-R2这样配置之后BFD会持续检测10.1.1.2的可达性。一旦检测到不可达BFD会话down联动静态路由立即失效备用路由瞬间激活。切换时间可以从秒级降到毫秒级。思科上的BFD配置类似但命令格式不同# 配置BFD模板 bfd-template single-hop BFD-TEMPLATE interval min-tx 100 min-rx 100 multiplier 3 exit # 配置静态路由联动BFD ip route 0.0.0.0 0.0.0.0 10.1.1.2 track 1 track 1 ip route 10.1.1.2 255.255.255.255 reachability思科的track机制更灵活可以跟踪IP可达性、接口状态、甚至路由是否存在。实际项目中我通常会用track来监控主链路的下一跳一旦不可达就触发切换。4.3 BFD参数调优与注意事项BFD的参数调优是个细致活。默认情况下BFD的发送和接收间隔是几百毫秒检测倍数是3。这意味着如果连续3个包没收到就判定链路故障。对于大多数场景这个默认值够用了。但如果你的网络对切换时间要求极高比如金融交易系统可以把间隔调到50毫秒倍数调到3。这样检测时间就是150毫秒。不过要注意间隔调得太小BFD报文本身会占用带宽而且对设备CPU有压力。我一般建议间隔不低于100毫秒除非有特殊需求。还有一个坑BFD会话的两端参数必须匹配。如果一端配了100毫秒另一端配了300毫秒会话可能起不来。配置的时候一定要两端对齐。另外BFD联动静态路由时如果BFD会话因为某种原因误报比如中间设备短暂拥塞会导致路由频繁切换影响业务稳定性。解决办法是配置抑制时间或者延迟切换让路由器在BFD down之后等几秒再切换避免抖动。华为设备上可以用route-policy或者nqa来实现类似效果。5. 浮动路由在实际项目中的典型应用场景5.1 双出口企业网络的主备冗余这是浮动路由最经典的应用场景。企业有两条出口链路一条主用一条备用。主链路通常是专线带宽大、延迟低、稳定性好备用链路可能是普通宽带带宽小、延迟高但便宜。平时流量走主链路主链路故障时自动切到备用链路。这种场景下浮动路由的配置要点是主路由的Preference用默认值备用路由的Preference设大一些比如100或150。同时建议配置BFD联动确保下一跳不可达时也能切换。如果两条链路的带宽差异很大还可以结合策略路由让特定流量走特定链路。比如视频会议流量走主链路普通上网流量走备用链路。这样既能保证关键业务的质量又能充分利用两条链路的带宽。5.2 分支机构与总部的备份链路分支机构通常有一条主链路连接到总部比如MPLS专线。为了冗余可能会再拉一条普通宽带作为备份。这种情况下浮动路由同样适用。但要注意一点分支机构的网络规模通常不大路由条目少浮动路由配置简单。但如果总部和分支机构之间跑了动态路由协议比如OSPF那浮动路由可能会和动态路由冲突。这时候需要仔细规划Preference值确保静态路由的优先级高于动态路由或者用路由策略来过滤。我的建议是如果分支机构只有一条主链路和一条备用链路且没有跑动态协议直接用浮动路由简单可靠。如果跑了动态协议优先考虑用动态协议自身的冗余机制浮动路由作为补充。5.3 数据中心双上行链路数据中心服务器通常有两个上行接口分别连接到两台接入交换机。服务器上可以配置浮动路由主路由走交换机A备用路由走交换机B。当交换机A故障时流量自动切到交换机B。这种场景下服务器操作系统的路由配置和路由器类似。Linux系统上可以用ip route命令配置浮动路由# 主路由metric为100 ip route add default via 10.1.1.1 metric 100 # 备用路由metric为200 ip route add default via 10.1.2.1 metric 200Linux的metric值越小越优先和路由器上的Preference逻辑一致。但Linux不会自动感知下一跳的可达性需要配合ip monitor或者arping脚本来实现故障检测。更优雅的方案是用keepalived或者quagga等工具它们支持BFD和动态路由协议。6. 那些文档里不会写的实操经验6.1 路由表里的“Active”和“Inactive”到底怎么看华为设备上display ip routing-table默认只显示Active的路由。如果你想看被压制的备用路由需要用display ip routing-table verbose或者display ip routing-table protocol static。在verbose视图里你会看到每条路由的状态字段。Active表示参与转发Inactive表示被压制。但要注意Inactive的路由不一定是因为Preference被压制也可能是下一跳不可达、接口down等原因。排查的时候要结合接口状态和下一跳可达性一起看。思科设备上show ip route默认也只显示最优路由。要看备用路由用show ip route static或者show ip route 0.0.0.0。思科会用*标记候选默认路由用标记备用路由。6.2 切换后业务中断的常见原因浮动路由切换本身是秒级甚至毫秒级的但业务中断时间可能远不止这个数。原因通常有几个第一NAT会话表没同步。如果出口做了NAT主链路切换后原有的NAT会话表可能还绑定在旧接口上导致回包找不到会话。解决办法是配置NAT会话表的老化时间或者在切换时清除NAT会话。第二防火墙会话表没同步。如果主备链路之间隔了防火墙防火墙的状态检测机制可能导致回包被丢弃。解决办法是配置防火墙的会话同步或者用双机热备。第三DNS缓存问题。如果内网用户通过域名访问外网切换后DNS解析可能还指向旧的IP。这个问题通常等DNS缓存过期后自动恢复但用户体验不好。解决办法是配置多个DNS服务器或者用DNS代理。6.3 浮动路由与策略路由的优先级关系这是一个容易被忽略的点。策略路由Policy-Based RoutingPBR的优先级高于普通路由。如果同时配置了策略路由和浮动路由策略路由会优先生效。这意味着如果你用策略路由指定了某些流量走主链路那即使主链路故障、浮动路由切换到了备用链路这些流量依然会按照策略路由的指示走主链路——但主链路已经断了结果就是流量被丢弃。解决办法是策略路由也要配置冗余或者用track联动让策略路由能感知链路故障。华为设备上可以用policy-based-route配合track来实现。思科上可以用route-map配合track。6.4 多厂商设备混搭时的注意事项实际项目中网络设备往往不是单一厂商的。华为、思科、华三、锐捷混搭很常见。不同厂商对Preference的默认值定义不同配置命令也不同。比如华为静态路由默认Preference是60思科是1华三是60锐捷是1。如果主路由是华为设备备用路由是思科设备那Preference值需要仔细规划确保两边对“主”和“备”的理解一致。我的经验是在多厂商环境中不要依赖默认值全部手动指定Preference。主路由统一设成60备用路由统一设成100。这样不管什么厂商的设备逻辑都是一致的。另外BFD在不同厂商设备之间的兼容性也需要验证。有些厂商的BFD实现有细微差异可能导致会话起不来。配置之前最好先做互通测试。7. 从配置到验证一套完整的检查清单7.1 配置前的准备工作在动手配浮动路由之前先把这几件事做了确认两条链路的物理连接正常接口状态UP确认接口IP配置正确能ping通对端直连地址确认网络里没有其他动态路由协议干扰或者已经规划好Preference值确认业务对切换时间的要求决定是否上BFD确认NAT、防火墙等中间设备的会话同步机制这些准备工作看起来琐碎但能省掉后面80%的排查时间。我见过太多人一上来就配路由结果配完了不通回头查半天发现是接口没UP。7.2 配置后的验证步骤配置完成后按这个顺序验证查路由表确认主路由Active备用路由Inactive断主链路shutdown主接口查路由表确认备用路由Active测连通性从内网ping外网目标确认业务不中断恢复主链路undo shutdown查路由表确认主路由重新Active再测连通性确认恢复后业务正常查BFD会话如果配了BFD用display bfd session all确认会话状态这个流程至少走三遍确保切换和恢复都稳定。7.3 长期运行中的监控要点浮动路由配好之后不是就没事了。长期运行中需要监控几个关键指标路由表变化频率如果主备路由频繁切换说明链路不稳定需要排查BFD会话状态BFD会话频繁down/up说明链路质量差接口错误计数接口的CRC错误、丢包计数持续增长说明物理链路有问题NAT会话表数量会话表满了会导致新连接建立失败这些监控可以通过SNMP、Syslog或者网管软件来实现。我通常会在核心设备上配置SNMP Trap一旦路由表变化或者BFD会话down立即发告警。8. 写在最后一些个人体会浮动路由这个技术原理不复杂配置也简单但真正用好靠的是对细节的把控。我见过太多人配了浮动路由结果真出故障的时候没切换或者切换了但业务没恢复。问题往往不在浮动路由本身而在周边的NAT、防火墙、DNS这些环节。我的建议是配完浮动路由一定要做破坏性测试。别光看路由表切换了就完事要真正从用户的角度去验证业务是否连续。ping通不代表业务通TCP连接能不能建立、HTTP请求能不能返回、视频会不会卡顿这些才是真正的验证标准。另外浮动路由虽然好用但它不是万能的。如果网络规模大、链路多、对收敛时间要求高还是得上动态路由协议。浮动路由更适合作为补充或者用在那些拓扑简单、预算有限、对切换时间要求不极端的场景。最后分享一个小技巧如果你不确定备用路由的Preference设多少合适可以先设一个比较大的值比如200然后观察一段时间。如果发现切换太频繁说明主链路不稳定需要先解决主链路的问题如果发现切换后业务质量明显下降说明备用链路的带宽或延迟不够需要考虑升级备用链路。Preference值只是一个数字背后反映的是你对两条链路质量的判断和取舍。
阅读完成 · 觉得有帮助?
咨询建站