关键词:路由重分发、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
关键特性:
- BGP 默认不自动注入任何 IGP 路由,必须显式配置
- 注入的路由在 BGP 中作为"本地产生"的路由
- 注入时可设置 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
关键特性:
- BGP 注入 OSPF 后,路由作为 Type-5 AS-External LSA 传播
- 所有 BGP 路由被注入后,度量值统一为某个固定值
- 需要谨慎控制注入范围,避免 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 通告给运营商。

配置实现:
# === 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. 记录所有重分发策略的设计意图,便于后续维护
思考
- 为什么 BGP 默认不自动将 IGP 路由注入 BGP?如果自动注入会带来什么问题?
- OSPF 注入 BGP 时,OSPF 的 Cost 属性为什么不能直接映射为 BGP 的 MED?两者在设计思想上有什么根本差异?
- BGP 路由注入 OSPF 后成为 Type-5 LSA,这会对 OSPF 区域的汇总和过滤产生什么影响?
下篇预告:第100篇:路由重分发环路的防制:Tag 与 Filter-Policy