尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

双点双向路由重发布防环实战:Route-tag机制与配置解析

双点双向路由重发布防环实战:Route-tag机制与配置解析 很多网络工程师对路由重发布都不陌生但单点重发布和双点双向重发布完全是两个难度级别。单点重发布只要处理好看得见的配置就行双点双向一上各种奇奇怪怪的问题就全冒出来了路由表里明明只有一条路由流量却绕了一大圈配置看着完全对称环路却怎么都消不掉甚至在某次割接演练里我亲眼看到OSPF域路由和IS-IS域路由在两个ASBR之间反复横跳把路由表撑爆了大半。这篇文章想跟你掰扯清楚的就是双点双向路由重发布背后的隐性机关——为什么双点比单点更容易翻车、环路是怎么一步步养出来的、以及怎么用一套可落地的方案把这些问题彻底压住。无论你是刚接触重发布的概念新手还是已经在现场被双点双向折磨过的排障老手这篇文章应该都能给出一些可以直接拿去用的思路。1. 双点双向重发布网络里的双向闸门1.1 为什么需要双点双向先说清楚双点双向这四个字到底在说什么。双点指的是在两张路由协议的网络之间同时部署两台路由器通常叫ASBR来执行路由重发布双向指的是协议A的路由要进协议B协议B的路由也要进协议A两边流量都能穿越这个边界。在实际组网里双点双向最常见的动机就是高可用性。单点重发布的场景只放一台ASBR这台设备一旦宕机两张网络之间的互访就彻底断了这在核心业务场景里很难接受。所以很多设计都会在边界上放两台设备让路由有两个出口链路也好、设备也好单点故障时另一台还能接着扛。另一个常见场景是业务整合。比如某家企业收购了另一家公司两边原来各用各的内部网关协议现在需要打通内网。这时候往往不会只建一条链路而是希望两张网络能在多个点互通让流量有冗余路径。于是双点双向重发布就成了刚需。1.2 双点带来的复杂度到底在哪里如果说单点重发布是一扇单开的门那双点双向就是双开的闸门。门一多事情就复杂了关键是复杂度并不来自重发布这个动作本身而来自路由在两张协议之间来回穿梭时缺乏一个统一的关卡检查。举个例子。在单点重发布中OSPF域去往IS-IS域的路由只有一条注入路径——从唯一那台ASBR过去。所有流量到ASBR脚下再被送进另一张协议网络路径是收敛的不存在我发布出去的路由又被别人发布回来的可能。但双点就不同了。两个ASBR各自都在做重发布A设备把IS-IS路由引入OSPFB设备也可能在做同样的事。于是OSPF域里会出现两条来自不同ASBR的相同前缀外部路由更麻烦的是B设备把这条路由引进来之后心里并不知道这路由其实是从我们IS-IS域那边传过去的于是又可能把它重新送进IS-IS域——这就是路由回馈。整个过程像两个海关关口之间不断放行同一批货物A口把货物从甲城运到乙城贴了标签B口收到了却不知道这货物原本就是从甲城运来的于是又把它运回甲城。所以双点双向重发布真正的复杂度不是配置本身而是路由身份信息的丢失。路由协议只知道自己这个域里有什么不会天然告诉你这条路由的另一份拷贝正在隔壁域里待着。你得用额外的手段去标记、识别、拦回。这是理解后面所有坑的关键。2. 路由回馈环路是怎么被养出来的2.1 一次完整的回馈闭环路由回馈Route Feedback是双点双向重发布里最经典的故障机制也是所有环路的源头。让我用一个具体的例子拆一遍完整链路。假设现在有两张协议网络OSPF域域A核心区域和IS-IS域域B园区或汇聚区域。两台边界设备分别叫AR1和AR2它们同时跑OSPF和IS-IS并在两边做双向重发布。IS-IS域里有条业务网段X比如10.10.10.0/24这个网段不在OSPF域里。第一步为了OSPF域能访问XAR1执行IS-IS引入OSPF把X以外部路由Type-5 LSA/Type-2 External具体看OSPF网络类型的方式注入OSPF域。此时OSPF域里的路由器都学到了X下一跳指向AR1。第二步AR2同时也运行着OSPF它学到了这条外部路由X。按配置AR2也在做OSPF引入IS-IS于是它把X从OSPF域又重发布回IS-IS域。问题来了X本来就是IS-IS域的路由AR2这么一操作等于把IS-IS自家的孩子从后门又送回了家还给它换了个OSPF身份。第三步AR1在IS-IS域里同时也会学到两份X的路径信息一份是IS-IS域内原始的那条经IS-IS内部LSP学习一份是AR2重发布回来的OSPF外部路由经OSPF重发布进IS-IS而来。如果AR1上没有做任何防环过滤它可能会把AR2送回来的这份路由再次引入OSPF域——因为AR1也在执行IS-IS引入OSPFAR2回灌的这份路由此时在AR1眼里就是一条来自IS-IS域的路由完全符合重发布条件。于是形成了一个无限循环X从IS-IS进入OSPF经AR1 → OSPF传播X带OSPF外部身份 → 从OSPF回到IS-IS经AR2 → IS-IS传播X带IS-IS重发布身份 → 从IS-IS再进OSPF经AR1 → ……每一轮循环X都会重新被两条协议网络的每台路由器计算一遍。如果路由协议的度量值在互转过程中持续累加或重置很快就会出现路由抖动严重时OSPF和IS-IS的路由表里都充斥着X的多个版本路由器择路时无所适从环路和黑洞就出现了。2.2 环路与黑洞比想象中更隐蔽的故障形态路由回馈带来的麻烦远比路由表里出现环路这句话听起来复杂。我实际遇到过几种比较隐蔽的形态路由黑洞X在OSPF域里被AR2引入IS-IS时IS-IS域的路由器可能选择AR2作为去往X的下一跳但如果AR2的OSPF侧那条X路径又是经由IS-IS域学习来的就可能形成我去你那里你去我这里的死结数据包在两个ASBR之间来回转发直到TTL耗尽。此时从用户的视角看X可以ping通因为控制层面路由存在但业务流量就是时通时断。OSPF外部路由数量爆炸X每完成一轮回馈循环OSPF域内就会多一份或更新一份Type-5 LSA。如果你有好几十个网段在做双向重发布每一轮更新都会触发整域SPF重算。现场最典型的症状是CPU升高、LSA序列号不停递增、路由表项在外面看着没什么但路由器内部在拼命干活。路由优先级翻转OSPF外部路由尤其当类型配置为外部Type 1E1默认优先级是150而IS-IS重发布路由的优先级华为设备上IS-IS路由优先级默认15要低得多数值越小越优。当同一条前缀在两个域里来回传导时不同域的路由器会用自己的优先级逻辑把错误的路径版本优选出来导致流量路径完全不符合设计预期。我在真实的割接中见过一个特别隐蔽的例子OSPF区域里有两台核心交换机IS-IS域里有一条数据中心网段双点双向做了两个月都没出事。直到某天晚上加了一条新的业务VLAN瞬时大量路由回馈叠加几台核心路由器的CPU直接打满OSPF邻居全飘了。复盘时看配置每一步都对唯一的解释就是回馈环路一直在临界状态潜伏量变终于引发质变。所以防路由回馈不能靠运气或临时观察必须在上线前就把机制堵死。3. 次优路径环路之外的第二大坑3.1 次优路径的成因和判断方法如果你以为把环路挡住了就万事大吉次优路径会马上教你做人。次优路径Suboptimal Routing指的是控制层面的路由是通的但实际流量走的不是物理上最短或最合理的路径。它的成因和双点拓扑强相关。在双点双向重发布下同一条前缀会被两个ASBR同时注入到另一侧协议域于是对端域的路由器面临两个外部下一跳的选择。问题在于路由协议的选路只依据本域的度量值而重发布过程中原始协议的真实代价在跨协议换算时是失真的。举个直白的例子。域AOSPF里的一台路由器想访问域BIS-IS里的网段X。AR1和AR2都能发布X经过AR1去X的路径真实物理距离很近但AR1在把X引入OSPF时给外部路由配的cost是50可能因为当时随便写了个默认值或引用了较高metric经过AR2去X的路径真实物理需要绕一大圈但AR2引入时cost是10。路由器一看AR2这条cost低就把流量全扔给AR2。结果所有去X的流量都在绕远路。这种路径浪费平时看不出来等带宽一紧张延迟和丢包立刻冒头。判断次优路径有一个实操办法在域内选取一台核心路由器看它去往目标网段的路由表项重点关注外部路由的下一跳和cost再在ASBR上用tracert或Ping的扩展参数验证实际转发路径。如果控制层面的下一跳和你实测的转发路径不一致或者转发路径明显比物理拓扑绕基本就是次优路径没跑了。3.2 为什么能通和通得好是两回事次优路径的麻烦还在于它很难被功能测试发现。你ping一下目标网段通了telnet一下端口也通了但RTT比别人高一大截、晚上流量高峰就拥塞。这种问题最考验排障功力因为它不是坏了只是绕了。造成路径失真的原因主要是两个第一个是外部路由类型的选择。在OSPF里引入外部路由可以选择External Type 1E1和External Type 2E2。E2默认cost固定为20只比较ASBR注入点之前的metricE1则会把ASBR内部路径的cost加进去。如果你在双点场景里使用E2路由器的选路可能并不反映到ASBR的真实路径代价。当作网络不太大时感觉不出来网络一大问题就明显了。第二个是重发布度量值的映射。IS-IS的metric和OSPF的cost不是一个量纲没有统一换算标准两个ASBR各写各的很容易产生偏差。更无奈的是很多设备默认的重发布metric值是固定的比如OSPF引入外部路由默认cost1或20IS-IS引入OSPF默认metric也有一套默认值不可能恰好反映真实冗余路径的代价。所以要治理次优路径核心思路是放弃让协议自己算改为人为给每台ASBR发布的路由定调子。久而久之你会发现双点双向重发布的终极形态就是一个精细的流量工程问题——既要防环又要引导路径两手都得抓。4. Route-tag防环方案设计核心思路与完整配置4.1 方案选型为什么选Route-tag而不是蛮力过滤防路由回馈的方案其实不止一种我先快速过一下常见选项方案核心思路优点缺点只允许特定路由重发布用ACL/前缀列表精确匹配允许的网段其余拒绝可控性最高网络扩容时要同步改配置运维成本高ASBR上禁止学习到对方重发布路由再转发直接deny对方重发布的路由进本地协议思路简单可能误伤正常路由且要维护双向deny规则改管理距离/优先级让直连或特定来源路由优先能缓解部分环路治标不治本回馈本身还在且影响所有路由选路Route-tag标记 双向过滤重发布入口打tag出口拒绝带特定tag的路由自动闭环、扩展性好、无需维护大量ACL需要理解tag传播机制配置略绕我最终在项目里选用的就是Route-tag方案。理由很实在它不需要在ACL里维护每一段网段只要在重发布的入口统一打标出口按tag拦截逻辑上是自闭环的后续加网段、加链路都不用改过滤规则。Route-tag的核心思想是给来自对端域、已被本地域标记过的路由做一个身份标记再在对端域的重发布入口处把这个标记当成禁止通行证。4.2 华为VRP完整配置实战下面直接给出一套可在华为VRP设备上运行的配置。拓扑还是沿用前面的OSPF IS-IS双ASBR模型AR1和AR2同时跑OSPF进程1区域0和IS-IS进程1Level-2。先定义Route-tag的语义这是整个方案最容易乱的地方Tag 100表示此路由来自OSPF域已被某ASBR引入IS-IS域。携带Tag 100的路由不应再被引回OSPF域。Tag 200表示此路由来自IS-IS域已被某ASBR引入OSPF域。携带Tag 200的路由不应再被引回IS-IS域。为什么是不应再被引回因为回馈的核心路径就是出了门又回头进门。只要在门口设卡拒绝携带对方域标签的路由进来回馈闭环就打不成了。AR1和AR2上的配置是完全对称的这里以AR1为例# 路由策略把OSPF路由引入IS-IS时方向 OSPF - ISIS route-policy OSPF2ISIS permit node 10 if-match tag 200 deny route-policy OSPF2ISIS permit node 20 apply tag 100 # 路由策略把IS-IS路由引入OSPF时方向 ISIS - OSPF route-policy ISIS2OSPF permit node 10 if-match tag 100 deny route-policy ISIS2OSPF permit node 20 apply tag 200然后分别挂到重发布命令上# OSPF引入IS-IS路由时调用OSPF2ISIS策略 ospf 1 import-route isis level-2 route-policy OSPF2ISIS # IS-IS引入OSPF路由时调用ISIS2OSPF策略 isis 1 import-route ospf 1 route-policy ISIS2OSPF我把这段逻辑用文字再走一遍避免有人被绕晕**OSPF域内原有的路由Tag默认0**到达AR2AR2执行OSPF→IS-IS重发布策略检查Tag 200不匹配进入node 20打上Tag 100引入IS-IS域。所以OSPF的路由进了IS-IS域后都带Tag 100。这条带Tag 100的路由在IS-IS域里传播到AR1。AR1执行IS-IS→OSPF重发布时策略检查Tag 100匹配deny。于是这条路由不会被AR1重新引回OSPF域——OSPF域路由的回馈被拦住了。反向同理IS-IS域内原有路由初始Tag为0到了AR1执行IS-IS→OSPF策略检查Tag 100不匹配打上Tag 200进入OSPF域。带Tag 200的路由到AR2AR2执行OSPF→IS-IS检查Tag 200匹配deny。IS-IS域路由的回馈也被拦住了。整个环路被完全截断。细心的人会注意到这个方案的关键假设有两个一是tag值在OSPF域和IS-IS域内能够传播二是两台ASBR上的策略保持一致。这两个假设在最新版VRP和主流厂商设备上都成立——OSPF的外部LSA字段天然携带TagIS-IS在VRP上也通过扩展TLV支持Tag传递。但如果你的网络里有老旧的第三方设备一定要先验证Tag能否跨越整个域完整传播否则会失效。如果用的是思科设备等价思路长这样Cisco IOS风格route-map OSPF2ISIS deny 10 match tag 200 route-map OSPF2ISIS permit 20 set tag 100 ! route-map ISIS2OSPF deny 10 match tag 100 route-map ISIS2OSPF permit 20 set tag 200 ! router ospf 1 redistribute isis level-2 route-map ISIS2OSPF ! router isis redistribute ospf 1 route-map OSPF2ISIS逻辑完全一致命令行风格不同而已。核心仍然是入口打标、出口拒标。4.3 次优路径的附加治理Metric联动用Route-tag解决回馈之后次优路径的问题还需要一套组合拳。我会在配置里再加一个动作给重发布进来的外部路由设置合理且可预期的metric值。设想这样一个优化场景希望从OSPF侧去往IS-IS域X网段的流量优先走AR1比如AR1的上联带宽更大那可以在AR1的ISIS2OSPF策略里给X设置较低的cost在AR2的ISIS2OSPF策略里给X设置较高的cost。这样OSPF域内的路由器会本能地选AR1做下一跳。华为VRP可以在route-policy里用apply cost直接控制OSPF外部路由的costroute-policy ISIS2OSPF permit node 20 if-match route-type isis apply tag 200 apply cost 10在AR2上把cost改成50路径引导的效果就出来了。但注意这个手段要谨慎使用而且必须配合持续的路径监控因为你调整的是发布侧的metric影响的是整个对端域的选路牵一发动全身。我的建议是先在实验室里用模拟流量把metric调教好再上线不要在现网里拍脑袋改。5. 验证与排错环路消除后如何证明真的很稳5.1 四类验证手段配置上完不代表可以下班走人。我在双点双向重发布的实施项目里总结了一套验证清单按顺序执行一遍基本能确认防环和路径引导都生效了。第一类路由表验证。在ASBR两侧分别执行display ip routing-table重点检查目标网段有没有出现多条来自不同协议的等价路径。在双点双向场景下同一条前缀如果出现OSPF外部 IS-IS共存大概率就是回馈没防住。正确设计下域内路由应该是单一来源另一份应被deny掉。第二类协议数据库验证。执行display ospf lsdb查看外部LSA条目重点看Tag字段。Tag应该只在重发布的注入边界可见并且从对端域回灌时应该被拒绝不会出现在不该出现的地方。同时执行display isis lsdb看IS-IS侧的Tag扩展字段。这一步能快速定位Tag到底传没传过来。第三类转发路径验证。在域内一台核心设备上用tracert去目标网段观察每一跳是否按设计走。如果设计上希望流量走AR1而tracert结果显示从AR2绕了就说明metric引导没生效。这里有个技巧tracert要多做几轮因为存在负载均衡时路径会轮换。第四类故障注入验证。这是最关键、也最少有人做的一步。手动把AR1的重发布或链路down掉观察流量是否无缝切换到AR2再把AR2 down掉反向观察。如果切换过程出现路由黑洞或持续抖动说明回馈还是没防干净或者次优路径的备用路径没有建立起来。故障注入演练应该放到割接窗口内做而不是等出故障再做。5.2 我踩过的三个排错坑这节写完这篇文章的核心干货基本就算齐了。最后把我实际操作中踩过的坑各提一句这些是文档里一般不写、但现场很容易撞上的。坑一Tag值冲突。网络里可能本来有人就在用某个Tag做别的事比如BGP策略、QoS标记或别的重发布。结果你的防环策略一看带Tag 100的路由把别人的合法路由也deny了。所以上线前先全网搜一下Tag使用情况把防环Tag定在没人用的区间比如30000以上的值。我用过Tag 100/200纯粹是方便说明生产环境建议用65000或更冷门的编号。坑二只在一边做了策略。双点双向的防环是对称逻辑必须两台ASBR都配上对应策略少一台就留了一个口子。最典型的误操作是改完AR1验证发现环路没了就以为大功告成过了几天某流量异常一查才发现AR2上根本还没配。养成习惯任何策略都要配一对、验一对。坑三重置重发布后忘了触发重新计算。在VRP上修改route-policy后OSPF或IS-IS的重发布不会自动重新运行需要手动执行reset ospf process/reset isis all或refresh让新策略生效。如果不做这一步会发现配置改了但没反应。我自己就因为这个在割接窗口里白折腾了二十分钟。同样验证前确认所有涉及设备的重发布都已刷新。最后再分享一个小经验双点双向重发布的改造我建议在上线前先在模拟环境或空闲的测试设备上完整跑一遍回馈循环——强制在设备上临时放行一条Tag路由亲眼看到它如何在两个域间来回弹跳再打开防环策略看它消失。这个过程花不了多大力气但对理解机制、避免上线翻车有奇效。等哪次你碰到别人双点双向反复出问题脑子里能迅速浮现出Tag 100/200这套模型排查也就快多了。
返回列表