一、什么是RR

RR(Route Reflector):路由反射器

由于水平分割的原因,为了保证AS内所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联。

然而实现IBGP全互联存在诸多短板:

 路由器需维护大量的TCP及BGP连接,尤其在路由器数量较多时。

 AS内BGP网络的可扩展性较差,因为通过纯手工配置命令。

为了解决该问题,可应用到RR路由反射器技术。

二、RR的工作原理/反射规则

bgp中存在rr客户端和非客户端 bgp 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的中间节点位置:

bgp中存在rr客户端和非客户端 bgp rr作用_bgp中存在rr客户端和非客户端_02

 2、以及IBGP邻居之间链路连接较少的场景,可通过指定多个RR进行解决。

bgp中存在rr客户端和非客户端 bgp rr作用_客户端_03

 3、以及网络中互联链路较多时,可设置全网中与其它设备连接链路最多的设备作用RR设备,便于进行路由反射。

bgp中存在rr客户端和非客户端 bgp rr作用_网络_04

四、RR反射簇

 RR和客户之间所构成的关系我们称为反射簇(Cluster),通俗理解就是一个反射集合或一个反射的环境。

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

 一个AS内允许存在多个路由反射簇,如下图:

[R2作用R1的RR设备,也作用R2的客户端设备]

bgp中存在rr客户端和非客户端 bgp rr作用_bgp中存在rr客户端和非客户端_05

 下图的场景中,例如Client2既属于反射簇RR1,也属于反射簇RR2中。

bgp中存在rr客户端和非客户端 bgp rr作用_网络_06

五、RR带来的环路问题

1、问题来了,RR设置好了客户端与非客户端,解决了IBGP不能传递给IBGP的问题,为什么还要设计出反射簇呢?

假设出现下图环境,R1将学习到的路由传递给RR1时,RR1会将路由反射给RR2,RR2也会将路由再次反射给R1,如此循环反复下来导致路由环路。

bgp中存在rr客户端和非客户端 bgp rr作用_OSPF_07

bgp中存在rr客户端和非客户端 bgp rr作用_网络_08

但如果有了折射簇概念,R1与RR1属于反射簇1,R1与RR2属于反射簇2。

 当RR1将R1路由反射出去时,会将自己的RID记录在反射路由中cluster-list路径属性中。

 当RR2将路由重新反射回RR1时,RR1发现反射路由中的cluster-list记录有自己的RID,故不会再进行反射操作。

由此解决了路由重复反射的问题。

bgp中存在rr客户端和非客户端 bgp rr作用_bgp中存在rr客户端和非客户端_09

2、虽然解决了RR环境中路由反射环路的问题,但可以注意到由R1发出的路由,居然从R3或R4中再次学习到。

因为路由反射的原因,R1会收到自己发出的路由。

这可能会导致R1发布的路由断开时,使用到R3或R4反射而来的路由,从而造成新的环路。

为此,针对该情况,RR会在路由反射出去之前在反射路由的Originator ID属性中标注该路由的发布者,也就是R1。

而后续的RR再次对该路由进行反射的时候,Originator ID将不再改变。

bgp中存在rr客户端和非客户端 bgp rr作用_网络_10

六、RR案例配置

(1)普通 RR反射案例

bgp中存在rr客户端和非客户端 bgp rr作用_bgp中存在rr客户端和非客户端_11

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)为客户端。

bgp中存在rr客户端和非客户端 bgp rr作用_bgp中存在rr客户端和非客户端_12

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、再查看一下学习到路由详细信息

bgp中存在rr客户端和非客户端 bgp rr作用_R3_13