BGP路由反射器

avatar
作者
猴君
阅读量:0

原理概述
缺省情况下,路由器从它的一个 IBGP对等体那里接收到的路由条目不会被该路由器再传递给其他IBGP对等体,这个原则称为BGP水平分割原则,该原则的根本作用是防止 AS内部的BGP路由环路。因此,在AS内部,一般需要每台路由器都运行 BGP协议并建立全互联的IBGP对等体关系,这样才能避免BGP路由黑洞等问题。对于有n个BGP路由器的AS来说,全互联的IBGP对等体关系将有n×(n-1)÷2个。对于大型AS来说,数量众多的IBGP对等体关系将导致配置和维护的工作量都非常大,且人为出错的可能性也随之增加。
解决上述问题的方法之一就是使用BGP路由反射器。BGP路由反射器的使用,可以在很大程度上减少大型AS中 IBGP对等体关系的数量并简化相应的配置和维护工作。BGP路由反射器是AS内部 IBGP网络环境中的一种特殊角色,其他的角色还有反射器的客户端和非客户端。一个反射器和它所有的客户端一起被统称为一个Cluster;客户端与它的反射器建立的是IBGP对等体关系;客户端之间无需建立IBGP对等体关系;非客户端和反射器建立的是IBGP对等体关系;非客户端之间需要建立全互连的IBGP对等体关系;非客户端和客户端之间无需建立IBGP对等体关系;一个AS内部可以有多个Cluster;一个Cluster中可以有多台反射器。另外,EBGP对等体之间是不存在 BGP路由反射器的概念的。
BGP路由反射器在反射路由的时候遵循的原则是:从一个非客户端那里接收到的路由,反射器会将它只传递给所有的客户端;从一个客户端那里接收到的路由,反射器会将它传递给所有其他的客户端以及所有的非客户端;从EBGP对等体那里接收到的路由,反射器会将它传递给所有的客户端和非客户端。


实验目的
理解 BGP路由反射器的应用场景·理解 BGP路由反射器的工作原理

掌握BGP路由反射器的基本配置方法实验内容

本实验网络包含了两个AS,两个Cluster。R1、R2、R3属于Cluster 1,R4、R5、R6属于Cluster 2,R7不属于任何Cluster。在AS 100内部,所有路由器都运行OSPF协议作为IGP,并将各自的Loopback 0接口宣告进OSPF进程中,使得各路由器可以使用Loopback 0接口来建立全互联的IBGP对等体关系。然后,为了减少配置工作量,决定使用路由反射器,要求是:在 Cluster 1中,R1为路由反射器,R2和R3为其客户端;在Cluster 2中,R4为路由反射器,R5、R6为其客户端;R7为非客户端;R1与R8为 EBGP对等体关系。

 

1、基础配置 R1: sys sysname R1 int loop 0 ip add 10.0.1.1 32 int g0/0/1 ip add 10.0.12.1 24 int g0/0/2 ip add 10.0.13.1 24 int g0/0/3 ip add 10.0.18.1 24 int g0/0/0 ip add 10.0.14.1 24 q bgp 100 router-id 10.0.1.1 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack 0 peer 10.0.2.2 next-hop-local peer 10.0.3.3 as-number 100 peer 10.0.3.3 connect-interface LoopBack 0 peer 10.0.3.3 next-hop-local peer 10.0.4.4 as-number 100 peer 10.0.4.4 connect-interface LoopBack 0 peer 10.0.4.4 next-hop-local peer 10.0.5.5 as-number 100 peer 10.0.5.5 connect-interface LoopBack 0 peer 10.0.5.5 next-hop-local peer 10.0.6.6 as-number 100 peer 10.0.6.6 connect-interface LoopBack 0 peer 10.0.6.6 next-hop-local peer 10.0.7.7 as-number 100 peer 10.0.7.7 connect-interface LoopBack 0 peer 10.0.7.7 next-hop-local network  10.0.1.1 32  peer 10.0.18.8 as-number 200 ospf 1 router-id 10.0.1.1  area 0.0.0.0   network 10.0.1.1 0.0.0.0   network 10.0.12.0 0.0.0.255   network 10.0.13.0 0.0.0.255   network 10.0.14.0 0.0.0.255  R2: sys sysname R2 int loop 0 ip add 10.0.2.2 32 int loop 1 ip add 10.0.22.22 32 int g0/0/1 ip add 10.0.12.2 24 q bgp 100 router-id 10.0.2.2 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack 0 peer 10.0.3.3 as-number 100 peer 10.0.3.3 connect-interface LoopBack 0 peer 10.0.4.4 as-number 100 peer 10.0.4.4 connect-interface LoopBack 0 peer 10.0.5.5 as-number 100 peer 10.0.5.5 connect-interface LoopBack 0 peer 10.0.6.6 as-number 100 peer 10.0.6.6 connect-interface LoopBack 0 peer 10.0.7.7 as-number 100 peer 10.0.7.7 connect-interface LoopBack 0 network 10.0.2.2  32 ospf 1 router-id 10.0.2.2  area 0.0.0.0   network 10.0.2.2 0.0.0.0   network 10.0.12.0 0.0.0.255  R3: sys sysname R3 int loop 0 ip add 10.0.3.3 32 int g0/0/2 ip add 10.0.13.3 24 q bgp 100 router-id 10.0.3.3 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack 0 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack 0 peer 10.0.4.4 as-number 100 peer 10.0.4.4 connect-interface LoopBack 0 peer 10.0.5.5 as-number 100 peer 10.0.5.5 connect-interface LoopBack 0 peer 10.0.6.6 as-number 100 peer 10.0.6.6 connect-interface LoopBack 0 peer 10.0.7.7 as-number 100 peer 10.0.7.7 connect-interface LoopBack 0 network 10.0.3.3 32 ospf 1 router-id 10.0.3.3  area 0.0.0.0   network 10.0.3.3 0.0.0.0   network 10.0.13.0 0.0.0.255  R4: sys sysname R4 int loop 0 ip add 10.0.4.4 32 int g0/0/0 ip add 10.0.14.4 24 int g0/0/1 ip add 10.0.47.4 24 int g0/0/2 ip add 10.0.46.4 24 int g0/0/3 ip add 10.0.45.4 24 q bgp 100 router-id 10.0.4.4 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack 0 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack 0 peer 10.0.3.3 as-number 100 peer 10.0.3.3 connect-interface LoopBack 0 peer 10.0.5.5 as-number 100 peer 10.0.5.5 connect-interface LoopBack 0 peer 10.0.6.6 as-number 100 peer 10.0.6.6 connect-interface LoopBack 0 peer 10.0.7.7 as-number 100 peer 10.0.7.7 connect-interface LoopBack 0 network 10.0.4.4  32 ospf 1 router-id 10.0.4.4  area 0.0.0.0   network 10.0.4.4 0.0.0.0   network 10.0.14.0 0.0.0.255   network 10.0.45.0 0.0.0.255   network 10.0.46.0 0.0.0.255   network 10.0.47.0 0.0.0.255  R5: sys sysname R5 int loop 0 ip add 10.0.5.5 32 int g0/0/1 ip add 10.0.45.5 24 q bgp 100 router-id 10.0.5.5 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack 0 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack 0 peer 10.0.3.3 as-number 100 peer 10.0.3.3 connect-interface LoopBack 0 peer 10.0.4.4 as-number 100 peer 10.0.4.4 connect-interface LoopBack 0 peer 10.0.6.6 as-number 100 peer 10.0.6.6 connect-interface LoopBack 0 peer 10.0.7.7 as-number 100 peer 10.0.7.7 connect-interface LoopBack 0 network 10.0.5.5  32 ospf 1 router-id 10.0.5.5  area 0.0.0.0   network 10.0.5.5 0.0.0.0   network 10.0.45.0 0.0.0.255  R6: sys sysname R6 int loop 0 ip add 10.0.6.6 32 int g0/0/2 ip add 10.0.46.6 24 q  bgp 100 router-id 10.0.6.6 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack 0 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack 0 peer 10.0.3.3 as-number 100 peer 10.0.3.3 connect-interface LoopBack 0 peer 10.0.5.5 as-number 100 peer 10.0.5.5 connect-interface LoopBack 0 peer 10.0.4.4 as-number 100 peer 10.0.4.4 connect-interface LoopBack 0 peer 10.0.7.7 as-number 100 peer 10.0.7.7 connect-interface LoopBack 0 network 10.0.6.6  32 ospf 1 router-id 10.0.6.6  area 0.0.0.0   network 10.0.6.6 0.0.0.0   network 10.0.46.0 0.0.0.255  R7: sys sysname R7 int loop 0 ip add 10.0.7.7 32 int g0/0/0 ip add 10.0.47.7 24 q bgp 100 router-id 10.0.7.7 peer 10.0.1.1 as-number 100 peer 10.0.1.1 connect-interface LoopBack 0 peer 10.0.2.2 as-number 100 peer 10.0.2.2 connect-interface LoopBack 0 peer 10.0.3.3 as-number 100 peer 10.0.3.3 connect-interface LoopBack 0 peer  10.0.4.4 as-number 100 peer 10.0.4.4 connect-interface LoopBack 0 peer 10.0.5.5 as-number 100 peer 10.0.5.5 connect-interface LoopBack 0 peer 10.0.6.6 as-number 100 peer 10.0.6.6 connect-interface LoopBack 0 network 10.0.7.7 32 ospf 1 router-id 10.0.7.7  area 0.0.0.0   network 10.0.7.7 0.0.0.0   network 10.0.47.0 0.0.0.255  R8: sys sysname R8 int loop 0 ip add 10.0.8.8 32 int g0/0/0 ip add 10.0.18.8 24 q bgp 200  router-id 10.0.8.8  peer 10.0.18.1 as-number 100  #  ipv4-family unicast   undo synchronization   network 10.0.8.8 255.255.255.255   peer 10.0.18.1 enable   

 可以看到,AS 100内部的路由器都已经接收到了关于10.0.8.8/32的路由信息。R8只接收到了关于10.0.1.1/32的路由信息,而没有接收到关于AS 100内部其他路由器的Loopback 0 的路由信息,这是因为AS 100内部OSPF路由协议的优先级要高于BGP路由协议的优先级,于是R1就不会将除了本地起源(即下一跳为0.0.0.0)的路由之外的其他路由信息传递给R8。显然,这会导致R8与AS 100内部的路由器的互通问题。为了使R8能够与AS 100内部的所有路由器的Loopback 0接口所在的网络进行通信,可以在R8上配置一条聚合的静态路由,下一跳为10.0.18.1。
[R8]ip route-static 10.0.0.0 20 10.0.18.1
配置完成后,网络通信正常,但是整体配置工作量较大。

 对于大型网络来讲,使用路由反射器可以大大减少IBGP对等体关系的数量。路由反射器的使用,会明显减少配置工作量,人为出错的可能性也会大大降低。
下面将进行关于路由反射器的实验,首先清除之前各路由器上的BGP进程。在此需要提醒读者的是,在实际场景中如果这样操作,将会导致网络瘫痪一段时间。
以R1为例,清除原来的BGP进程。

undo bgp 100

R2和R3是路由反射器R1的客户端,它们只需和R1配置成IBGP对等体关系即可,R2和R3之间无需配置为IBGP对等体关系。另外,将R2的Loopback 1 (10.0.22.22/32)接口通告进 BGP进程。

配置R1为R2和R3的路由反射器,配置Cluster-ID为1,配置Rl与R4之间的IBGP对等体关系,配置RI与R8之间的EBGP对等体关系。

 

r1:  bgp 100  router-id 10.0.1.1  peer 10.0.4.4 as-number 100  peer 10.0.4.4 connect-interface LoopBack0  peer 10.0.18.8 as-number 200  group in1 internal  peer 10.0.2.2 as-number 100  peer 10.0.2.2 group in1  peer 10.0.3.3 as-number 100  peer 10.0.3.3 group in1  #  ipv4-family unicast   undo synchronization   reflector cluster-id 1   peer 10.0.4.4 enable   peer 10.0.4.4 next-hop-local   peer 10.0.18.8 enable   peer in1 enable   peer in1 reflect-client   peer in1 next-hop-local   peer 10.0.2.2 enable   peer 10.0.2.2 group in1   peer 10.0.3.3 enable   peer 10.0.3.3 group in1    r2:  bgp 100  router-id 10.0.2.2  peer 10.0.1.1 as-number 100  peer 10.0.1.1 connect-interface LoopBack0  #  ipv4-family unicast   undo synchronization   network 10.0.0.0   network 10.0.2.2 255.255.255.255   network 10.0.22.22 255.255.255.255   peer 10.0.1.1 enable    r3:  bgp 100  router-id 10.0.3.3  peer 10.0.1.1 as-number 100  peer 10.0.1.1 connect-interface LoopBack0  #  ipv4-family unicast   undo synchronization   network 10.0.3.3 255.255.255.255   peer 10.0.1.1 enable  r8: bgp 200  router-id 10.0.8.8  peer 10.0.18.1 as-number 100  #  ipv4-family unicast   undo synchronization   network 10.0.8.8 255.255.255.255   peer 10.0.18.1 enable  

 R5和R6是路由反射器R4的客户端,它们只需和R4配置成IBGP对等体关系即可,R5和R6之间无需配置为IBGP对等体关系。

配置R4为R5 和R6的路由反射器,配置Cluster-ID为2,配置R4与R1之间的IBGP对等体关系,配置R4与R7之间的IBGP对等体关系。

r4: bgp 100  router-id 10.0.4.4  peer 10.0.1.1 as-number 100  peer 10.0.1.1 connect-interface LoopBack0  peer 10.0.7.7 as-number 100  peer 10.0.7.7 connect-interface LoopBack0  group in2 internal  peer 10.0.5.5 as-number 100  peer 10.0.5.5 group in2  peer 10.0.6.6 as-number 100  peer 10.0.6.6 group in2  #  ipv4-family unicast   undo synchronization   reflector cluster-id 2   peer 10.0.1.1 enable   peer 10.0.7.7 enable   peer in2 enable   peer in2 reflect-client   peer 10.0.5.5 enable   peer 10.0.5.5 group in2   peer 10.0.6.6 enable   peer 10.0.6.6 group in2   r5: bgp 100  router-id 10.0.5.5  peer 10.0.4.4 as-number 100  peer 10.0.4.4 connect-interface LoopBack0  #  ipv4-family unicast   undo synchronization   network 10.0.5.5 255.255.255.255   peer 10.0.4.4 enable  r6: bgp 100  router-id 10.0.6.6  peer 10.0.4.4 as-number 100  peer 10.0.4.4 connect-interface LoopBack0  #  ipv4-family unicast   undo synchronization   network 10.0.6.6 255.255.255.255   peer 10.0.4.4 enable  r7: bgp 100  router-id 10.0.7.7  peer 10.0.4.4 as-number 100  peer 10.0.4.4 connect-interface LoopBack0  #  ipv4-family unicast   undo synchronization   network 10.0.7.7 255.255.255.255   peer 10.0.4.4 enable    

观察发现,R3、R4、R8的BGP路由表中都存在关于10.0.22.22/32的路由信息。由此可见,R1将10.0.22.22/32这条路由传递给了R3和R4,不再受BGP水平分割原则的限制,同时,这条路由也被R1传递给了EBGP对等体R8。实验表明,BGP路由反射器从它的一个客户端接收到路由之后,会将该路由反射给它的其他客户端、非客户端,以及EBGP对等体。


可以看到,R4将10.0.22.22/32这条路由传递给了R5和R6,但是没有传递给R7,说明路由反射器会把从非客户端收到的路由传递给客户端,但不会传递给其他非客户端。由于路由反射器认为非客户端之间应该是存在IBGP对等体关系的,所以路由反射器和非客户端之间依然遵循水平分割原则。
路由反射器R4认为R1与R7之间应该存在IBGP对等体关系,所以没有将从非客户端R1接收到的BGP路由传递给R7。

但实际上,R1与R7之间并没有被配置为IBGP对等体关系,这就导致了R7的 BGP路由表中并没有关于10.0.22.22/32的路由。解决此问题的办法就是将R1和R7配置为IBGP对等体关系。

r1: bgp 100  peer 10.0.7.7 as-number 100  peer 10.0.7.7 connect-interface LoopBack0   peer 10.0.7.7 next-hop-local r7: bgp 100  peer 10.0.1.1as-number 100  peer 10.0.1.1 connect-interface LoopBack0   peer 10.0.1.1 next-hop-local

 可以看到,R7上的10.0.22.22/32这条路由信息是从R1 (10.0.1.1)传递过来的,而不是从R4传递过来的,这说明路由反射器和非客户端之间是遵循水平分割原则的。

可以看到,R1 从 EBGP对等体R8接收到关于10.0.8.8/32的路由之后,将这条路由传递给了R2、R3、R4,说明路由反射器会把从EBGP对等体接收到的路由传递给它的客户端和非客户端。

在前面的配置中,R1上使用了命令peer in_1 reflect-client。这条命令的含义是指定BGP对等体组in_1中的路由器(即R2和R3)为R1的客户端,从相反的角度来说,也就是R1被指定成为BGP对等体组in_1中的路由器(即R2和R3)的路由反射器。
在R1、R3、R4上查看10.0.22.22/32这条路由的具体属性。

 

 

可以观察到,在R1、R3、R4上关于10.0.22.22/32的路由的属性是有所区别的。在R3和R4上关于此路由多了Originator和 Cluster List这两个属性。Originator 属性的作用是防止路由在反射器和客户端/非客户端之间出现环路。路由第一次被反射的时候,反射器会将Originator 属性加入这条路由中,用 BGP Router-ID表示,用来标识这条路由的起源路由器。如果路由中已经存在Originator属性,则反射器不会创建新的Originator。当其他BGP对等体接收到这条路由时,将对收到的Originator和本地的BGP Router-ID进行比较,如果两者相同,BGP对等体将会忽略掉这条路由,不做处理。Originator属性可以传递给其他的Cluster,路由在AS内传递时该属性不会丢失。
Cluster List属性可用来防止 Cluster间的路由环路。当路由反射器在客户端之间或客户端与非客户端之间反射路由时,会将自己的Cluster-ID添加到Cluster List 中。路由反射器接收到BGP路由后会去检查其中的Cluster List,如果发现自己的Cluster-ID位于Cluster List 中,则表明出现了路由环路,因而会忽略该路由。AS内的每台路由反射器都采用了一个唯一的4个8位组来标识Cluster-ID,如果 Cluster中包含了多台路由反射器,则必须以手工的方式为每台路由反射器配置Cluster-ID。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!