关键词:路由重分发、Route Redistribution、OSPF、BGP、互引、路由注入、属性转换

第99篇:路由重分发原理:OSPF 与 BGP 互引

一、引言

在复杂的网络环境中,很少有一个路由协议能够覆盖全部场景。OSPF 擅长在 AS 内部快速收敛和精确路由,BGP 擅长在 AS 之间传递路由和策略控制。当网络中同时存在 OSPF 和 BGP 时,就需要通过路由重分发(Redistribution)在两者之间传递路由信息。

路由重分发是连接不同路由协议世界的桥梁。理解重分发的原理、属性转换规则和常见陷阱,是设计多协议网络的基础。

二、核心概念

2.1 路由重分发基本概念

路由重分发(也叫路由引入)是将一个路由协议学习到的路由注入到另一个路由协议中的过程:

路由重分发基本概念 - 图示

2.2 路由协议属性对比

不同路由协议的路由属性差异巨大,重分发时需要映射和转换:

属性维度 OSPF BGP
路由度量 Cost(基于带宽) 无直接度量(依赖选路规则)
路由类型 Intra-Area / Inter-Area / External Internal / External
下一跳 直连邻居或 ASBR 对等体 IP
防环机制 Area 边界 / LSA 类型 AS_PATH
管理距离 10(内部)/ 150(外部) eBGP=20 / iBGP=255(华为 VRP)

2.3 重分发的方向与术语

方向 术语 说明
OSPF → BGP OSPF 注入 BGP 将 OSPF 路由发布到 BGP
BGP → OSPF BGP 注入 OSPF 将 BGP 路由发布到 OSPF
双向重分发 Bidirectional Redistribution 两个方向同时注入

三、技术细节

3.1 OSPF 注入 BGP

关键特性:

  1. BGP 默认不自动注入任何 IGP 路由,必须显式配置
  2. 注入的路由在 BGP 中作为"本地产生"的路由
  3. 注入时可设置 BGP 属性(LOCAL_PREF、MED、Community 等)

配置方法:

# 方法1:引入 OSPF 路由
bgp 100
 import-route ospf 1
# 将 OSPF 进程 1 的所有路由注入 BGP

# 方法2:通过策略选择性地引入
bgp 100
 import-route ospf 1 route-policy OSPF-TO-BGP

route-policy OSPF-TO-BGP permit node 10
 if-match ip-address prefix-list INTRANET
 apply local-preference 200
 apply community 100:INTRANET additive

route-policy OSPF-TO-BGP permit node 20
# 默认放行

属性映射:

OSPF 属性 BGP 映射 说明
OSPF Cost 无直接映射 可在策略中转换为 MED
OSPF Area 无直接映射 可在策略中添加标记
OSPF Type(内部/外部) Origin 内部路由 → IGP,外部路由 → Incomplete
下一跳 Next_Hop 通常设为本地 IP

3.2 BGP 注入 OSPF

关键特性:

  1. BGP 注入 OSPF 后,路由作为 Type-5 AS-External LSA 传播
  2. 所有 BGP 路由被注入后,度量值统一为某个固定值
  3. 需要谨慎控制注入范围,避免 BGP 全局路由表全部进入 OSPF

配置方法:

# 基本配置:引入 BGP 路由到 OSPF
ospf 1
 import-route bgp 100
# 将 BGP AS 100 的所有路由注入 OSPF

# 通过策略选择性引入(推荐)
ospf 1
 import-route bgp 100 route-policy BGP-TO-OSPF

route-policy BGP-TO-OSPF permit node 10
 if-match ip-address prefix-list DEFAULT-ROUTE
 apply cost 10
 apply type 2
# 只引入默认路由

route-policy BGP-TO-OSPF permit node 20
 if-match ip-address prefix-list SPECIFIC-NET
 apply cost 100

route-policy BGP-TO-OSPF deny node 30
# 拒绝其他 BGP 路由

属性映射:

BGP 属性 OSPF 映射 说明
AS_PATH 无直接映射 AS_PATH 信息在 OSPF 中丢失
LOCAL_PREF 无直接映射 可在策略中转换为 Cost
MED Cost 可手动映射 MED 到 OSPF Cost
Community 无直接映射 可在策略中转换为 Tag

3.3 重分发时的度量值处理

# 方式1:使用固定度量值
ospf 1
 import-route bgp 100 cost 100
# 所有从 BGP 注入的路由 Cost = 100

# 方式2:通过策略设置不同度量值
route-policy BGP-TO-OSPF permit node 10
 if-match ip-address prefix-list HIGH-PRIORITY
 apply cost 10

route-policy BGP-TO-OSPF permit node 20
 if-match ip-address prefix-list NORMAL
 apply cost 100

route-policy BGP-TO-OSPF permit node 30
 apply cost 200
# 默认 Cost

# 方式3:通过 route-policy 设置 BGP 属性(如 MED)
# BGP 没有 cost 概念,如需设置 MED,应通过 route-policy 的 apply med 实现
route-policy OSPF-TO-BGP-MED permit node 10
 apply med 10

bgp 100
 import-route ospf 1 route-policy OSPF-TO-BGP-MED

3.4 路由类型映射

OSPF 外部路由有两种类型:

类型 名称 度量计算
Type 1 E1 外部 Cost + 到达 ASBR 的内部 Cost
Type 2 E2 仅外部 Cost(默认)
# BGP 注入 OSPF 时指定类型
ospf 1
 import-route bgp 100 type 1
# 注入为 E1 类型

ospf 1
 import-route bgp 100 type 2
# 注入为 E2 类型(默认)

四、实战配置/案例分析

4.1 场景一:企业网络 BGP-OSPF 互引

需求:企业总部通过 BGP 连接运营商,内部使用 OSPF。需要将运营商的默认路由注入 OSPF,同时将企业内部路由通过 BGP 通告给运营商。

场景一:企业网络 BGP-OSPF 互引 - 图示

配置实现:

# === PE 路由器配置 ===

# --- OSPF 配置 ---
ospf 1
 router-id 10.1.0.1
 area 0
  network 10.1.0.0 0.0.255.255
 # BGP 路由注入 OSPF(只注入默认路由)
 import-route bgp 100 route-policy BGP2OSPF

route-policy BGP2OSPF permit node 10
 if-match ip-address prefix-list DEFAULT-ONLY
 apply cost 10
 apply type 2

route-policy BGP2OSPF deny node 20
# 拒绝其他 BGP 路由注入 OSPF

ip prefix-list DEFAULT-ONLY permit 0.0.0.0 0

# --- BGP 配置 ---
bgp 100
 router-id 10.1.0.1
 peer 203.0.113.1 as-number 64501
 # OSPF 路由注入 BGP(只注入内部路由)
 import-route ospf 1 route-policy OSPF2BGP

route-policy OSPF2BGP permit node 10
 if-match ip-address prefix-list INTERNAL-NET
 apply community 100:INTERNAL additive
 apply local-preference 100

route-policy OSPF2BGP deny node 20
# 拒绝其他 OSPF 路由注入 BGP

ip prefix-list INTERNAL-NET seq 10 permit 10.0.0.0 8
ip prefix-list INTERNAL-NET seq 20 permit 172.16.0.0 12

4.2 场景二:双向重分发的路由环路风险

需求:ASBR 同时执行 OSPF → BGP 和 BGP → OSPF 双向重分发。

场景二:双向重分发的路由环路风险 - 图示

环路风险分析:

步骤 路由流向 问题
1 O1 的 10.1.1.0/24 通过 OSPF 到达 ASBR 正常
2 ASBR 将 10.1.1.0/24 注入 BGP 正常
3 ASBR2 通过 BGP 学到 10.1.1.0/24 正常
4 ASBR2 将 10.1.1.0/24 注入 OSPF 产生外部路由
5 ASBR 通过 OSPF 收到 10.1.1.0/24(Type-5) 路由回环

防护方法(详见第100篇),包括使用 Tag 标记、Filter-Policy 过滤、路由映射等。

4.3 故障案例:BGP 路由过量注入 OSPF

故障现象:执行 import-route bgp 后,OSPF 路由表暴涨,CPU 利用率飙升。

# 检查 OSPF 路由表
display ospf routing
# 发现数万条 External 路由(来自 BGP 注入)

# 检查 BGP 路由表
display bgp routing-table counting
# BGP 路由表包含全球路由表(约 90 万条)

# 根因:
# import-route bgp 100 不加任何策略,将全部 BGP 路由注入 OSPF
# OSPF 泛洪 LSA,所有 OSPF 路由器都需要处理这些 LSA

# 修复:
ospf 1
 undo import-route bgp 100
 # 取消无策略的注入

 import-route bgp 100 route-policy BGP2OSPF-SELECTIVE

route-policy BGP2OSPF-SELECTIVE permit node 10
 if-match ip-address prefix-list NEEDED-NET
 apply cost 100

route-policy BGP2OSPF-SELECTIVE deny node 20
# 只注入需要的路由,拒绝其他

ip prefix-list NEEDED-NET seq 10 permit 0.0.0.0 0
ip prefix-list NEEDED-NET seq 20 permit 10.0.0.0 8
ip prefix-list NEEDED-NET seq 30 permit 172.16.0.0 12

五、总结

方向 默认行为 推荐做法 注意事项
OSPF → BGP 不自动注入 显式配置 + 策略过滤 避免将全部 OSPF 路由注入 BGP
BGP → OSPF 不自动注入 只注入需要的路由 防止 BGP 全局路由进入 OSPF
双向重分发 高风险 必须配合防环机制 使用 Tag 或 Filter 防回环

路由重分发最佳实践: 1. 永远不要不加策略地执行 import-route 2. BGP 注入 OSPF 时,通常只注入默认路由或少量特定前缀 3. OSPF 注入 BGP 时,只注入内部网络前缀 4. 双向重分发必须配合防环机制(Tag/Filter-Policy) 5. 监控重分发后的路由表变化,设置告警阈值 6. 记录所有重分发策略的设计意图,便于后续维护

思考

  1. 为什么 BGP 默认不自动将 IGP 路由注入 BGP?如果自动注入会带来什么问题?
  2. OSPF 注入 BGP 时,OSPF 的 Cost 属性为什么不能直接映射为 BGP 的 MED?两者在设计思想上有什么根本差异?
  3. BGP 路由注入 OSPF 后成为 Type-5 LSA,这会对 OSPF 区域的汇总和过滤产生什么影响?

下篇预告:第100篇:路由重分发环路的防制:Tag 与 Filter-Policy