1,BGP的路由聚合有两种方式,一种是自动路由聚合,一种是手动路由聚合。相对于自动路由聚合来讲,手动路由聚合具有更高的灵活性和可控性。
2,BGP手动路由聚合时,可以手动控制聚合路由的掩码长度,修改路和路由属性等。手动路由聚合又有两种方法,一种是配置一条静态路由,然后用network命令通告;另一种是使用aggregate命令进行聚合。
3,采用第一种方法时,无法对通告的静态路由加以控制,并且明细路由任然会被通告出去。如果要抑制明细路由,则需使用Route-Policy来对明细路由进行过滤,实现起来配置命令较多,同时还会丢失明细路由的某些BGP属性。
4,采用第二种方法时,缺省情况下明细路由和聚合路由也都会被发送出去,但是可以通过关键字对全部或部分明细路由进行抑制,另外还可以对聚合路由的属性进行修改。和第一种方法相比,第二种方法对路由聚合的控制以及对路径选择的控制会更加灵活。
掌握配置BGP手动路由聚合的方法
熟悉aggregate命令中关键字的作用
每台路由都使用loopback 0的IP作为Router-ID,并且使用直连物理接口建立BGP邻居关系。R5和R6的Loop back1至Loop back7接口所在的网络将使用Network命令通告到BGP进程中。
[R1]bgp 100
[R1-bgp]router-id 10.0.1.1
[R1-bgp]peer 10.0.12.2 as-number 200
[R1-bgp]peer 10.0.13.3 as-number 300
[R2]bgp 200
[R2-bgp]router-id 10.0.2.2
[R2-bgp]peer 10.0.12.1 as-number 100
[R2-bgp]peer 10.0.24.4 as-number 400
[R3]bgp 300
[R3-bgp]router-id 0.0.3.3
[R3-bgp]peer 10.0.13.1 as-number 100
[R3-bgp]peer 10.0.34.4 as-number 300
[R3-bgp]peer 10.0.35.5 as-number 400
[R4]bgp 300
[R4-bgp]router-id 10.0.4.4
[R4-bgp]peer 10.0.24.2 as-number 200
[R4-bgp]peer 10.0.34.3 as-number 300
[R4-bgp]peer 10.0.46.6 as-number 400
[R5]bgp 400
[R5-bgp]router-id 10.0.5.5
[R5-bgp]peer 10.0.35.3 as-number 300
[R5-bgp]peer 10.0.56.6 as-number 400
[R5-bgp]network 172.16.1.0 255.255.255.0
[R5-bgp]network 172.16.2.0 255.255.255.0
[R5-bgp]network 172.16.3.0 255.255.255.
[R5-bgp]network 172.16.4.0 255.255.255.0
[R5-bgp]network 172.16.5.0 255.255.255.0
[R5-bgp]network 172.16.6.0 255.255.255.0
[R5-bgp]network 172.16.7.0 255.255.255.0
[R6]bgp 400
[R6-bgp]router-id 10.0.6.6
[R6-bgp]peer 10.0.46.4 as-number 300
[R6-bgp]peer 10.0.56.5 as-number 400
[R6-bgp]network 192.168.1.0 255.255.255.0
[R6-bgp]network 192.168.2.0 255.255.255.0
[R6-bgp]network 192.168.3.0 255.255.255.0
[R6-bgp]network 192.168.4.0 255.255.255.0
[R6-bgp]network 192.168.5.0 255.255.255.0
[R6-bgp]network 192.168.6.0 255.255.255.0
[R6-bgp]network 192.168.7.0 255.255.255.0
再R1上查看BGP邻居
在R1上查看BGP路由表
可以看到,R1已经接收到BGP协议的明细路由.在R5上的loopback1 ping R6的loopback 1
可以正常通信
R5和R6的Loop back1到7的网络都已经被通告到BGP进程中了,
并且每台路由都可以接收到R5和R6通告的明细路由.如果其中某条出现丢失或震荡的情况,则网络中的其他路由器也会删除或震荡.所以将在R5和R6上配置路由聚合,将这种明细路由的变化隐藏在AS内部,不会对其他AS产生影响.
在R6上配置静态路由,然后使用network命令通告出去.
[R6]ip route-static 192.168.0.0 21 NULL 0
[R6]bgp 400
[R6-bgp]network 192.168.0.0 21
静态路由指向Null 0的目的是防止网络中产生环路,这条静态路由仅仅是用来通告的.
在R5上使用aggregate命令进行通告.
[R5-bgp]aggregate 172.16.0.0 21
使用aggregate命令进行聚合,要求BGP路由表中至少存在一条属于聚合后的路由的子网路由,否则聚合不会生效.
查看R1的BGP路由表
可以看到,R1的BGP虽然包含了聚合后的路由,但也包含了每个明细路由.若R5和R6的明细路由发生丢失或震荡还是会导致路由表波动,没有解决路由不稳定问题.
虽然配置了路由聚合,但明细路由的波动还是会影响路由表的波动.
在R6上使用了network通告静态路由的聚合方法,若向抑制明细路由,要使用Route-Policy实现.如果被抑制的明细路由数量较多时,配置工作量就会比较大,而且维护起来不太方便,这种方法的扩展性和维护性都比较差.
在R5和R6上使用前缀列表和Route-Politicy给这些明细路由添加No-Advertise团体属性,并通告给R3R4
[R5]ip ip-prefix no-adver permit 172.16.1.0 24
[R5]ip ip-prefix no-adver permit 172.16.2.0 24
[R5]ip ip-prefix no-adver permit 172.16.3.0 24
[R5]ip ip-prefix no-adver permit 172.16.4.0 24
[R5]ip ip-prefix no-adver permit 172.16.5.0 24
[R5]ip ip-prefix no-adver permit 172.16.6.0 24
[R5]ip ip-prefix no-adver permit 172.16.7.0 24
[R5]ip ip-prefix no-adver permit 192.168.1.0 24
[R5]ip ip-prefix no-adver permit 192.168.2.0 24
[R5] ip ip-prefix no-adver permit 192.168.3.0 24
[R5]ip ip-prefix no-adver permit 192.168.4.0 24
[R5]ip ip-prefix no-adver permit 192.168.5.0 24
[R5]ip ip-prefix no-adver permit 192.168.6.0 24
[R5]ip ip-prefix no-adver permit 192.168.7.0 24
[R5]route-policy no-adver permit node 10
[R5-route-policy]if-match ip-prefix no-adver
[R5-route-policy]apply community no-advertise
[R5-route-policy]route-policy no-adver permit node 20
[R5-route-policy]bgp 400
[R5-bgp]peer 10.0.35.3 route-policy no-adver export
[R5-bgp]peer 10.0.35.3 advertise-community
[R6]ip ip-prefix no-adver permit 192.168.1.0 24
[R6]ip ip-prefix no-adver permit 192.168.2.0 24
[R6]ip ip-prefix no-adver permit 192.168.3.0 24
[R6]ip ip-prefix no-adver permit 192.168.4.0 24
[R6]ip ip-prefix no-adver permit 192.168.5.0 24
[R6]ip ip-prefix no-adver permit 192.168.6.0 24
[R6]ip ip-prefix no-adver permit 192.168.7.0 24
[R6]ip ip-prefix no-adver permit 172.16.1.0 24
[R6]ip ip-prefix no-adver permit 172.16.2.0 24
[R6]ip ip-prefix no-adver permit 172.16.3.0 24
[R6]ip ip-prefix no-adver permit 172.16.4.0 24
[R6]ip ip-prefix no-adver permit 172.16.5.0 24
[R6]ip ip-prefix no-adver permit 172.16.6.0 24
[R6]ip ip-prefix no-adver permit 172.16.7.0 24
[R6]route-policy no-adver permit node 10
[R6-route-policy]if-match ip-prefix no-adver
[R6-route-policy]apply community no-advertise
[R6-route-policy]route-policy no-adver permit node 20
[R6-route-policy]bgp 400
[R6-bgp]peer 10.0.46.4 route-policy no-adver export
[R6-bgp]peer 10.0.46.4 advertise-community
peer x.x.x.x advertist-community命令是为了将团体属性传递给任何对等体(组),缺省情况下是不传递的.
在R1,R2,R3,R4上查看BGP路由表
可以看到,R1只接收到了聚合路由,R3接收到了明细和聚合路由
添加No-Advertise团体属性是通过路由策略告知对等体的,不要再将这些明细路由通告给其他任何BGP中.
网络管理员还可以利用aggregate命令饥饿和使用Detail-Suppressed关键字来实现对明细路由的抑制,只将聚合后的路由发送出去.
[R5]bgp 400
[R5-bgp]aggregate 172.16.0.0 255.255.248.0 detail-suppressed
配置完成后,查看BGP路由表
看到R3和R6没有接收到R5的明细路由.
Aggregate命令支持抑制全部明细路由,也可以支持仅抑制部分明细路由.如果需要R5将172.16.2.0 24,172.16.4.0 24,172.16.6.0 24进行抑制,而将其他明细路由和聚合路由通告出去,则网络管理员可以通过Suppress-Policy关键字配合Route-POlicy实现.前缀列表用来匹配哪些路由需要被抑制,Route-Policy用来调用前缀列表,配和Suppress-Policy实现最终需求.
[R5]ip ip-prefix sup_policy permit 172.16.2.0 24
[R5]ip ip-prefix sup_policy permit 172.16.4.0 24
[R5]ip ip-prefix sup_policy permit 172.16.6.0 24
[R5]route-policy sup_policy permit node 10
[R5-route-policy]if-match ip-prefix sup_policy
[R5-route-policy]bgp 400
[R5-bgp]undo peer 10.0.35.3 route-policy no-adver export
[R5-bgp]aggregate 172.16.0.0 21 suppress-policy sup_policy
查看R1BGP路由表
可以看到,172.16.2/4/6.0 24都被抑制了.
关键字Attribute-Policy可用来设置聚合路由的属性.例如,在R5通告的是属性没有经过任何修改的路由,其聚合路由的Origin属性是i.现在通过Attribute-Polical将聚合路由的属性修改成Incomplete,在BGP路由表中显示为"?".
[R5]route-policy att_policy permit node 10
[R5-route-policy]apply origin incomplete
[R5]bgp 400
[R5-bgp]aggregate 172.16.0.0 255.255.248.0 attribute-policy att_policy