ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OSPF与BGP互引防环实战:华为AR双点双向引入配置与排错

OSPF与BGP互引防环实战:华为AR双点双向引入配置与排错 简介这是华为路由器三层路由防环专题中的一份技术文档专门分析BGP与OSPF协议互引路由时可能引发的三层环路问题。文档先给出典型组网与数据准备再以DeviceA发布的10.10.10.10/32路由为例完整还原了从BGP引入OSPF、OSPF再引入BGP的四个阶段并通过display bgp routing-table输出详细解读MED值影响BGP优选路径的深层原因。内容还包含可能导致环路的错误配置示例以及基于路由策略、AS_PATH属性、路由引入控制等思路的防环建议配置并说明了适用产品和版本范围。整个压缩包仅含1个PDF文件大小211KB目录分为概述、典型组网、环路产生原理、错误配置示例、建议配置示例、适用版本、总结等小节方便读者按需查阅。当前已有2127人学习非常适合具备BGP/OSPF基础、希望系统理解华为路由器三层路由防环原理及实践的工程师快速上手。1. 三层路由防环专题为什么绕不开 BGP 与 OSPF 互引这一页OSPF 和 BGP 单独拿出来防环都是各自的看家本领OSPF 靠 SPF 算法和区域水平分割BGP 靠 AS-Path 属性。但这两个机制在互引场景里有一个共同的盲区——当 A 协议学到的路由被引入 B 协议又从 B 回到 A 时A 和 B 都会认为这条路由“来历正当”。网工在华为 AR 路由器上做双点双向引入时遇到的回灌路由、LSA 序列号暴涨、BGP 路由表震荡大多源于这条盲区。这个专题写到第 3 篇前两篇把单域和静态边界的防环逻辑拆完这一篇处理最容易被低估的 BGP 与 OSPF 互引场景环路怎么形成、用哪几条命令挡住、验证时看哪些字段。适合负责现网运维和路由整改的网工阅读新手也能照着配置走通。2. 双点双向引入的环路成因OSPF 的 Tag 盲区和 BGP 的 AS-Path 缺口2.1 OSPF 外部路由没有水平分割Tag 是唯一的防回灌挂载点OSPF 的域内防环靠 SPF 计算区域内所有路由器持有相同 LSDB算出的是无环最短路径树区域间防环靠 ABR 的水平分割——ABR 不会把从一个非骨干区域学到的 Type-3 LSA 转发到另一个非骨干区域区域间流量必须经过骨干。这套设计在“域内路由 区域间路由”的范围内是自洽的但它管不到 ASBR 引入的外部路由。Type-5 LSAAS External由 ASBR 生成并泛洪到整个 OSPF 域所有区域都能收到。OSPF 对 Type-5 没有任何类似水平分割的约束也就是说如果一台设备从 BGP 学到的路由被引入 OSPF泛洪到全区域后另一台 ASBR 又把它从 OSPF 引入回 BGPOSPF 本身不会拦截。多区域的 NSSA 场景里Type-7 LSA 经 ABR 转 Type-5 也是一样的逻辑Translator 机制只负责 7 转 5 的身份仲裁不提供外部路由环路防护。因此OSPF 为外部路由预留的防环字段是 External Route Tag一个 32 位整数随 Type-5/Type-7 LSA 扩散。华为路由器上默认引入的外部路由 Tag 为 0需要在 route-policy 里用 apply tag 显式打标之后在引入方向用 if-match tag 来拒绝特定来源。用命令可以直观看到 Tag 字段display ospf lsdb ase 10.10.0.0输出里除了 LS ID、AdvRouter、Metric 之外有一列 Tag。两台 ASBR 都在引入同一个前缀且 Tag 不一致时回灌就已经在发生了只是路由表还不一定抖动——这正是互引场景最隐蔽的地方。2.2 BGP 的 AS-Path 只拦 EBGP 环路iBGP 互引靠社区属性自律BGP 的防环机制是 AS-Path从 EBGP 收到的路由如果 AS_PATH 里已经包含本 AS 号直接拒收。这个检查在 EBGP 边界是强制的、有效的。但 iBGP 学到的路由不做 AS-Path 检查——同一 AS 内传播的路由AS_PATH 是相同的检查无意义。华为路由器在 iBGP 场景下防环靠的是路由反射器的 Originator_ID 和 Cluster_List普通 iBGP 对等体之间则完全依赖配置纪律。设备被部署为边界路由器时通常会同时运行 OSPF 和 BGP下行接口跑 OSPF上行或横向接口跑 BGP中间用 import-route 连通。在这个结构里ASBR 上执行 import-route ospf 时被引入的 OSPF 路由是“无社区属性、无 AS_PATH 来源信息”的BGP 拿不到任何关于这条路由在 IGP 域内传播轨迹的记录。一旦这条路由通过 EBGP 出去、又被对端 AS 引入其 IGP、再通过另一条链路回到本 AS设备无法从 AS_PATH 判断它是否曾经是本地 OSPF 路由。还有一个让问题放大的细节是协议优先级华为 VRP 上 BGP 路由优先级默认 255而 OSPF 外部路由ASE是 150OSPF 区域内是 10。同一前缀同时从 OSPF 和 BGP 学到时OSPF 永远胜出。这和思科默认行为eBGP 20 优先于 OSPF正好相反从思科切到华为的老手经常在这里踩坑。回灌路由一旦进入 OSPF即使 BGP 里有一条更合理的路径选路结果也会被 OSPF 优先级压过去。2.3 回灌振荡的完整链路一条重发布命令让两种路由协议互相投喂把完整链路走一遍。R2 和 R3 同时运行 OSPF 区域 0 与 iBGPR2 有一条 EBGP 对端R3 也有一条 EBGP 对端两台设备上都做了双向引入第一步R2 把 OSPF 域内的 10.10.0.0/16 引入 BGP发给 EBGP 对端 AS 100。此时这条路由在 BGP 侧是干净的没有任何标记。第二步AS 100 内某台设备又把 10.10.0.0/16 引入它的 OSPF该域内另一台设备与 R3 建立 EBGP 邻居这条路由经 EBGP 回到 R3 的 BGP 表。此时 AS_PATH 里出现的是 AS 100 的号不包含本 ASBGP 正常接收。第三步R3 执行 import-route bgp把这条“来自 EBGP”的路由引入 OSPF 区域 0。OSPF 泛洪 Type-5 LSAR2 通过 OSPF 学到 10.10.0.0/16优先级 150优于它 BGP 表里的任何路径出接口从 EBGP 方向切到 OSPF 方向。第四步R2 的 import-route ospf 把这条刚刚通过 OSPF 学回的 10.10.0.0/16 再次引入 BGP发给 AS 100。AS 100 再次把路由引入 OSPF……两个 AS 的 IGP 和 BGP 之间形成了永动回路。流量路径每收敛一次就切换一次LSA 序列号持续递增BGP 路由表在几秒内刷新一轮。问题根源不是 BGP 选路错也不是 OSPF 计算错而是互引操作本身没有“身份识别”。AS-Path 和 OSPF 区域防环在各自的域内都有效但互引把两个域的边界打通的同时没有给路由打上“我从哪来、到哪去”的标记。下一步的配置全部围绕补上这个标记。3. 华为 AR 上的最小防环配置BGP Community 与 OSPF Tag 双标互拒3.1 防环标记的总体规划先定 Tag 再动 import-route动手配置之前先把两个方向的标记定死。以 R2、R3 为例两台设备都在跑 OSPF 区域 0 和 BGP 65000并且都做了双向引入。整套方案只需要两个标识一个给“从 OSPF 进 BGP 的路由”一个给“从 BGP 进 OSPF 的路由”。OSPF 侧用 External Route Tag 作为载体BGP 侧用 Community 属性作为载体因为 OSPF 路由不能携带 BGP CommunityBGP 路由也没有 OSPF Tag 字段两者必须各用一个属性。标记规划如下引入方向标记载体标记值拒绝规则OSPF 引入 BGPBGP Community65000:100带该 Community 的 BGP 路由不再引入 OSPFBGP 引入 OSPFOSPF External Tag300带该 Tag 的 OSPF 路由不再引入 BGP这两个标记得在所有做引入的 ASBR 上统一下发。R2 和 R3 只要有一台漏配漏配那台就会把回灌路由放行整网防环失效。下面所有配置示例都以 R2 为主R3 把 router-id 和互联地址替换掉即可。3.2 OSPF 引入 BGP 方向拒绝带 Tag 300 的外部路由R2 上配置 OSPF 引入 BGP 方向的 route-policy。这个方向处理的对象是“即将进入 BGP 的 OSPF 路由”过滤依据是 OSPF 外部路由的 Tag 字段# R2OSPF 引入 BGP 方向 # 带 tag 300 说明这条路由是刚从 BGP 引到 OSPF 的禁止再进 BGP route-policy IMP_OSPF_TO_BGP deny node 10 if-match tag 300 # 其余 OSPF 路由统一打 Community 65000:100标记为“由 OSPF 引入” route-policy IMP_OSPF_TO_BGP permit node 20 apply community 65000:100 additive3.3 BGP 引入 OSPF 方向Community 过滤与打标再配置 BGP 引入 OSPF 方向的 route-policy。这个方向处理的对象是“即将进入 OSPF 的 BGP 路由”过滤依据是 BGP Community# R2BGP 引入 OSPF 方向 # 定义 Community 过滤器识别从 OSPF 引到 BGP 的路由 ip community-filter 1 permit 65000:100 route-policy IMP_BGP_TO_OSPF deny node 10 if-match community-filter 1 # 其余 BGP 路由引入 OSPF 时打 Tag 300标记为“由 BGP 引入” route-policy IMP_BGP_TO_OSPF permit node 20 apply tag 300两个 route-policy 配置完成后挂到对应的引入命令上# R2把两个方向的引入都挂上策略同时给 iBGP 对等体下发 Community bgp 65000 peer 3.3.3.3 as-number 65000 peer 3.3.3.3 connect-interface LoopBack0 import-route ospf 1 route-policy IMP_OSPF_TO_BGP peer 3.3.3.3 advertise-community ospf 1 router-id 2.2.2.2 import-route bgp route-policy IMP_BGP_TO_OSPF逻辑说明route-policy 按节点号从小到大逐个匹配deny node 10 先执行命中即拒收未命中的落到 permit node 20执行 apply 子句打标记。顺序不能颠倒deny 必须在前。华为 route-policy 的 permit 节点即使不写 if-match 也会匹配所有剩余路由这里的 node 20 就是默认放行通道靠 apply 完成标记动作。参数说明apply community 65000:100 additive中的 additive 表示追加而不是覆盖已有 Community这一步非常关键——BGP 路由可能已经从上游携带了其他 Community 属性覆盖会导致策略联动丢失。if-match tag 300匹配的是 OSPF 外部路由的 Tag 字段默认引入的外部路由 Tag 为 0所以配置了打标之后未打标的外部路由也能正常通过。peer 3.3.3.3 advertise-community解决的是 iBGP 对等体之间的 Community 传递问题华为 AR 上向对等体发布 Community 默认是关闭的不配这条R3 永远看不到 65000:100 这个标记对端防环策略形同虚设。这是双机互引配置里最容易漏的一条。3.4 两条策略组合后的转发语义配置完成后任何一条路由在 R2 与 R3 之间穿行时都会经历如下检查路由状态经过方向检查点结果刚从 BGP 学到BGP 引入 OSPFCommunity 65000:100命中 deny拒绝入 OSPF已从 OSPF 学到OSPF 引入 BGPTag 300命中 deny拒绝入 BGPOSPF 域内正常路由OSPF 引入 BGP无标记放行并打 Community 65000:100BGP 正常路由BGP 引入 OSPF无该 Community放行并打 Tag 300这套机制的本质是“环形拒绝”A 方向引入的路由打上 A 标记B 方向引入时拒绝 A 标记B 方向引入的路由打上 B 标记A 方向引入时拒绝 B 标记。两台 ASBR 各自执行一遍整网就形成了闭环。只要两边策略一致回灌路由在任何一个方向都会被拦在门外。从 OSPF 引到 BGP 的路由打上 Community 之后如果这个 AS 有多个出口、且对端 AS 又把路由引回 OSPF 重新传回来BGP 侧的 Community 依然有效——因为 Community 只要在 iBGP 域内传播就会保留前提是每台 iBGP 对等体都配置了 advertise-community。这就是用 Community 而不是只靠 Tag 做 BGP 侧防护的原因OSPF Tag 只在 OSPF 域内有效一旦路由进入 BGPTag 信息就丢了必须靠 BGP 自己的属性接力。4. 多出口互引时防环配置的整网化标记一致性、次优路径与跨域回灌4.1 双 ASBR 同时引入标记不一致会直接击穿防环上一章的配置成立的前提是所有执行引入的 ASBR 使用同一套标记方案。现实中多出口组网里 R2 和 R3 的配置往往不是同一个人写的常见的故障形态是R2 上 Tag 用 300R3 上 Tag 用 400两台设备各自防住了自己引入的路由但对方打标的路由挡不住。回灌路由绕一圈之后从另一台 ASBR 的缝隙里钻进路由表。判断双 ASBR 是否在互相回灌最快的办法是连看两次 LSA 序列号。在 R2 上执行display ospf lsdb ase 10.10.0.0第一次记录 LS sequence 字段隔 3 秒再执行一次。如果序列号在增长说明有外部 LSA 在被反复刷新——回灌环路最典型的特征。正常情况下一条静态的外部路由 LSA 只会在拓扑变化或定时刷新时更新不会几秒钟跳一次。对比 R2 和 R3 上这条 LSA 的 Advertising Router 字段如果两台 ASBR 都在通告同一前缀且 Tag 值不同标记不一致的问题就坐实了。整改方式不是把某一台的路由删掉而是统一两边的 route-policy 标记值然后清除 OSPF 进程重新收敛。清理 OSPF 进程会导致该设备上的 OSPF 邻居全部重建现网操作前需要先评估影响面。4.2 用 ip-prefix 与协议优先级做次优路径兜底防住了回灌互引场景里还有一种环路之外的劣化次优路径。R2 通过 EBGP 学到一条去往 10.0.0.0/8 的路由同一前缀也出现在 OSPF 外部路由里可能是对端 AS 引入的合法重分布。华为默认优先级下 BGP 是 255OSPF ASE 是 150路由表会把出接口指到 OSPF 方向即使 BGP 那条路径更短、带宽更大。这不是环路但流量路径会绕排障时很容易被误判为环路。两个兜底手段。第一用 ip-prefix 在引入方向做精细化过滤把明确知道应该走 BGP 的前缀从 OSPF 引入列表中剔除# R2拒绝从 BGP 引入 10.0.0.0/8 到 OSPF ip ip-prefix BLOCK_LOOP deny 10.0.0.0 8 greater-equal 8 less-equal 8 ip ip-prefix BLOCK_LOOP permit 0.0.0.0 0 less-equal 32 route-policy IMP_BGP_TO_OSPF deny node 5 if-match ip-prefix BLOCK_LOOP第二在确认整个 AS 的选路策略倾向于走 BGP 出口时调整 BGP 路由的优先级让它优于 OSPF 外部路由# R2把 EBGP 路由优先级从 255 调低到 120优先于 OSPF ASE 的 150 bgp 65000 preference 120 255 255preference 命令的三个参数分别对应 EBGP、IBGP、本地引入路由。把 EBGP 调成 120 后同一前缀在 BGP 与 OSPF ASE 之间竞争时BGP 胜出。注意这会改变整台设备的选路基调只影响从 BGP 学到的路由不影响 OSPF 内部路由——OSPF 区域内优先级是 10依然优先。这套调整要在每一台同时运行两个协议的设备上统一做否则会出现 A 设备走 BGP、B 设备走 OSPF 的不一致。4.3 跨域回灌AS-Path 过滤作为最后一层保险标记方案解决了本 AS 内部的回灌但跨域场景还有一个补丁要打。R2 把 OSPF 路由引入 BGP 后发布给 EBGP 对端对端 AS 引回它的 IGP再经另一个 ASBR 把这条路由发布回本 AS 时AS_PATH 里会带上对端 AS 号和本 AS 号。这时 BGP 的 AS-Path 防环机制能兜底但动作不够快——路由已经绕了一大圈才被识别。更主动的做法是在 BGP 引入 OSPF 或 EBGP 入方向加一层 AS-Path 过滤本地 AS 号一出现就直接拒绝# R2AS-Path 过滤器拒绝携带本 AS 号的路由 ip as-path-filter 1 deny ^65000_ ip as-path-filter 1 permit .* bgp 65000 peer 10.0.23.2 as-number 100 peer 10.0.23.2 route-policy BLOCK_LOCAL_AS import route-policy BLOCK_LOCAL_AS permit node 10 if-match as-path-filter 1正则^65000_匹配以 65000 开头、后面跟空格或路径分隔符的 AS_PATH也就是本 AS 号出现在路径首位的路由。这类路由必然经历过“本 AS 发出 → 外界绕行 → 回到本 AS”的完整闭环没有继续收留的价值。跨域场景下这一层防线可以独立于 Tag/Community 方案存在适合作为双机互引之外所有边界设备的通用入向策略。但要注意在允许 AS 号重复出现在路径中联盟场景或某些特殊多归属设计的网络里不能用这条会误伤合法路由。5. 验证与排错路由表三路对照和 LSA 递增检查5.1 先看路由协议的三个属性Protocol、Tag、Path防环配置做完验证不是看“路由通不通”而是看“路由从哪个协议来、带什么标记、AS_PATH 是什么”。在 R2 上对目标前缀执行display ip routing-table 10.10.0.0 16 verbose关注三个字段Protocol 显示这条路由是 OSPF 还是 BGP 引入的Tag 显示外部路由标记如果是 300 说明它经过了 BGP 引入 OSPF 的流程Preference 确认选路优先级是否符合预期。再交叉看 BGP 侧的来源明细display bgp routing-table 10.10.0.0 16 display bgp routing-table community 65000:100第一条看 AS_PATH 和 Origin确认路由来源是本地引入还是远端学习第二条看有哪些前缀被打了 65000:100 的社区标记这批路由应该是“OSPF 引入 BGP 后对外发布的合法集合”。如果发现某个前缀同时在 OSPF 和 BGP 路由表里出现且 Protocol 字段显示两边都有优先查 Tag 和 Community 是否匹配规划而不是直接删路由。5.2 定位环路的快速命令组合现网已经出问题时按以下顺序排查第一步确定环路方向。在 R2 上分别执行 display ip routing-table protocol ospf 和 display ip routing-table protocol bgp对比相同前缀出现在哪一侧。两侧都有说明引入动作在生效回灌疑似发生。第二步查 LSA 是否在震荡。连续执行三次 display ospf lsdb ase 目标前缀间隔 3 秒。序列号每次都在增加说明有设备在反复刷新这个外部 LSA环在路上。第三步查谁的 Tag 和谁不一致。在 R2、R3 两台设备上分别执行 display ospf lsdb ase对比同一 LS ID 的 Advertising Router 和 Tag 值。不一致就是标记方案没统一。第四步临时切断验证。在 R3 上执行 undo import-route ospf 1观察 R2 的 BGP 表里相关前缀是否消失。消失说明该前缀依赖 R3 的引入在维持。确认后恢复配置再观察 LSA 序列号是否停止增长。这条命令操作的是引入关系不影响 BGP 邻居和 OSPF 邻居本身比 reset 类命令安全得多。5.3 回切演练隔离一侧后路由不抖动才算过关防环配置的真正验收方式是故障演练。保留 R2、R3 所有配置不动断开 R3 的 iBGP 对等体连接或者用 shutdown 命令关闭 R3 的某个 EBGP 接口。此时 R3 收到的 EBGP 路由消失R2 的 BGP 表不应出现任何新增前缀OSPF 的 Type-5 LSA 序列号不应变化。然后再恢复 R3 的连接重新观察 R2 的路由表确认没有出现旧路由被回灌的现象。回切后执行 display ospf peer 检查 OSPF 邻居状态回到 Fulldisplay bgp peer 检查 iBGP 状态回到 Established再用 ping -a 指定源地址对端到端做一次连通性测试。整个演练过程中 LSA 序列号只在拓扑变化瞬间更新一次之后保持稳定说明防环策略在两侧都生效。别忘了检查 R3 上 advertise-community 是否配置——Community 标记传不到对端防环策略就是单向的这次演练会把这个问题暴露出来。本文还有配套的精品资源点击获取
返回列表