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

关键词

路由重分发、环路防制、Tag、Filter-Policy、Route-Policy、路由标记


一、路由环路的源头

在双向重分发(如 OSPF ↔ BGP)环境中,环路产生的根本原因是:

从协议 A 引入到协议 B 的路由,又被另一台路由器从协议 B 引入回协议 A——形成了路由反馈。

        ASBR1                      ASBR2
  ┌──────────────┐           ┌──────────────┐
  │              │──→ BGP    │              │
  │  OSPF ↔ BGP  │←─────────│  OSPF ↔ BGP  │
  │              │  BGP→OSPF │              │
  └──────────────┘           └──────────────┘
       │                            │
       │       OSPF 域               │
       └────────────────────────────┘

环路示例: 1. ASBR1 将 OSPF 路由 10.0.1.0/24 引入 BGP 2. ASBR2 从 BGP 学到 10.0.1.0/24 3. ASBR2 将这条 BGP 路由引入 OSPF(Type 5 LSA) 4. ASBR1 在 OSPF 中看到 10.0.1.0/24(来自 BGP 引入) 5. ASBR1 比较 Cost → 如果 BGP 引入的 Cost 更小 → 选择 BGP 路径 6. 形成环路!


二、方法一:Route Tag(路由标记)

2.1 原理

Tag 是一个 32 位的标记字段,用于标识路由的来源:

Tag = 100:表示这条路由是从 BGP 引入到 OSPF 的
Tag = 200:表示这条路由是从 OSPF 引入到 BGP 的

在路由引入时打 Tag,在再次引入时检查 Tag,如果 Tag 匹配则拒绝引入。

2.2 配置

# ASBR1 配置
# Step 1:OSPF → BGP 时打 Tag
route-policy OSPF_TO_BGP permit node 10
 apply tag 200                        # 标记为"OSPF 原生路由"

bgp 100
 import-route ospf 1 route-policy OSPF_TO_BGP

# Step 2:BGP → OSPF 时过滤已有 Tag 的路由
route-policy BGP_TO_OSPF deny node 10
 if-match tag 200                     # 拒绝 Tag=200(这本来就是 OSPF 路由)

route-policy BGP_TO_OSPF permit node 20
 apply tag 100                        # 标记为"BGP 引入的路由"

ospf 1
 import-route bgp route-policy BGP_TO_OSPF

2.3 另一台 ASBR 也要配合

# ASBR2 配置(镜像配置)
route-policy OSPF_TO_BGP permit node 10
 apply tag 200

bgp 100
 import-route ospf 1 route-policy OSPF_TO_BGP

route-policy BGP_TO_OSPF deny node 10
 if-match tag 200

route-policy BGP_TO_OSPF permit node 20
 apply tag 100

ospf 1
 import-route bgp route-policy BGP_TO_OSPF

三、方法二:Filter-Policy(路由过滤)

3.1 原理

Filter-Policy 在协议内部对路由进行过滤,可以用前缀列表、Route-Policy 等控制。

3.2 OSPF 的 Filter-Policy

# 在 OSPF 入方向过滤:拒绝 BGP 引入回来的路由
ip ip-prefix DENY_BGP_LOOP deny 10.0.0.0 8         # 拒绝内网前缀
ip ip-prefix DENY_BGP_LOOP permit 0.0.0.0 0

ospf 1
 filter-policy ip-prefix DENY_BGP_LOOP import       # 入方向过滤

# 注意:filter-policy 只影响 OSPF 路由的加入路由表
# 不影响 LSDB 中的 LSA

3.3 BGP 的 Filter-Policy

# BGP 入方向过滤
ip ip-prefix DENY_OSPF_LOOP deny 10.0.0.0 8
ip ip-prefix DENY_OSPF_LOOP permit 0.0.0.0 0

bgp 100
 filter-policy ip-prefix DENY_OSPF_LOOP import      # 入方向过滤

3.4 Filter-Policy vs Route-Policy

对比 Filter-Policy Route-Policy
作用 简单的前缀过滤 复杂的属性修改+过滤
灵活性 只能基于前缀 可基于 AS_PATH、Community 等
推荐 ⚠️ 简单场景 ✅ 推荐

四、方法三:管理距离(Administrative Distance)

4.1 原理

OSPF 的协议优先级默认是 10(华为)/ 110(Cisco),BGP 是 255/20。

如果在 ASBR 上调整引入路由的优先级,可以避免环路:

# 让 BGP 引入 OSPF 的路由优先级高于 OSPF 本身
# 这样 OSPF 内部路由永远优先于 BGP 引入回来的路由

# 在 ASBR 上
ospf 1
 preference 10                         # OSPF 内部路由优先级 10
 preference ase 150                    # OSPF 外部路由优先级 150

4.2 局限性

  • 只能治标,不能治本
  • 如果有多台 ASBR,优先级设置不一致可能失效

五、方法四:禁止回注(推荐)

5.1 原理

最彻底的方法——禁止路由被重新引入回源协议。

# 在 BGP 入方向:拒绝所有内网前缀(因为这些已经在 OSPF 中了)
route-policy FROM_BGP deny node 10
 if-match ip-prefix INTERNAL_NETS

route-policy FROM_BGP permit node 20

ip ip-prefix INTERNAL_NETS permit 10.0.0.0 8

ospf 1
 import-route bgp route-policy FROM_BGP

5.2 单向引入 + 默认路由

最佳实践:避免双向引入,使用单向引入 + 默认路由:

# ASBR 配置(推荐方案)
# 方向 1:OSPF → BGP(将内网路由通告到互联网)
bgp 100
 import-route ospf 1

# 方向 2:BGP → OSPF(只引入默认路由)
route-policy DEFAULT_ONLY permit node 10
 if-match ip-prefix DEFAULT

ip ip-prefix DEFAULT permit 0.0.0.0 0

ospf 1
 import-route bgp route-policy DEFAULT_ONLY

六、综合方案:多层防护

# ===== 推荐的双向引入防环配置 =====

# 1. Tag 标记
route-policy OSPF_TO_BGP permit node 10
 apply tag 200                        # OSPF 原生路由标记

route-policy BGP_TO_OSPF deny node 10
 if-match tag 200                     # 拒绝 OSPF 原生路由回注

route-policy BGP_TO_OSPF permit node 20
 if-match ip-prefix DEFAULT_ONLY      # 只引入默认路由
 apply tag 100

# 2. Filter-Policy 兜底
ip ip-prefix PREVENT_LOOP deny 10.0.0.0 8
ip ip-prefix PREVENT_LOOP permit 0.0.0.0 0

ospf 1
 filter-policy ip-prefix PREVENT_LOOP import

# 3. 设置外部路由优先级
ospf 1
 preference ase 150                   # 外部路由优先级高于内部

七、核心原则总结

原则 说明
避免双向引入 能用单向引入不要用双向
使用默认路由 BGP→OSPF 只引入默认路由
Tag 标记来源 每条引入的路由打上来源标记
过滤防回注 拒绝来自本协议的 Tag
设置优先级 外部路由优先级高于内部
前缀过滤 拒绝内网前缀被重新引入

八、总结

防环方法 原理 推荐度
Route Tag 标记路由来源,过滤匹配 Tag 的路由 ⭐⭐⭐⭐⭐
Filter-Policy 基于前缀过滤 ⭐⭐⭐⭐
优先级调整 调整引入路由的优先级 ⭐⭐⭐
禁止回注 拒绝特定前缀重新引入 ⭐⭐⭐⭐⭐
单向引入 避免双向互引 ⭐⭐⭐⭐⭐(最佳)

九、思考

  1. 双向重分发环境中,路由环路是如何产生的?描述一个典型的环路场景。
  2. Route Tag 防环的原理是什么?Tag 是 32 位的,如何规划 Tag 值?
  3. Filter-Policy 和 Route-Policy 在路由过滤上有什么区别?
  4. 为什么"单向引入 + 默认路由"被认为是双向引入场景的最佳实践?
  5. 如果企业出口有两台 ASBR 都配置了双向引入,请设计一个完整的防环方案。

下篇预告:第101篇——进入第三篇章《局域网与园区网技术》,探讨二层环路、STP 保护与 VLAN 规划。