首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
华为路由器BGP与OSPF互引导致路由环路及防环配置详解
📅 2026/9/17 14:53:30
✍️ 爱科研究院
👁 阅读 3,247
简介华为路由器三层路由防环专题03围绕BGP与OSPF协议互引路由场景展开适合网络工程师、IT运维人员以及备考华为认证的读者学习。资源为单份PDF文档大小约211KB内容紧凑包含典型组网、环路产生原理、错误配置示例及防环建议配置等完整章节。目前已有2127人学习下载。专题以DeviceA发布的10.10.10.10/32路由为例详细拆解了路由如何在BGP与OSPF之间反复传递、因MED值和路由优先级差异逐步形成稳定环路的过程并给出利用route-policy控制路由引入导出、调整MED、借助AS_PATH防环等实用配置思路同时说明了适用产品与版本。对于需要规避路由互引风险、提升网络稳定性的读者这份资料能提供清晰的排错参考与配置指导。1. 一个网段在两台路由器的路由表里互相指往对方才是这组互引命令真正该防的环华为路由器三层路由防环专题里BGP 和 OSPF 互引是最容易“配置成功但路由走错”的一类。很多网络刚接起来时 ping 通等出现双出口或者备份链路同一个网段就可能同时出现在 OSPF 外部路由和 BGP 表里下一跳互相指向对方流量在两条链路上反复弹跳。本文用华为 AR 路由器做最小场景复现先说明为什么 BGP 的 AS_PATH 和 OSPF 的 Router-ID 都拦不住这种回灌再给出 route-policy、tag、preference 的组合防环配置最后落到可以照着敲的验证命令。2. 互引为什么能绕过 BGP 和 OSPF 自带的防环机制2.1 先分清“路由更新防环”和“转发平面成环”BGP 的 EBGP 防环靠 AS_PATH收到一条 AS_PATH 里包含自己 AS 号的路由就丢弃。OSPF 在域内靠 LSA 的 Advertising Router 和 Router-ID 做自始发 LSA 抑制路由器收到自己产生的 LSA 不参与 SPF 计算。这两个机制都属于“更新平面防环”处理的是“路由协议自身会不会把一条路由无限转播”。互引绕过的是这一层。当路由从 BGP 被import-route进 OSPF再被另一条import-route从 OSPF 引回 BGP 时路由的身份变了OSPF 侧看到的是一个新 Type-5 LSABGP 侧看到的是一个本地始发路由。原始 AS_PATH 不在了原始 OSPF Router-ID 也不一定还在。于是协议说自己没收到“自己的路由”可转发平面已经出现两个边界路由器互相指下一跳的局面。2.2 华为 AR 上 BGP 与 OSPF 的优先级差异华为 VRP 默认路由优先级不是思科习惯里的“EBGP 20、IBGP 200”。默认配置下BGP 路由优先级是 255OSPF 内部路由是 10OSPF ASE/NSSA 外部路由是 150。也就是说同一条前缀如果既要走 OSPF 外部路由又要走 BGPOSPF ASE 会把 BGP 从活跃路由里挤掉。这一点在互引场景里非常关键很多人查了半天发现“明明 BGP 表里有路由但display ip routing-table里下一跳是 OSPF 方向”原因就在这里。路由来源华为 VRP 默认优先级说明Direct0直连路由OSPF 内部路由10区域内和区域间路由Static60静态路由默认优先级OSPF ASE/NSSA150OSPF 引入的外部路由BGP255华为 VRP 默认 EBGP/IBGP 相同2.3 单点互引的回灌路径用一个常见场景说明R1 同时跑 OSPF 和 EBGPR1 把上游 BGP 学到的 172.16.0.0/16 引入 OSPF又配置了import-route ospf 1把 OSPF 路由引入 BGP。这时 BGP 表里多了一条“从 OSPF 来”的 172.16.0.0/16。R1 把这条路由发给 EBGP 对端时AS_PATH 被重置成自己的 AS 号对端看到一条比自己上游路径更短的新路由就可能把下一跳切回 R1。问题不在“收到路由的设备不懂防环”而在 R1 自己把一条外部路由重新“生”了一次生出来的路由没有任何原始路径信息。只要 R1 原 BGP 表的下一跳仍然是上游而上游的下一跳已经变成 R1流量就在 R1 和上游之间来回打转。TTL 会减到 1 然后被丢但从路由表看两边都觉得自己有条可用路由。3. 华为路由器上复现 BGP/OSPF 互引配置、命令与现象确认3.1 跨域对接的三个步骤先别省复现用的拓扑不搞复杂R1 是 AS 100 边界R3 是 AS 200 边界R1 和 R2 之间跑 OSPF Area 0。R1 的 EBGP 对端 R3 从上游 R4 学到 172.16.0.0/16。R1 只做两件事把 BGP 引入 OSPF再把 OSPF 引入 BGP。R2 在这里只是让 OSPF 表里有真实内部路由方便观察。interface GigabitEthernet0/0/0 ip address 10.0.12.1 255.255.255.252 interface GigabitEthernet0/0/1 ip address 10.0.13.1 255.255.255.252 ospf 1 router-id 1.1.1.1 area 0.0.0.0 network 10.0.12.0 0.0.0.3 bgp 100 router-id 1.1.1.1 peer 10.0.13.2 as-number 200 ipv4-family unicast peer 10.0.13.2 enable跨域对接的三个步骤在这里一个都不能省第一步看 BGP 邻居是否 Established第二步确认双方要发布的网段已经存在路由表里第三步确认通告出去的 AS_PATH 和预期一致。第三步经常被忽略互引场景的环路恰恰是在 AS_PATH 被重置后才出现的。3.2 在 R1 上做 BGP 到 OSPF 的引入ospf 1 import-route bgp这条命令会把 R1 BGP 表里的路由全部注入 OSPF默认作为 Type-5 外部路由发布。实验里 172.16.0.0/16 会被写进 OSPF LSDBR2 能收到这条 Type-5 LSA。注意“全部”两个字不加 route-policy 时BGP 表里所有活跃路由都会变成 OSPF 外部路由这是后续所有问题的根源。3.3 在 R1 上再做 OSPF 到 BGP 的引入bgp 100 ipv4-family unicast import-route ospf 1这一步把 R1 的 OSPF 路由引入 BGP。问题在于172.16.0.0/16 已经因为上一步变成了 OSPF 外部路由import-route ospf会把它重新收进 BGP 表。BGP 表里于是同时存在两条路径一条是原始 EBGP 从 R3 学到的另一条是“OSPF 外部路由转 BGP”的本地始发路由。后者的 AS_PATH 为空发给 R3 时才会被加上 AS 100。用一个最小实验手法让 R3 一定选错R4 向 R3 发布 172.16.0.0/16 时做 AS_PATH 追加让 R3 原始路径长度大于 R1 回灌路径。route-policy PREPEND permit node 10 if-match ip-prefix EXT apply as-path 300 300 additive ip ip-prefix EXT index 10 permit 172.16.0.0 16 bgp 300 peer 10.0.34.1 route-policy PREPEND export这些配置的目的不是模拟“正常网络”而是让环路现象稳定出现便于后续验证防环策略是否真的生效。3.4 用 display 命令确认路由已经回灌改完配置后先看 BGP 邻居状态再看前缀的 AS_PATHdisplay bgp peer 10.0.13.2 display bgp routing-table 172.16.0.0 display ip routing-table 172.16.0.0在 R1 上172.16.0.0/16 的活跃路由会是原始 EBGP 方向下一跳指向 R3。在 R3 上如果 BGP 选路已经切到 R1display bgp routing-table 172.16.0.0里会出现一条 Path/Ogn 以 100 开头的路径下一跳是 R1。这两台设备的下一跳互相指向对方就是典型的“路由表里的环”。用display ospf lsdb ase 172.16.0.0还能看到 R1 产生的 Type-5 LSA此时它的 Tag 字段是默认值 0。检查点命令期望看到BGP 状态display bgp peerEstablished路由是否回灌display bgp routing-table 172.16.0.0出现 100i 或 100? 新路径活跃路径下一跳display ip routing-table 172.16.0.0R1 指 R3R3 指 R1OSPF LSDBdisplay ospf lsdb ase 172.16.0.0Type-5 LSATag 为 04. 双向互引防环配置route-policy、tag 与发布边界4.1 先给“进入 OSPF 的 BGP 路由”打 tag防环的第一件事是给路由一个身份让它在 OSPF 域里能认出来。常见做法是在 OSPF 引入 BGP 时用 route-policy 给外部路由打一个 tag。Tag 是 OSPF 外部 LSA 里现成的 32 位字段RIP、OSPF、IS-IS 互相引入时都认它适合做防环标记。ip ip-prefix EXT index 10 permit 172.16.0.0 16 route-policy FROM_BGP_TO_OSPF permit node 10 if-match ip-prefix EXT apply tag 100 apply cost 200 ospf 1 import-route bgp route-policy FROM_BGP_TO_OSPF这个 route-policy 做了三件事先限定只有 172.16.0.0/16 能进 OSPF再给这条外部路由打 Tag 100最后给 OSPF 外部路由一个固定 cost。Tag 是为了回灌时识别cost 是为了控制 OSPF 域内选路方向。这里要养成白名单习惯不要用空的permit node把所有 BGP 路由都放进去。4.2 再拦“想从 OSPF 回 BGP 的同 tag 路由”第二步是在 BGP 引入 OSPF 时把带 Tag 100 的路由直接丢掉。这是防环的核心动作带这个 tag 的路由本来就来自 BGP不能再被 BGP 重新收编。route-policy FROM_OSPF_TO_BGP deny node 10 if-match tag 100 route-policy FROM_OSPF_TO_BGP permit node 20 bgp 100 ipv4-family unicast import-route ospf 1 route-policy FROM_OSPF_TO_BGP第一段 deny node 10 把 Tag 等于 100 的 OSPF 外部路由拒绝掉第二段 permit node 20 没有 match 条件表示其余 OSPF 路由都可以引入 BGP。如果现场有多个 OSPF 进程if-match tag是按 OSPF 进程里的路由属性匹配的跨进程时要确认 tag 是否被保留。提示Tag 100 属于内部约定不是协议标准值。只要所有参与互引的 ASBR 统一用同一个值它就能在 OSPF 域里充当“这条路由是我放出去的”标记。4.3 关键参数对照tag、community、cost 与优先级参数配置位置作用建议route-tagOSPF 引入 BGP 的 route-policy标记路由来源32 位整数按区域统一规划别用 0BGP communityBGP 路由策略在 BGP 域内标记路由身份适合跨 AS 传递不能替代 OSPF tagOSPF costapply cost或import-route ... cost控制外部路由在 OSPF 内的优先度与线路带宽、主备关系对应BGP preferencepreference 120 120 130控制 BGP 与 OSPF 抢路由表时的胜负只在明确有兜底需要时使用route-policy 默认行为策略末尾未命中任何 permit 节点的路由被拒绝记住它是白名单黑名单一体BGP community 能不能替代 tag不能完全替代。Community 是 BGP 的属性不会跟着外部路由进入 OSPF LSA而 Tag 是 OSPF/RIP 这一侧的身份。跨协议互引时正确做法是“OSPF 侧认 tagBGP 侧认 community”两侧各标记各的而不是指望一个属性贯穿两种协议。4.4 发布边界用 network 和 ip-prefix 缩小引入面互引防环不是只靠一条 deny 策略引入面越小可被回灌的路由就越少。BGP 里能写network的优先用network不要import-route ospf 1整表引入OSPF 里能精确引的不要放全部 BGP 路由。route-policy FROM_OSPF_TO_BGP permit node 10 if-match ip-prefix LOOPBACK_INTERNAL ip ip-prefix LOOPBACK_INTERNAL index 10 permit 192.168.200.0 24 bgp 100 ipv4-family unicast import-route ospf 1 route-policy FROM_OSPF_TO_BGP如果业务只需要把 OSPF 内部回程路由上送 BGP就把permit node 20去掉让策略只允许 LOOPBACK_INTERNAL。这样即使 Tag 配置漏了可回灌的路由面也很小。5. 优先级兜底、收敛边界与定向发布互引场景的进阶控制5.1 用 BGP preference 调整兜底路径Tag 过滤解决的是“路由别再回灌”preference 解决的是“万一两条路径都存在选哪条”。华为 VRP 里 BGP 路由优先级默认 255OSPF 外部路由 150所以一旦同一条前缀同时出现在 BGP 和 OSPF ASE 里OSPF 会压掉 BGP。如果互引策略里部分路由无法完全过滤可以下调 BGP 优先级让原始 EBGP 路由在 IP 路由表里更有竞争力。bgp 100 preference 120 120 130这条命令的三个值分别对应 EBGP、IBGP 和本地始发 BGP 路由的协议优先级。120 小于 OSPF 外部路由的 150所以同一条前缀下BGP 学到的那条会留在活跃路由表里。注意不要把值调到比 OSPF 内部路由还低OSP 内部 10、静态 60 都仍然在该值之前路由选路不会乱。注意preference 是协议优先级local-preference 是 BGP 选路属性。local-preference 只影响 BGP 内部选路不会决定 BGP 和 OSPF 谁进 IP 路由表。两者不要混用。5.2 OSPF 外部路由类型和 cost 对环路的影响OSPF Type-5 外部路由分 Type 1 和 Type 2。Type 2 在 OSPF 域内比较时只看外部 cost不看内部链路 costType 1 会把“外部 cost 内部 cost”都算进去。互引场景默认走 Type 2当链路是主备模式时建议改成 Type 1让回灌路径在拓扑变化时更容易收敛。ospf 1 import-route bgp route-policy FROM_BGP_TO_OSPF type 1如果设备上策略已经带了apply costType 1 会把这个 cost 和内部路径 cost 一起参与比较。真实场景里R2 收到 R1 和另一台 ASBR 同时发布的同一条外部路由Type 1 能让它按真实开销选路而不是被一两条 Type 2 的固定 cost 卡住。5.3 互引防环策略变更时的检查清单现网改策略比初次部署更容易出问题因为回灌路由可能已经在 LSDB 和 BGP 表里待了很久。改完 route-policy、tag 或 preference 后按下面顺序核对。步骤操作命令1确认 OSPF LSDB 里外部路由 Tagdisplay ospf lsdb ase 172.16.0.02确认 BGP 不再收编同 tag 路由display bgp routing-table 172.16.0.03确认活跃路由方向display ip routing-table 172.16.0.04软重置 BGP 对等体reset bgp 10.0.13.25观察 AS_PATH 是否恢复display bgp routing-table查看 OSPF LSDB 时重点看 Tag 字段和 Advertising Router。如果 Tag 已经不是内部约定值先查是哪台设备把 tag 丢了再检查该设备有没有做路由回灌。不要直接重配 OSPF 进程大面积 reset 会让业务中断先做 BGP 软复位和对端设备的策略核对。6. 验证防环生效的一组命令与排错顺序互引防环做完验证不应该只看“线路通不通”。线路通只能说明当前活跃路径没断不能说明回灌路由已经被挡住。要做一次完整的正反向验证。先清掉 BGP 表里可能残留的旧路径让策略从头生效reset bgp 10.0.13.2 display bgp routing-table 172.16.0.0 display ospf lsdb ase 172.16.0.0display bgp routing-table 172.16.0.0里如果只剩一条从 R3 学到的路径说明 OSPF 回灌的 172.16.0.0/16 没有被 BGP 重新收编。display ospf lsdb ase 172.16.0.0里 Tag 字段应该是 100表示这条外部路由确实是本设备打标后放出去的。接着做一次路由收敛验证在 R1 上把 R3 方向的 BGP 邻居 down 掉观察 172.16.0.0/16 是否还能通过 OSPF 学到恢复后是否回到 BGP 路径。这个过程能确认防环策略不会把正常备用路径也挡掉。排错顺序固定为先看 BGP 表再看 OSPF LSDB最后看 IP 路由表。BGP 表里出现多余路径说明 OSPF 到 BGP 的 route-policy 没拦住BGP 表正常但 IP 路由表下一跳不对说明 preference 或者 OSPF cost 有问题两边都正常再检查对端设备是否也做了同样的互引回灌。最后一个动作是回归验证把策略里的 deny node 临时改成 permit确认回灌路由重新出现再改回来确认消失。这样能证明防环逻辑确实在起作用而不是恰巧因为拓扑收敛掩盖了问题。本文还有配套的精品资源点击获取
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/17 14:53:30
radix-vue(reka-ui)PopoverPortal 组件完全指南:属性解析、Teleport 底层原理与全局配置
2026/9/17 14:53:30
嵌入式C语言面试核心:指针、内存与数据类型深度解析
2026/9/17 14:53:30
三维空间网格离散化如何支撑防空雷达部署与覆盖优化
2026/9/17 15:38:39
J2EE技术演进断代标本:DOM/XSLT/Servlet/JSF/EJB/JMS深度解析
2026/9/17 15:38:39
换驱动芯片后电机一闭环就过流?从采样链路到PID的排查指南
2026/9/17 15:38:39
UML实验报告实战:StarUML图书管理系统建模全流程解析
2026/9/17 15:38:39
拆解C++小型数据库管理系统.zip:从命令解析到记录存储
2026/9/17 15:38:39
嵌入式C语言面试核心:指针、内存与数据类型全解析
2026/9/17 15:33:39
SmolLM静态代码阅读:轻量模型实现本地化代码语义理解
2026/9/17 0:00:44
开学论文写作指南:核心框架梳理与高效完成技巧分享
2026/9/17 0:00:44
OpenMAIC:轻量级多Agent教学框架实战指南
2026/9/17 0:00:44
AWS无服务器应用开发指南:从Lambda到SAM的架构与实践
2026/9/16 18:36:59
拯救者Y7000黑屏故障排查与维修实战指南
2026/9/16 7:38:03
AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
2026/9/17 4:19:54
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化