「BGP」- 路由反射器(Route Reflector)

  CREATED BY JENKINSBOT

问题描述

R1 向 BGP 发布 10.0.1.0/24 路由,
R2 从 R1 学习到该路由,并且将其通告给 R3,
R3 从 R2 学习到的这条 IBGP Route,但鉴于水平分割规则,故而 R3 不能向 R4 及 R5 通告;

解决方案

Router Reflector(RR,路由反射器)技术能够解决该问题。

原理简述

1)将某台路由配置为 Router Reflector(RR)角色后,其他所有路由器都与 RR 建立 IBGP Peer 关系;
2)当 RR 学到路由后,首先使用 BGP 选路策略来选择最佳路由,然后将路由反射出去;
3)从而使得 IBGP Route 在 Intra-AS 传播无需建立 IBGP Full Mesh;

特性说明

引入路由反射器,可以简化 IBGP Full Mesh 需求,也可以减轻网络和 CPU 的负担。

概念术语

路由角色

当引入路由反射器后,存在如下几种角色:
1)RR(Route Reflector):路由反射器;允许把从 IBGP 对等体学到的路由反射到其他 IBGP 对等体的 BGP 设备,类似 OSPF 网络中的 DR。
2)RR Client:路由反射器客户端;与 RR 形成反射邻居关系的 IBGP 设备。在 AS 内部客户机只需要与 RR 直连。
3)Non-Client:非客户机;既非 RR 亦非 Client 的 IBGP 设备。在 AS 内,部非客户机与 RR 之间,以及所有的非客户机之间仍然必须建立全互联关系。

Originator(始发者):在 AS 内部始发路由的设备。
Cluster(集群):路由反射器及其客户机的集合。

当配置路由反射器时:
1)需要将一台 BGP Router 指定为 RR 的同时,还需要指定其关联 Client;
2)至于 Client 本身,无需做任何配置,它并不知晓网络中存在 RR 设备;

路由反射簇(Cluster、Cluster ID)

路由反射簇包括反射器 RR 及其 Client;一个 AS 内允许存在多个路由反射簇。

每一个簇都有唯一的簇标识(Cluster_ID,缺省时为 RR 的 BGP Router ID )。

反射规则

在向 IBGP Peer 发布学习到的路由信息时,RR 会按照一定规则来发布路由。

当路由反射器执行路由反射时,它只将自己使用的、最优的 BGP Route 进行反射;
当路由反射时,不会修改 Next_Hop、AS_Path、 Local_Preference、MED 路径属性,否则可能产生路由环路;

注意此处“反射”和“发送”的区别:
1)“发送”指的是传统情况下(相当于 RR 不存在的场景下)的 BGP 路由传递行为,
2)而“反射”指的是遵循路由反射规则的情况下,RR 执行的路由传递动作,被反射出去的路由会被 RR 插入特殊的路径属性。

当 RR 接收 BGP Route 时:

路由来自客户端(通告所有)

2)如果 RR 从自己的 Client 学习到一条 IBGP Route,则它会将该路由反射给所有 IBGP Peer(Client 与 Non-Client);

路由来自非客户端(仅内部)

1)如果 RR 从自己的 Non-Client 学习到一条 IBGP Route,则它仅将该路由反射给所有 RR Client;

路由来自对等体(全部通告)

3)如果 RR 从 EBGP Peer 学习到路由, 则发送给所有 IBGP Peer(Client 与 Non-Client) ⇒ 这也是正常通告原则;

路由防环

RR 的设定使得 IBGP Split-Horizon 原则失效,这就可能导致环路的产生。

为此 RR 会为 BGP Route 添加两个特殊的 Path Attribute 来避免出现环路:
1)Originator_ID,属于可选过渡类型;
2)Cluster_List,也属于可选过渡类型;

配置案例

针对开始的问题,将 R3 设置为 RR,而 R4、R5 作为 R3 的客户端,这样 R4、R5 即可正常学习到 BGP 路由 10.0.1.0/24:

# 缺省情况下,BGP 未配置路由反射器及其客户。
[Huawei-bgp] peer {group-name | ipv4-address } reflect-client

# 缺省情况下,每个路由反射器使用自己的 Router ID 作为 Cluster ID;
[Huawei-bgp] reflector cluster-id cluster-id

常见组网

为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的 RR。

备份 RR 组网

在转发路径上的路由器,均与所有 RR 建立 IBGP 关系,任意 RR 均有完整的 BGP 路由。

RR1 和 RR2,在同一个集群内,且相同的 Cluster ID 配置。

单级 RR 组网路由反射原理(图示以 RR1 的反射路径为例):
1)当 RR Client1 从 EBGP Peer 接收到一条更新路由,它将通过 IBGP 向 RR1 和 RR2 通告这条路由。
2)RR1 和 RR2 在接收到该更新路由后,将本地 Cluster ID 添加到 Cluster List 前面,然后向其他的客户机(Client2)反射,同时相互反射。
3)RR1 和 RR2 在接收到该反射路由后,检查 Cluster List,发现自己的 Cluster ID 已包含在 Cluster List 中,于是 RR1 和 RR2 丢弃该更新路由,以避免路由环路。

多集群 RR 组网:同级

一个 AS 中可以存在多个集群,各个集群的 RR 之间建立 IBGP 对等体。

当 RR 所处的网络层相同时,可以将不同集群的 RR 全互联,形成 同级 RR
同个骨干网的 AS 可能被分成多个 RR Cluster,各集群的 RR 互为 Non-Client 的 IBGP Full Mesh;
虽然每个 Client 只与所在集群的 RR 建立 IBGP 连接,但所有 RR 和客户机都能收到全部路由信息;

如图所示:四个 RR 分别处于 Cluster1、Cluster2、Cluster3、Cluster4 中,它们之间互相建立 IBGP 连接,而每个客户机只与所在集群内的 RR 建立 IBGP 连接。

多集群 RR 组网:分级

一个 AS 中可以存在多个集群,各个集群的 RR 之间建立 IBGP 对等体。

当 RR 所处的网络层不同时,可以将较低网络层次的 RR 配成客户机,形成 Hierarchical RR(分级 RR)。

在实际的 RR 部署中,常用的是分级 RR 的场景。

如图所示,AS101 内部分为三个集群:
其中 Cluster1 内的四台设备是核心路由器,采用备份 RR 的形式保证可靠性。Cluster1 部署了两个 1 级-RR,其余两台路由器作为 1 级-RR 的客户机。
Cluster2 和 Cluster3 中分别部署了一个 2 级-RR,而 2 级-RR 同时也是 1 级-RR 的客户机。两个 2 级-RR 之间无需建立 IBGP 连接关系。

分级 RR 与单级 RR 的路由发布规则相同。

分级 RR 设计需要考虑两个因素:
1)顶层全互联的拓扑大小:如果 IBGP Full Mesh 数量已经多到难以管理了,则可考虑引入 RR 分级部署。
2)可替代路径的数量:该因素影响负载分担和资源消耗。越多的层次越会减少负载分担链路的数量,但需要的路由器资源更少。

单集群问题

如图 AS101 采用备份 RR 组网,RR1 和 RR2 使用相同的 Cluster ID,两台 RR 为 R1 访问 10.1.5.5/32 提供冗余链路。
R4 通告 10.1.5.5/32 路由后,两台 RR 向 R1 通告,并相互之间通告。

但是由于 RR1 和 RR2 有相同的 Cluster ID,防环机制而导致 RR 间的更新消息会被丢弃:
假设 R3 和 R4 间的 IBGP 会话失效(例如错误配置),由于 R3 忽略 R2 通告的 10.1.5.5/32 路由,所以 R1 访问 10.1.5.5/32 就没有冗余链路;
此时 R1 必须通过 R2 来访问 10.1.5.5/32 网路;

为了在基于 RR 的架构中提供所期望的冗余,正确的集群划分是非常重要的。多集群设计不仅提供了针对链路失效的物理冗余,同时提供了针对客户机与 RR 之间的 IBGP 会话失效的逻辑冗余。

如图,将 R2 和 R4 划入 Cluster1 中,将 R3 和 R4 划入 Cluster2 中。
当 R3 和 R4 间的 IBGP 会话失效后,R3 仍然可以继续转发流量,因为 R3 会学习 R2 通告的 10.1.5.5/32 路由。