
简介面向网络工程师的华为路由器三层路由防环专题文档围绕BGP与OSPF协议互引场景展开。资料涵盖互引路由概述、典型组网、环路产生原理、错误配置示例、防环建议、适用产品和版本等模块以DeviceA~DeviceF典型组网为例分阶段还原路由环路产生过程重点剖析MED值影响路由优选进而形成稳定环路的机理同时给出路由策略、调整MED、利用AS_PATH等防环配置建议。内容属于中高级网络技术专题适合负责跨域路由设计与运维的工程师对照学习。压缩包内为1个PDF文件大小211KB排版结构与章节目录完整便于按需检索。该资料已有2129人浏览学习对理解协议间路由互引的防环机制具有直接参考价值。1. 三层路由防环为什么偏偏在BGP与OSPF互引处翻车让某台华为AR路由器同时跑OSPF和BGP再把两个协议的路由互相引一引这是很多园区网和城域网里真实存在的动作但很少有人提前把防环想清楚。做BGP实验、OSPF实验的时候单协议域内防环是教科书上有标准答案的OSPF靠SPF树和区域结构BGP靠AS-Path和IBGP水平分割。可一旦出现协议互引原本清晰的防线就出现了一段真空——OSPF学到的外部路由可以被重新通告进BGPBGP收到的域内路由也可能被OSPF回灌环路就在这段真空里重新长出来。这篇笔记要解决的就是华为AR路由器上这个具体场景两个协议互相引入时环是怎么形成的以及用什么手段能把它堵死。文章会按三层路由的视角拆开讲先看两个协议各自的防环机制在互引边界上哪里失效再给出一套最小可复现的配置最后把route-policy、Tag、Community这些真正能落地的防环工具用透并附上我在设备上踩过的几个高频坑。适合正在做华为路由器IGPBGP混合组网、或者在eNSP里做bgp实验时被环路问题卡住的人。2. BGP与OSPF各自怎么防环互引场景下防线交接的破绽在哪2.1 BGP的三道防环机制与IBGP水平分割的边界BGP的防环设计是围绕AS-Path展开的。EBGP路由在通告时会把自己的AS号追加到AS_Path最前面对端收到路由后做一条检查AS路径里如果已经包含自己的AS号就直接丢弃这条路由。这条规则保证了路由不会在AS之间打转。AS内部则是另一套逻辑IBGP水平分割规定从IBGP邻居学到的路由不能再通告给其他IBGP邻居同时BGP speaker不会把从EBGP学到的路由传给本AS内的其他IBGP邻居除非有路由反射器或联盟机制参与。这套机制单独看是没有问题的正常BGP域内路由要么从EBGP边界进来要么在AS内通过路由反射器分发不会形成环。问题在于当BGP路由被引入到OSPF之后它就脱离了BGP的控制面不再受AS-Path和水平分割约束。一个ASBR把外部BGP路由import进OSPF这条路由变成5类LSA在整个OSPF域内扩散此时域内另一台同时运行BGP和OSPF的设备完全可能通过OSPF学到这条路由并且因为它处于“外部路由”的身份还可以把它再次引入BGP。这一进一出AS-Path层面可能完全没有暴露问题因为引入时AS路径已经被重置了。另一个容易忽略的点是IBGP水平分割对“下一跳”的要求。BGP引入OSPF路由时如果OSPF路由的下一跳落在本设备上引入后BGP通告给邻居时默认带的是自身地址可如果经过路由迭代下一跳变成了OSPF域内的某个非直连地址IBGP邻居收到后还要在IGP里找这条路由。这个链路一旦断裂就会出现BGP路由间歇性丢失这是互引场景里最隐蔽的坑之一。所以BGP的防环体系是有边界的边界恰恰就在协议转换点上也就是ASBR执行import-route的那一刻。2.2 OSPF的区域化防环与LSA类型转换的隐藏风险OSPF防环依赖的是区域内SPF计算和区域间的LSA类型约束。骨干区域Area 0是必须贯穿的3类LSA只能在区域间传递路由摘要4类LSA标记ASBR位置5类LSA承载外部路由7类LSA用于NSSA区域。SPF算法本身就是无环的这也是OSPF域内基本看不到环路的根本原因。但注意OSPF外部路由的可信度是另一回事——5类LSA的外部路由在ASBR上是怎么来的OSPF本身不做任何校验。当外部BGP路由被引入OSPF后它在OSPF域内始终以5类LSA形式存在默认metric-type是Type 2全OSPF域都无条件信任这条路由。如果在远端某台设备上这条OSPF外部路由又反过来被引入BGPOSPF的SPF防环逻辑完全不会去追溯它的来源是BGP只会把它当作一个从ASBR泛洪出来的外部前缀。两个协议在这一点上是互相盲的BGP不知道OSPF里面的路由可能来自BGPOSPF也不关心引入进来的路由之前属于谁。ABR还存在一个隐藏风险如果外部路由经过ABR做区域间汇总或者NSSA区域里做了7转5LSA的Advertising Router会改变但Tag字段会保留。实战中经常有人在这样的拓扑里漏看tag导致防环策略失效。LSA类型转换本身不是环路的根源但转换会让排查变的很难——从TLV里看到的那台通告路由器已经不是最初的引入点了。2.3 互引场景为什么原有的防环机制集体失灵把前两节的逻辑叠加起来看问题就比较清楚了。BGP的AS-Path防环只管BGP域OSPF的SPF树只管OSPF域中间的边界是ASBR。ASBR做双向引入时BGP路由进入OSPF后“穿上了OSPF的外衣”OSPF路由进入BGP后“换上了BGP的马甲”两个域各自的防环机制都认不出对方域里那件衣服。环路形成的过程通常是这样的外部AS发布一条前缀ASBR1把它引入OSPF域OSPF路由在域内传播到ASBR2ASBR2又把它引入BGP通告给外部AS的其他邻居外部AS学到一条“经过本AS返回”的路径转发就绕回去了。还有一种同协议回灌的环路更隐蔽ASBR1把BGP路由引入OSPF后ASBR2把这条OSPF路由再引入BGP时BGP路径里带的是ASBR2所在AS的AS号外部AS收到后可能不认为有环因为AS路径看起来是合法的实际流量却会在两个ASBR之间反复横跳。这已经不是理论推演——在eNSP里搭双ASBR拓扑不做防环策略跑流量几分钟就能看到路由振荡和丢包。理解了这些机制上的破绽才能理解后面为什么用Tag和Community标记来做防环那是目前华为路由器上最可控、最不依赖拓扑假设的手段。3. 华为AR路由器上的互引配置最小可复现拓扑与命令细节3.1 先定拓扑和路由目标谁引入谁方向要劈开配置互引之前第一件事不是敲命令而是把拓扑和路由方向画清楚。我一般会强制自己回答三个问题这台ASBR上有几个协议实例哪些路由需要从BGP进OSPF哪些路由需要从OSPF进BGP以及最重要的是这两个方向是互相独立的吗。绝大多数翻车现场都是因为把双向引入写成了一个环路自己还没意识到。下面是一个能复现问题的最小拓扑。R1属于AS 200运行BGP与OSPFR2是纯OSPF域内设备R3属于外部AS 300通过EBGP与R1互联。OSPF域运行在R1和R2之间。为了把问题说透我们同时配置两个方向的引入R1把从R3学到的BGP路由引入OSPF同时把OSPF域内路由引入BGP通告给R3。R3 (AS 300) ---- EBGP ---- R1 (AS 200, ASBR) ---- OSPF Area 0 ---- R2这是典型的企业网出口形态OSPF管内部BGP管外部ASBR做协议转换。在这个拓扑上不做防环R2学到OSPF外部路由后会以为外部路由来自R1如果R2也配了BGP或者存在第二条链路环路就出现了。先把拓扑跑通再谈防环才有意义。3.2 BGP引入OSPF的import-route配置与参数含义华为AR路由器上BGP视图里引入OSPF路由是最常见的动作。进入BGP进程视图用import-route ospf 1就能把OSPF进程1的路由引入BGP。但生产配置不能只写这一条至少要配上route-policy做过滤和一个明确的cost否则OSPF所有路由包括外部路由都会被搬进BGP这样的通告结果基本是不可控的。对应配置如下bgp 200 router-id 1.1.1.1 peer 10.0.13.3 as-number 300 # import-route ospf 1 route-policy rp-ospf-to-bgp这里router-id 1.1.1.1是手工指定的BGP和OSPF务必要一致这点后面避坑章节会细说。import-route ospf 1不带参数时引入的路由默认会带上OSPF路由的metric作为BGP的MED下一跳默认是本设备。这个行为很多时候不是我们想要的因为OSPF的cost与BGP选路语义并不对等。更常见的做法是配合route-policy修改MED或community。对应配置可以只写过滤但不指定cost也行route-policy rp-ospf-to-bgp permit node 10 if-match tag 200 apply med 100本文还有配套的精品资源点击获取