author:leadlife

data:2022/9/26

说明:该笔记作用与 BGP 路由反射器理论与命令参考讲解

参考视频:​​红茶三杯​

前置

我们先来回顾 BGP 的第一天学习知识:

BGP 路由反射器_BGP路由技术

直接的观察上图,我们发现存在一个中转 AS ( Transit AS ),可以很直接了笃定,如果 D,C 不起 BGP 路由协议,那么将造成 路由黑洞 的问题

但是如果起了 BGP ,我们就需要注意 IBGP 的 水平分割原则:我从一个 IBGP 学习到的路由,我将不会再转发给我的任何 IBGP 邻居。所以为了避免水平分割的原则,造成 timeout,我们必须再 AS-Transit 中起一个全互联的 ​​BGP neighbor​​ 关系,我们将这种中转关系叫做 ​​Full mesh neighbors​

这种情况其实很常见,可是 BGP 配置就已经够烦人了,关系到各种路由策略,我还的关心路由黑洞和水平分割,不得玩疯了?

这个时候啊,BGP 路由反射器就诞生了

中转 AS 中的 IBGP 问题:

  • AS 内要求 IBGP 全互联 ( IBGP 水平分割)
  • BGP Routers
  • 需维护大量的 TCP 及 BGP 连接
  • 网络中充斥着 BGP 路由信息
  • 解决方案
  • 路由反射器
  • BGP 联邦

0x01 路由反射器技术背景


关键字:Route Reflector == 路由反射器 RR

BGP 路由反射器_CCIE_02

观察上图:

因为 IBGP 水平分割原则,导致 AS 内部需要维护大量的 BGP 连接 (要求 IBGP 全互联 full mesh ),从而影响网络性能,路由反射器可以 "放宽" 水平分割原则,缓解该问题。

其实,说白了,我们就是不愿意,不想去给 R3 和 R5 起 BGP 邻居关系,这样会浪费网络性能

0x02 路由反射器基础


关于路由反射器 RR route reflector 我们可以将其形象的理解为一面镜子

观察下图:

BGP 路由反射器_CCIE_03

我们可以发现,存在一个 Client -> RR (Route Reflector) 的关系,

如果我们在 R4 上起路由反射器,将 R3 作为 Client,那么 R4 将会把从 R3 发送给 R4 的路由信息反射到 R5 上,从而使得 R5 跨越水平分割的屏障,学习到 R4 的路由。

0x03 路由反射规则 🔺


1:如果路由学习自非 Client IBGP Peer,则反射给所有 Client

2:如果路由学习自 Client,则反射给所有非 Client IBGP 邻居和除了该 Client 以外的所有 Client

3:如果路由学习自 EBGP Peer,则发送给所有 Client 和非 Client IBGP 邻居

BGP 路由反射器_CISCO_04

巩固实例 1:

BGP 路由反射器_思科_05

巩固实例 2:

BGP 路由反射器_思科_06

0x04 Route Reflector 防环路径属性 🔺


由于我们使用路由反射器去放宽水平分割原则,这样就回给环路带来一定隐患

通常 Route Reflector 部署在 Transit AS 内部,那么既然为 AS 内部,则 AS-Path 防环无效,为了避免水平分割与路由黑洞,起路由反射器,但我们也需要注意路由反射器的防环

Route Reflector 防环属性:

  • Originator_ID
  • Cluster_list

参考图:

BGP 路由反射器_思科_07

通过观察上图,我们可以发现:🔺

1:Originator_ID 是标记一个路由起源,即 R3 的 Router ID

2:Cluster_list,则是 RR 标记上去的一个反射簇

二者都类似于 AS-path 属性的防环特点

3:Originator_ID,在反射出去后会一直携带,且不改变值

4:Cluster_list,则每经过一次反射,会被 Route Reflector 路由器标记下自己的 Route ID 存在该 list 中

参考示例 1:

BGP 路由反射器_BGP路由技术_08

参考示例 2:🔺

这里每一个圈代表一个反射簇

R1 是 R2 的 Client

R1 是 R3 的 Client

R3 是 R4 的 Client

BGP 路由反射器_BGP路由技术_09

我们可以看到,反射器的路径属性优选方式为 Cluster list 少者优先,标记 Best

0x05 Route Reflector 部署冗余


BGP 路由反射特性属于 BGP 中的高级特性,其具备基本防环性质,同时可减少 BGP TCP 连接,为网络带来优化

所以,如果我们在 Transit AS 内部署路由反射,那么我们就必须考虑 Route Reflector 的冗余性。

如果我们不考虑反射器的冗余,一旦唯一的 RR 挂了,那么 BGP AS 内部,就是水平分割的天下了。

参考图:

BGP 路由反射器_BGP路由技术_10

  • 冗余 RR 增加了网络的健壮性
  • 使用 Originator_ID、Cluster_list 属性在冗余 RR 环境中避免路由环路 (该属性默认由 RR 携带并传递)
  • 将两个 RR 的 Cluster_ID 配置为一样,那么可以起到进一步的防环作用
  • 所有的 RR 之间采用 IBGP full mesh

0x06 Route Reflector 命令参考 🔺


命令示例:

router bgp 123
neighbor 1.1.1.1 remote-as 123
neighbor 1.1.1.1 update-source Loopback0
neighbor 1.1.1.1 route-reflector-client

!!! `基本配置路由反射器就一条命令,指定 Client,因为 Client 并不知道自己属于反射簇,只有 RR 知道`

`neighbor Client-ip-address route-reflector-client`

RR 可修改自己的 cluster-id

route-bgp 123
bgp cluster-id 222.222.222.222

实验参考图:

BGP 路由反射器_网络工程师_11

实验 topology 图参考

BGP 路由反射器_BGP路由技术_12

关键配置在于 Route-Reflector

Route-Refelctor(config-router)#neighbor 2.2.2.2 route-reflector-client

最后在 R4 验证,存在 Route-Reflector 反射过来的路由

R4#show ip bgp 
BGP table version is 3, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

Network Next Hop Metric LocPrf Weight Path
*>i100.1.1.0/24 2.2.2.2 0 100 0 100 i
*>i200.1.1.0 2.2.2.2 0 100 0 100 i

R4#show ip bgp 100.1.1.0
BGP routing table entry for 100.1.1.0/24, version 2
Paths: (1 available, best #1, table Default-IP-Routing-Table)
Flag: 0x820
Advertised to update-groups:
2
100
2.2.2.2 (metric 129) from 3.3.3.3 (3.3.3.3)
Origin IGP, metric 0, localpref 100, valid, internal, best
'Originator: 2.2.2.2, Cluster list: 3.3.3.3'

完整配置如下

!! R1

interface Loopback0
ip address 100.1.1.1 255.255.255.0
!
interface Loopback1
ip address 200.1.1.1 255.255.255.0
!
interface Serial0/0
ip address 10.1.1.1 255.255.255.0
!
router bgp 100
network 100.1.1.0 mask 255.255.255.0
network 200.1.1.0
neighbor 10.1.1.2 remote-as 234
!
end
!! Client

interface Loopback0
ip address 2.2.2.2 255.255.255.255
!
interface Serial0/0
ip address 10.1.1.2 255.255.255.0
!
interface Serial0/1
ip address 20.1.1.1 255.255.255.0
!
router ospf 1
network 2.2.2.2 0.0.0.0 area 0
network 20.1.1.1 0.0.0.0 area 0
!
router bgp 234
neighbor 3.3.3.3 remote-as 234
neighbor 3.3.3.3 update-source Loopback0
neighbor 3.3.3.3 next-hop-self
neighbor 10.1.1.1 remote-as 100
!
end
!! Route-Reflector

interface Loopback0
ip address 3.3.3.3 255.255.255.0
!
interface Serial0/1
ip address 20.1.1.2 255.255.255.0
!
interface Serial0/2
ip address 30.1.1.1 255.255.255.0
!
router ospf 1
network 3.3.3.3 0.0.0.0 area 0
network 20.1.1.2 0.0.0.0 area 0
network 30.1.1.1 0.0.0.0 area 0
!
router bgp 234
neighbor 2.2.2.2 remote-as 234
neighbor 2.2.2.2 update-source Loopback0
neighbor 2.2.2.2 route-reflector-client
neighbor 4.4.4.4 remote-as 234
neighbor 4.4.4.4 update-source Loopback0
!
end
!! R4

interface Loopback0
ip address 4.4.4.4 255.255.255.0
!
interface Serial0/0
ip address 40.1.1.1 255.255.255.0
!
interface Serial0/2
ip address 30.1.1.2 255.255.255.0
!
router ospf 1
network 4.4.4.4 0.0.0.0 area 0
network 30.1.1.2 0.0.0.0 area 0
!
router bgp 234
neighbor 3.3.3.3 remote-as 234
neighbor 3.3.3.3 update-source Loopback0
neighbor 40.1.1.2 remote-as 500
!
end
!! R5

interface Loopback0
ip address 5.5.5.5 255.255.255.255
!
interface Serial0/0
ip address 40.1.1.2 255.255.255.0
!
router bgp 500
neighbor 40.1.1.1 remote-as 234
!
end