第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 | 基于前缀过滤 | ⭐⭐⭐⭐ |
| 优先级调整 | 调整引入路由的优先级 | ⭐⭐⭐ |
| 禁止回注 | 拒绝特定前缀重新引入 | ⭐⭐⭐⭐⭐ |
| 单向引入 | 避免双向互引 | ⭐⭐⭐⭐⭐(最佳) |
九、思考
- 双向重分发环境中,路由环路是如何产生的?描述一个典型的环路场景。
- Route Tag 防环的原理是什么?Tag 是 32 位的,如何规划 Tag 值?
- Filter-Policy 和 Route-Policy 在路由过滤上有什么区别?
- 为什么"单向引入 + 默认路由"被认为是双向引入场景的最佳实践?
- 如果企业出口有两台 ASBR 都配置了双向引入,请设计一个完整的防环方案。
下篇预告:第101篇——进入第三篇章《局域网与园区网技术》,探讨二层环路、STP 保护与 VLAN 规划。