解决BGP路由黑洞

 

 

   R2、R3和R4之间运行ospf协议,并在R2和R3、R3和R4之间使用回环口建立IBGP邻居。
R1的配置
router bgp 100
 no synchronization
 bgp router-id 1.1.1.1
 bgp log-neighbor-changes
 network 1.1.1.0 mask 255.255.255.0
 neighbor 192.1.12.2 remote-as 234
 no auto-summary
 
R2的配置
router bgp 234
 no synchronization
 bgp router-id 2.2.2.2
 bgp log-neighbor-changes
 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 192.1.12.1 remote-as 100
 no auto-summary
 
R3的配置
router bgp 234
 no synchronization
 bgp router-id 3.3.3.3
 bgp log-neighbor-changes
 neighbor 2.2.2.2 remote-as 234
 neighbor 2.2.2.2 update-source Loopback0
 neighbor 4.4.4.4 remote-as 234
 neighbor 4.4.4.4 update-source Loopback0
 no auto-summary
 
R4的配置
router bgp 234
 bgp router-id 4.4.4.4
 bgp cluster-id 3288400129
 bgp log-neighbor-changes
 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 192.1.45.5 remote-as 500
 
R5的配置
router bgp 500
 no synchronization
 bgp router-id 5.5.5.5
 bgp cluster-id 3221302533
 bgp log-neighbor-changes
 network 5.5.5.0 mask 255.255.255.0
 neighbor 192.1.45.4 remote-as 234
 no auto-summary
R1的1.1.1.0这条路由可以传递给R2和R3,但是R4却收不到?
r3#sh ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal
Origin codes: i - IGP, e - EGP, ? - incomplete
 
   Network          Next Hop            Metric LocPrf Weight Path
*>i1.1.1.0/24        2.2.2.2                  0    100      0 100 i
 
r3#
r4#sh ip bgp
想一想为什么呢?
主要由于ibgp遵循水平分割的原则,即从一个ibgp邻居学习到的路由不会再传给另一个ibgp邻居,这样就形成了路由黑洞,怎么去解决呢?
方法有三种:
(1)在r1、r2和r3之间建立full mesh(全互联)的ibgp邻居关系,这样就会建立大量的IGBP邻居关系,会消耗设备的大量资源,配置复杂,不推荐。
(2)使用联邦AS(有些书上也叫BGP联盟:bgp confederation)
为了解决建立大量的IBGP邻居关系,可以使用联邦AS。可以这样理解联邦as,联邦as是由一组子自治系统组成,它们共享一个联邦AS号,该联邦AS号被联邦之外的对等体视为整个联邦的名字(AS号),外部的对等体是无法看见联邦的内部结构的。
针对本例,可以在AS 234内划分两个小的AS,将r2和R3组成AS 65012,R4组成AS 65014,建立联邦AS时通常会使用私有的AS
 

具体配置如下:

R1的配置

router bgp 100

 no synchronization

 bgp router-id 1.1.1.1

 bgp cluster-id 167838721

 bgp log-neighbor-changes

 network 1.1.1.0 mask 255.255.255.0

 neighbor 192.1.12.2 remote-as 234

 no auto-summary

R2的配置

router bgp 65012

 no synchronization

 bgp router-id 2.2.2.2

 bgp cluster-id 2886730753

 bgp log-neighbor-changes

 bgp confederation identifier 234

 neighbor 3.3.3.3 remote-as 65012

 neighbor 3.3.3.3 update-source Loopback0

 neighbor 3.3.3.3 next-hop-self

 neighbor 192.1.12.1 remote-as 100

 no auto-summary

R3的配置

router bgp 65012

 no synchronization

 bgp router-id 3.3.3.3

 bgp cluster-id 3232236289

 bgp log-neighbor-changes

 bgp confederation identifier 234

 bgp confederation peers 65014

 neighbor 2.2.2.2 remote-as 65012

 neighbor 2.2.2.2 update-source Loopback0

 neighbor 4.4.4.4 remote-as 65014

 neighbor 4.4.4.4 ebgp-multihop 255

 no auto-summary

R4的配置

router bgp 65014

 no synchronization

 bgp router-id 4.4.4.4

 bgp cluster-id 3288400129

 bgp log-neighbor-changes

 bgp confederation identifier 234

 bgp confederation peers 65012

 neighbor 3.3.3.3 remote-as 65012

 neighbor 3.3.3.3 ebgp-multihop 255

 neighbor 3.3.3.3 update-source Loopback0

 neighbor 3.3.3.3 next-hop-self

 neighbor 192.1.45.5 remote-as 500

 no auto-summary

R5的配置

router bgp 500

 no synchronization

 bgp router-id 5.5.5.5

 bgp cluster-id 3221302533

 bgp log-neighbor-changes

 network 5.5.5.0 mask 255.255.255.0

 neighbor 192.1.45.4 remote-as 234

 no auto-summary

在配置过程中r2r1建立邻居和r4r5建立邻居会收到如下信息:

r2(config-router)#

00:28:45: %BGP-3-NOTIFICATION: received from neighbor 192.1.12.1 2/2 (peer in wrong AS) 2 bytes FDF4

 

r4(config-router)#

00:30:27: %BGP-3-NOTIFICATION: received from neighbor 192.1.45.5 2/2 (peer in wrong AS) 2 bytes FDF6

原因在于联盟中的路由器还不识别联盟,需要打上以下命令:

bgp confederation identifier 234

3)第三种方法:使用路由反射器(Router Reflector)

路由反射器对于解决AS内建立大量IBGP邻居时非常有用。

路由反射器和其客户端共同组成路由反射簇。可以把路由反射簇看成一个单独的路由器,对于客户端只需要与路由反射器建立邻居即可,不需要与每台ibgp路由器建立邻居。

一个自治系统内可以创建多个路由反射簇。

路由反射器的规则:对于路由反射器来说

1、  从一个客户端传递的路由条目会反射给另一个客户端,会反射给非客户端,会反射给EBGP邻居。

2、  从一个非客户端传递的路由条目会反射给另一个客户端,会反射给EBGP邻居,但不会传递给别一个非客户端

3、  EBGP传递的路由条目会反射给另一个客户端,会反射给EBGP邻居,会反射给非客户端

 

对于本案例配置命令如下:

neighbor 2.2.2.2 route-reflector-client

配置之后邻居会重置

总结:

1)路由反射器在拓扑设计和命令配置上实现相对简单一些。

2)对于联盟来说,要求所有的路由器都必须要支持和识别,而路由反射只需要路由反射器理解路上反射机制即可,客户端将与RR之间的连接都视为普通的IBGP连接。