一、什么是RR
RR(Route Reflector):路由反射器
由于水平分割的原因,为了保证AS内所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联。
然而实现IBGP全互联存在诸多短板:
路由器需维护大量的TCP及BGP连接,尤其在路由器数量较多时。
AS内BGP网络的可扩展性较差,因为通过纯手工配置命令。
为了解决该问题,可应用到RR路由反射器技术。
二、RR的工作原理/反射规则
如上图,R1与R2、R3建立了BGP邻居,但R2与R3并没有建立,设置R1为网络中的RR设备,并指定R2为RR反射器客户端。
当R2学习到R4传来的EBGP路由会传递给R1,R1将客户端学习到的路由反射给非客户端R3,为此R3就能够学习到了R2的路由。
注意:R3学习到反射过来的路由,其下一跳仍是R2,不会因为反射之后而修改下一跳地址。
此时可能会疑惑,R2与R3并没有建立BGP邻居,如果下一跳是R2,R3还能访问到学习到的R4网络嘛?
答:可以,因为R2与R3同属于一个IGP(OSPF)中,故R3知道R2的位置。当R3访问R4时会通过IGP将数据传递给R2进行转发。
RR客户端与非客户端
前面提到某某设备设置为客户端,其它设备为非客户端,那么这些身份在RR反射器环境中起到什么作用呢?
1、Client:RR客户端,在RR设备上通过手动指定。
指定命令:peer 邻居 reflect-client
2、除了指定的设备为客户端,其它设备均为非客户端。
RR在接收BGP路由时:
如果收到非客户端传来的BGP路由,则会反射给所有客户端。
如果收到客户端传来的BGP路由,则会反射给所有设备(指与RR建立邻居关系的设备)
如果RR学习到EBGP邻居传来的EBGP路由,则发送给所有客户、非客户IBGP对等体(类似于与RR建立邻居关系的所有设备)。
对于RR的反射规则有一句口诀:非非不传,其它都传。
关于非非不传,指的是非客户端不传非客户端。
三、RR设备的位置讲究
什么样的设备适合做RR反射器?
1、网络设备可承载的路由条目数量较多的,但基于RR所处位置其要求也不固定。
(1)如果RR作用骨干网控制层面的核心设备,RR不仅需要完成路由反射工作还需要承载大规模的路由条目。
(2)如果RR处于旁挂,仅用于路由反射工作,其承载条目可不作过多要求。
2、支持建立BGP对等关系数量较多的。
因为RR进行反射路由的前提就是需要与其它BGP邻居建立对等关系,所以支持对等关系的数量也是RR设备选择的要点。
3、CPU、内存较好的设备(以便RR能够与更多的BGP设备互联,与能够承载更多的路由条目与反向路由速度)。
4、转发层面较为空闲的设备 作为反射器。
如何在BGP网络中选择RR部署位置?
基于对RR设备的一些基础需求而定,其次再结合现网的环境选择出最合适进行路由反射的节点。
1、如下图,常见的RR通常会设置在IBGP的中间节点位置:
2、以及IBGP邻居之间链路连接较少的场景,可通过指定多个RR进行解决。
3、以及网络中互联链路较多时,可设置全网中与其它设备连接链路最多的设备作用RR设备,便于进行路由反射。
四、RR反射簇
RR和客户之间所构成的关系我们称为反射簇(Cluster),通俗理解就是一个反射集合或一个反射的环境。
每一个簇都有唯一的簇ID(Cluster_ID,缺省时为RR的BGP Router ID )
一个AS内允许存在多个路由反射簇,如下图:
[R2作用R1的RR设备,也作用R2的客户端设备]
下图的场景中,例如Client2既属于反射簇RR1,也属于反射簇RR2中。
五、RR带来的环路问题
1、问题来了,RR设置好了客户端与非客户端,解决了IBGP不能传递给IBGP的问题,为什么还要设计出反射簇呢?
假设出现下图环境,R1将学习到的路由传递给RR1时,RR1会将路由反射给RR2,RR2也会将路由再次反射给R1,如此循环反复下来导致路由环路。
但如果有了折射簇概念,R1与RR1属于反射簇1,R1与RR2属于反射簇2。
当RR1将R1路由反射出去时,会将自己的RID记录在反射路由中cluster-list路径属性中。
当RR2将路由重新反射回RR1时,RR1发现反射路由中的cluster-list记录有自己的RID,故不会再进行反射操作。
由此解决了路由重复反射的问题。
2、虽然解决了RR环境中路由反射环路的问题,但可以注意到由R1发出的路由,居然从R3或R4中再次学习到。
因为路由反射的原因,R1会收到自己发出的路由。
这可能会导致R1发布的路由断开时,使用到R3或R4反射而来的路由,从而造成新的环路。
为此,针对该情况,RR会在路由反射出去之前在反射路由的Originator ID属性中标注该路由的发布者,也就是R1。
而后续的RR再次对该路由进行反射的时候,Originator ID将不再改变。
六、RR案例配置
(1)普通 RR反射案例
R1
1、配置接口地址
interface G0/0/0
ip address 10.1.12.1 24
#
2、配置OSPF
ospf 1
area 0
network 10.1.12.1 0.0.0.0
#
3、配置BGP
bgp 100
peer 10.1.12.2 as-number 100
network 192.168.10.0
#
R2
1、配置接口地址
interface G0/0/0
ip address 10.1.12.2 24
#
interface G0/0/1
ip address 10.1.23.2 24
#
2、配置OSPF
ospf 1
a 0
network 10.1.12.2 0.0.0.0
network 10.1.23.2 0.0.0.0
3、配置BGP与RR,基于非非不传规则,在这个场景中设置一个客户端即可
bgp 100
peer 10.1.12.1 as-number 100
peer 10.1.23.3 as-number 100
peer 10.1.12.1 reflect-client
R3
1、配置接口地址
interface G0/0/0
ip address 10.1.23.3 24
2、配置OSPF
ospf 1
a 0
network 10.1.23.3 0.0.0.0
3、配置BGP
bgp 100
peer 10.1.23.2 as-number 100
检测结果
1、R3上查看BGP路由表,检查是否学习到BGP路由
<R3>dis bgp routing-table
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 192.168.10.0 10.1.12.1 0 100 0 i
2、如果没有学习到路由,可回头检查一下各自的BGP邻居是否建立
<R2>display bgp peer
BGP local router ID : 10.1.12.2
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.1.12.1 4 100 119 116 0 01:54:55 Established 1
10.1.23.3 4 100 116 119 0 01:54:50 Established 0
(2)多RR反射簇案例
疑惑点:为什么RR2会把RR1设置成为客户端呢?
因为RR1会反射路由给RR2,如果RR1为非客户端,那么对于RR2的非客户端而言,就需要学习到RR1的路由。
主要还是非非不传的规则,最优的方法就是设置RR1(即R2)为客户端。
R1
1、配置接口地址
interface G0/0/0
ip address 10.1.12.1 24
#
2、配置OSPF
ospf 1
area 0
network 10.1.12.1 0.0.0.0
#
3、配置BGP
bgp 100
peer 10.1.12.2 as-number 100
network 192.168.10.0
#
R2
1、配置接口地址
interface G0/0/0
ip address 10.1.12.2 24
#
interface G0/0/1
ip address 10.1.23.2 24
#
2、配置OSPF
ospf 1
a 0
network 10.1.12.2 0.0.0.0
network 10.1.23.2 0.0.0.0
3、配置BGP与RR,基于非非不传规则,在这个场景中设置一个客户端即可
bgp 100
peer 10.1.12.1 as-number 100
peer 10.1.23.3 as-number 100
peer 10.1.12.1 reflect-client
R3
1、配置接口地址
interface G0/0/0
ip address 10.1.23.3 24
interface g0/0/1
ip address 10.1.34.3 24
2、配置OSPF
ospf 1
a 0
network 10.1.23.3 0.0.0.0
network 10.1.34.3 0.0.0.0
3、配置BGP与RR,基于非非不传规则,在这个场景中需要设置R2为客户端。
bgp 100
peer 10.1.23.2 as-number 100
peer 10.1.23.2 reflect-client
peer 10.1.34.4 as-number 100
R4
1、配置接口地址
interface G0/0/0
ip address 10.1.34.4 24
#
2、配置OSPF
ospf 1
area 0
network 10.1.34.4 0.0.0.0
#
3、配置BGP
bgp 100
peer 10.1.34.3 as-number 100
#
检查结果
1、R4上查看BGP路由表,检查是否学习到BGP路由
<R4>dis bgp routing-table
Total Number of Routes: 1
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 192.168.10.0 10.1.12.1 0 100 0 i
2、再查看一下学习到路由详细信息