iBGP之间只可以发送自身产生的前缀信息,不可以转发接受自其他iBGP对等体的前缀信息,这是BGP的防环机制。

解决IBGP间路由发送的限制一般有三种方法:

1.       建立full-mesh的对等体连接

2.       建立联盟

3.       建立RR(路由反射器)

 

RR中引入了originator-idcluster-id这两个属性来防止环路。

Originator是指产生首发该路由的路由器的RID,cluster-id可以手工配置,也可以有系统默认生成(RRRID)。

系统为RR默认配置的cluster-id就是RRRID。这样,当一个系统中有多个RR时,他们是同簇的。不同簇的RR会以一般的RR与非客户端对等体的反射原则来传递路由信息。

那么,如果同一级别的RR拥有相同的cluster-id,那么,他们之间就不会反射路由信息了!

 

下面的试验讨论的是同一个AS中,有多个同级RR时,路由传递的一些特性。

 

拓扑如下:

 

R1,R2,R3,R4在同一个AS中,其中R1R2作为RRR3,R4作为客户端对等体被两个RR共同拥有,R3R4之间没有建立对等体。

 

基本配置:

R1

R1#sh ip int b

Interface                  IP-Address      OK? Method Status                Protocol

FastEthernet0/0            unassigned      YES manual up                    up     

FastEthernet0/0.12         12.1.1.1        YES manual up                    up     

FastEthernet0/0.13         13.1.1.1        YES manual up                    up     

FastEthernet0/0.14         14.1.1.1        YES manual up                    up     

Loopback0                  10.1.1.1        YES manual up                    up     

。。。。(omit

 

R1#sh run | b router

router bgp 1

 no synchronization

 bgp router-id 1.1.1.1

 bgp log-neighbor-changes

 network 10.1.1.0 mask 255.255.255.0

 neighbor 12.1.1.2 remote-as 1

 neighbor 13.1.1.3 remote-as 1

 neighbor 13.1.1.3 route-reflector-client

 neighbor 14.1.1.4 remote-as 1

 neighbor 14.1.1.4 route-reflector-client

 no auto-summary

 

R2

R2#sh ip int b

Interface                  IP-Address      OK? Method Status                Protocol

FastEthernet0/0            unassigned      YES manual up                    up     

FastEthernet0/0.12         12.1.1.2        YES manual up                    up     

FastEthernet0/0.23         23.1.1.2        YES manual up                    up     

FastEthernet0/0.24         24.1.1.2        YES manual up                    up     

Loopback0                  20.1.1.1        YES manual up                    up     

……(omit)

 

R2#sh run | b router

router bgp 1

 no synchronization

 bgp router-id 2.2.2.2

 bgp log-neighbor-changes

 network 20.1.1.0 mask 255.255.255.0

 neighbor 12.1.1.1 remote-as 1

 neighbor 23.1.1.3 remote-as 1

 neighbor 23.1.1.3 route-reflector-client

 neighbor 24.1.1.4 remote-as 1

 neighbor 24.1.1.4 route-reflector-client

 no auto-summary

 

R3

R3#sh ip int b

Interface                  IP-Address      OK? Method Status                Protocol

FastEthernet0/0            unassigned      YES manual up                    up     

FastEthernet0/0.13         13.1.1.3        YES manual up                    up     

FastEthernet0/0.23         23.1.1.3        YES manual up                    up       

Loopback0                  30.1.1.1        YES manual up                    up     

…..(omit)

 

R3#sh run | b router

router bgp 1

 no synchronization

 bgp router-id 3.3.3.3

 bgp log-neighbor-changes

 network 30.1.1.0 mask 255.255.255.0

 neighbor 13.1.1.1 remote-as 1

 neighbor 23.1.1.2 remote-as 1

 no auto-summary

 

R4配置与R3基本一致,略。

 

1.

看看R1R2反射了那些路由

R1#sh ip b nei 12.1.1.2 advertised-routes

BGP table version is 9, local router ID is 1.1.1.1

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

*> 10.1.1.0/24      0.0.0.0                  0         32768 i

*>i30.1.1.0/24      13.1.1.3                 0    100      0 i

*>i40.1.1.0/24      14.1.1.4                 0    100      0 i

 

切到R2上,选取一条路由来研究,比如选了30.1.1.0/24这条路由

R2#sh ip b 30.1.1.0

BGP routing table entry for 30.1.1.0/24, version 8

Paths: (2 available, best #1, table Default-IP-Routing-Table)   #选取1号来源为最佳路由

  Advertised to non peer-group peers:

  12.1.1.1 24.1.1.4     #R2将这条前缀反射给了非对等体组成员R1R4

  Local, (Received from a RR-client)

    23.1.1.3 from 23.1.1.3 (3.3.3.3)

      Origin IGP, metric 0, localpref 100, valid, internal, best

  Local

    13.1.1.3 (inaccessible) from 12.1.1.1 (1.1.1.1)

      Origin IGP, metric 0, localpref 100, valid, internal

      Originator: 3.3.3.3, Cluster list: 1.1.1.1   #两个RR防环属性属性

R2收到两条关于30.1.1.0/24的更新,一条是来自于R3的,一条是来自于R1的。

 

2.

下面我们在R2上打开debug,然后在R1上软重启,看看路由更新的发送情况。

R2#deb ip b up

BGP updates debugging is on

R2#

*Mar  1 00:25:08.195: BGP(0): 12.1.1.1 rcvd UPDATE w/ attr: nexthop 12.1.1.1, origin i, localpref 100, metric 0

*Mar  1 00:25:08.195: BGP(0): 12.1.1.1 rcvd 10.1.1.0/24...duplicate ignored

*Mar  1 00:25:08.199: BGP(0): 12.1.1.1 rcvd UPDATE w/ attr: nexthop 14.1.1.4, origin i, localpref 100, metric 0, originator 4.4.4.4, clusterlist 1.1.1.1

*Mar  1 00:25:08.199: BGP(0): 12.1.1.1 rcvd 40.1.1.0/24...duplicate ignored

*Mar  1 00:25:08.199: BGP(0): 12.1.1.1 rcvd UPDATE w/ attr: nexthop 13.1.1.3, origin i, localpref 100, metric 0, originator 3.3.3.3, clusterlist 1.1.1.1

*Mar  1 00:25:08.199: BGP(0): 12.1.1.1 rcvd 30.1.1.0/24...duplicate ignored

如上所示,发送了三条更新。

 

3.

接下来在R1R2上手动配置相同的cluster-id(前面说过了,默认情况下的cluster-id就是RRRID

R1(config)#router b 1

R1(config-router)#bgp clus

R1(config-router)#bgp cluster-id 12.1.1.1

 

R2(config)#router b 1

R2(config-router)#b clus

R2(config-router)#b cluster-id 12.1.1.1

 

4.

再来看看R1R2发送了哪些更新

 

R1#sh ip b nei 12.1.1.2 ad

BGP table version is 9, local router ID is 1.1.1.1

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

*> 10.1.1.0/24      0.0.0.0                  0         32768 i

*>i30.1.1.0/24      13.1.1.3                 0    100      0 i

*>i40.1.1.0/24      14.1.1.4                 0    100      0 i

 

跟以前一样!

是不是上面的命令不起作用呢?

再来看看R2的路由表

R2#sh ip b

BGP table version is 9, local router ID is 2.2.2.2

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

*>i10.1.1.0/24      12.1.1.1                 0    100      0 i

*> 20.1.1.0/24      0.0.0.0                  0         32768 i

*>i30.1.1.0/24      23.1.1.3                 0    100      0 i

*>i40.1.1.0/24      24.1.1.4                 0    100      0 i

 

如上所示,并没有R1向它发送更新。这时还是要通过debug来看看

 

R2#deb ip bgp up

BGP updates debugging is on

R2#

*Mar  1 00:35:02.671: BGP(0): 12.1.1.1 rcvd UPDATE w/ attr: nexthop 12.1.1.1, origin i, localpref 100, metric 0

*Mar  1 00:35:02.671: BGP(0): 12.1.1.1 rcvd 10.1.1.0/24...duplicate ignored

*Mar  1 00:35:02.675: BGP: 12.1.1.1 RR in same cluster. Reflected update dropped

*Mar  1 00:35:02.675: BGP(0): 12.1.1.1 rcv UPDATE w/ attr: nexthop 14.1.1.4, origin i, localpref 100, metric 0, originator 4.4.4.4, clusterlist 12.1.1.1, path , community , extended community

*Mar  1 00:35:02.675: BGP(0): 12.1.1.1 rcv UPDATE about 40.1.1.0/24 -- DENIED due to: reflected from the same cluster;

*Mar  1 00:35:02.675: BGP: 12.1.1.1 RR in same cluster. Reflected update dropped

R2#

*Mar  1 00:35:02.675: BGP(0): 12.1.1.1 rcv UPDATE w/ attr: nexthop 13.1.1.3, origin i, localpref 100, metric 0, originator 3.3.3.3, clusterlist 12.1.1.1, path , community , extended community

*Mar  1 00:35:02.675: BGP(0): 12.1.1.1 rcv UPDATE about 30.1.1.0/24 -- DENIED due to: reflected from the same cluster;

R2#

 

这样就明白了吧!

可能会有这样的疑问,10.1.1.0/24这个网段上面显示的也被拒绝了,为什么路由表里面还有?

这是因为如果一个路由条目是RR自身发起的话,那么他不会在这个条目上创建cluster-id。而且,RR从外部对等体学习到的路由信息,在反射给自己的客户端或者为非客户端时,也不会为这前缀创建cluster-id

我们可以切到R3上来看看10.1.1.0/24这个信息被两个RR反射给R3时有携带的属性什么不同。

R3#sh ip b 10.1.1.0

BGP routing table entry for 10.1.1.0/24, version 7

Paths: (2 available, best #2, table Default-IP-Routing-Table)

  Not advertised to any peer

  Local

    12.1.1.1 (inaccessible) from 23.1.1.2 (2.2.2.2)

      Origin IGP, metric 0, localpref 100, valid, internal

      Originator: 1.1.1.1, Cluster list: 12.1.1.1

  Local

    13.1.1.1 from 13.1.1.1 (1.1.1.1)

      Origin IGP, metric 0, localpref 100, valid, internal, best

 

第一个是从R2发过去的,下面的一个是从R1发过去的。很明显,从R1发送过去的没有携带originatorcluster-id这两个属性。