第88篇:RR 反射规则与 Cluster_List 防环

关键词

BGP、RR、反射规则、Cluster_List、Cluster ID、防环、Originator_ID


一、RR 环境下的环路问题

在使用 RR 的网络中,由于 RR 打破了 iBGP 水平分割,可能产生路由环路。BGP 使用两个属性防止 RR 环境下的环路:

防环属性 作用
Originator_ID 标识路由的原始始发者
Cluster_List 记录经过的 RR Cluster

二、Originator_ID(始发者 ID)

2.1 定义

Originator_ID 是一个可选非传递属性,由 RR 添加,记录路由的原始始发者的 Router ID

2.2 工作方式

Client A 通告路由 172.16.0.0/16

Client A ──→ RR1 ──→ RR2 ──→ Client A(再次收到)
                   ↑
            Originator_ID = Client A 的 Router ID

Client A 再次收到该路由时:
  检查 Originator_ID = 自己的 Router ID
  → 这是自己始发的路由 → 丢弃

2.3 防环效果

Client A(RID=2.2.2.2)始发路由 172.16.0.0/16
  → RR1 添加 Originator_ID = 2.2.2.2
  → RR2 收到,不修改 Originator_ID
  → Client A 收到,发现 Originator_ID = 2.2.2.2(自己)
  → 丢弃,环路终止

三、Cluster_List(集群列表)

3.1 什么是 Cluster

Cluster(集群) 是一组共享路由信息的 RR 和 Client 的集合。

  • 每个 RR 有一个 Cluster ID(默认是自己的 Router ID)
  • 同一 Cluster 内的 RR 共享相同的 Cluster ID

3.2 Cluster_List 的定义

Cluster_List 是一个可选非传递属性,记录路由经过的所有 Cluster ID

3.3 RR 的分层结构

    Cluster 100            Cluster 200
RR1 (CID=100) RR2(CID=100) Client Client RR3 (CID=200) Client Client └──────────────────┘
│ iBGP
┌─────┴─────┐
│ Client │
└───────────┘

3.4 Cluster_List 防环过程

路由 172.16.0.0/16 经过:
  Client 始发
  → RR1(Cluster_List = [100])
  → RR2(Cluster_List = [100],检查自己是否在列表中)
     → 自己的 Cluster ID = 100,发现已在 Cluster_List 中
     → 丢弃!环路检测 ✅

3.5 共享 Cluster ID 的场景

当两台 RR 使用相同的 Cluster ID 时,它们属于同一 Cluster:

# 配置相同的 Cluster ID
bgp 100
 router-id 1.1.1.1
 peer 10.0.12.2 as-number 100
 peer 10.0.12.2 reflect-client
 reflector cluster-id 100          # RR1 的 Cluster ID = 100

# RR2 也配置相同的 Cluster ID
bgp 100
 router-id 2.2.2.2
 reflector cluster-id 100          # RR2 的 Cluster ID = 100

好处:同一 Cluster 内的 RR 之间的路由不会互相反射,减少环路风险。


四、完整的 RR 反射规则

4.1 收到路由的来源决定反射行为

路由来源 反射给 Client 反射给 Non-Client
Client
Non-Client
eBGP 对等体

4.2 反射前的检查

RR 在反射前会做以下检查:

收到路由后:
  ├─ Originator_ID = 自己? → 丢弃
  ├─ Cluster_List 包含自己的 Cluster ID? → 丢弃
  └─ 以上都不是 → 执行反射

反射时添加:
  ├─ Originator_ID(如果不存在)
  └─ Cluster ID 追加到 Cluster_List

五、配置与验证

5.1 配置示例

# RR1(主 RR)
bgp 100
 router-id 1.1.1.1
 peer 10.0.12.2 as-number 100
 peer 10.0.12.2 reflect-client
 peer 10.0.13.3 as-number 100
 peer 10.0.13.3 reflect-client
 reflector cluster-id 100

# RR2(备用 RR,同 Cluster)
bgp 100
 router-id 2.2.2.2
 peer 10.0.14.4 as-number 100
 peer 10.0.14.4 reflect-client
 peer 10.0.15.5 as-number 100
 peer 10.0.15.5 reflect-client
 reflector cluster-id 100          # 同一 Cluster

5.2 验证命令

# 查看 RR 配置状态
display bgp peer 10.0.12.2 verbose

  Peer: 10.0.12.2, AS: 100
  Type: IBGP
  Description: Client
  Reflect client: Yes              ← 是 RR 客户端
  Cluster ID: 100                  ← 所属 Cluster

# 查看路由的 Cluster_List 和 Originator_ID
display bgp routing-table 172.16.0.0

  Network: 172.16.0.0/16
  Path/Ogn: 100i
  Originator: 2.2.2.2             ← 始发者 Router ID
  Cluster List: 100                ← 经过的 Cluster

六、RR 部署的最佳实践

6.1 Cluster 规划

规模 建议
小型 AS(<20 台) 1 个 Cluster,2 台 RR
中型 AS(20~100 台) 2~3 个 Cluster
大型 AS(>100 台) 分层 Cluster 结构

6.2 冗余设计

# 每个 Client 至少连接两台 RR
bgp 100
 peer 10.0.12.1 as-number 100     # 主 RR
 peer 10.0.23.3 as-number 100     # 备用 RR

6.3 Cluster ID 设计

  • 同一冗余组内的 RR 使用相同的 Cluster ID
  • 不同层级的 RR 使用不同的 Cluster ID
  • Cluster ID 使用 IP 地址格式(如 10.0.0.1)

七、总结

防环机制 对应属性 作用
Originator_ID 始发者 ID 防止路由回到始发者
Cluster_List 集群列表 防止 RR 环路
iBGP 水平分割 - 被 RR 机制替代

八、思考

  1. Originator_ID 的作用是什么?由谁添加?
  2. Cluster_List 如何防止多级 RR 环境下的环路?
  3. 如果两台 RR 使用不同的 Cluster ID,它们之间会互相反射路由吗?为什么?
  4. 当 RR 收到一条 Originator_ID 等于自己的路由时,会如何处理?
  5. 在分层 RR 架构中,顶层 RR 的 Client 包括下层 RR,如何配置 Cluster ID?

下篇预告:第89篇《联邦(Confederation)解决 IBGP 扩展问题》——另一种 iBGP 扩展方案。