路由聚合是有效控制缩减BGP路由表的方法之一,路由聚合的前提和IGP一样,需要有路由目标存在BGP表中,与IGP不同的是,BGP路由聚合可以定义按需抑制路由的能力。
实验拓扑如下所示:
现在开始把从R1的R5的基础配置先准备好,R1的基础配置如下:
hostname R1
!
interface Loopback0
ip address 192.168.1.1 255.255.255.0
!
interface Ethernet0/0
ip address 10.1.12.1 255.255.255.0
no sh
!
router bgp 100
bgp router-id 1.1.1.1
network 192.168.1.0
neighbor 10.1.12.2 remote-as 200
!
end
R2的基础配置如下:
hostname R2
!
interface Loopback0
ip address 192.168.2.2 255.255.255.0
!
interface Ethernet0/0
ip address 10.1.12.2 255.255.255.0
no sh
!
interface Ethernet0/1
ip address 10.1.23.2 255.255.255.0
no sh
!
interface Ethernet0/2
ip address 10.1.24.2 255.255.255.0
no sh
!
route-map CONNLOO permit 10
match interface Loopback0
!
router bgp 200
bgp router-id 2.2.2.2
redistribute connected route-map CONNLOO
neighbor 10.1.12.1 remote-as 100
neighbor 10.1.23.3 remote-as 300
neighbor 10.1.24.4 remote-as 400
!
end
R3的基础配置如下:
hostname R3
!
interface Loopback0
ip address 10.3.3.3 255.255.255.0
!
interface Loopback1
ip address 10.3.33.33 255.255.255.0
!
interface Ethernet0/0
ip address 10.1.23.3 255.255.255.0
no sh
!
route-map CONNLOO permit 10
match interface Loopback0 Loopback1
!
router bgp 300
bgp router-id 3.3.3.3
redistribute connected route-map CONNLOO
neighbor 10.1.23.2 remote-as 200
!
end
R4的基础配置如下:
hostname R4
!
interface Loopback0
ip address 10.4.4.4 255.255.255.0
!
interface Loopback1
ip address 10.4.44.44 255.255.255.0
!
interface Ethernet0/0
ip address 10.1.24.4 255.255.255.0
no sh
!
route-map CONNLOO permit 10
match interface Loopback0 Loopback1
!
router bgp 400
bgp router-id 4.4.4.4
redistribute connected route-map CONNLOO
neighbor 10.1.24.2 remote-as 200
!
以上是还没有聚合前的基础配置,依次查看R1、R2、R3和R4的BGP表如下:
在R2上添加聚合地址的命令后,查看以下BGP表,R1、R2、R3、R4依次是:
router bgp 200
aggregate-address 10.0.0.0 255.248.0.0
直接聚合可以使聚合地址通过R2生成BGP表发给任何一个邻居,BGP聚合前缀的同时也会发送原来的各个明细路由信息(NLRI)。通过追加可选参数:summary-only,可以抑制明细。
router bgp 200
aggregate-address 10.0.0.0 255.248.0.0 summary-only
可以在R2上抑制后再发送,在R3和R4上可以收到自己本地即下一跳是0.0.0.0的地址产生的明细是不能被抑制的。并且,下一跳是0.0.0.0时,表示该BGP路由起源本地,Weight值为32768。
通过AS-PATH属性可以看出,执行地址聚合的路由器R2成为聚合路由器的始发站,原来的AS-PATH属性丢失。
由于配置了地址聚合,所以在R2的路由表中会产生一条指向Null0的汇总路由,主要是为了避免产生路由环路。
可以通过设置参数as-set使BGP聚合路由不丢失原来的AS-PATH属性,从而避免路由环路。以下是继续在R2上继续更改聚合属性参数的示例为:
router bgp 200
aggregate-address 10.0.0.0 255.248.0.0 summary-only as-set
可以看到通过在R2上设置了as-set参数,改变AS-PATH的无序属性,AS-PATH包含了被聚合路由中所有明细路由所在的AS号的集合中。
聚合路由是因为携带了所有明细路由的AS-PATH属性,所以该聚合路由在R3和R4中的BGP表没有出现,从而可以有效的避免路由环路。可以使用命令neighor ip-address allowas-in可以允许在AS-PATH属性中出现本AS的BGP路由条目进入本AS,不过这需要网络管理员仔细衡量网络的路径,因为这样有可能出现环路风险。
eBGP更新路由最主要的防环原则就是使用AS-PATH属性,在BGP对等体之间传递的每条路由都携带它所经过的AS号有序列表,如果该路由被通告给它始发的AS,该AS路由器将在AS号序列表中看到自己的AS号,它将不接受该路由。
在R3上需要手动开启入向软配置:
router bgp 300
neighbor 10.1.23.2 soft-reconfiguration inbound
以上输出可以看到R3没有收到聚合路由10.0.0.0/13的条目,这是因为它发现该路由条目中的AS-PATH属性列表中包含自己的AS号码,所以不接收。R4也是一样的原理。
如果有特殊需求,要有条件的通告时,可以在能够控制聚合路由的路由器上抑制部分明细路由条目,通过配置aggregate-address的额外参数suppress-map来达成。
在R2上添加配置如下:
ip prefix-list 1 seq 5 permit 10.3.33.0/24
ip prefix-list 1 seq 10 permit 10.4.44.0/24
route-map SRA permit 10
match ip address prefix-list 1
router bgp 200
aggregate-address 10.0.0.0 255.248.0.0 as-set summary-only suppress-map SRA
因为R3除了接收来自R2已经抑制路由外,本地自己生产的路由是没法通过聚合路由器控制而抑制掉的路由条目;R4也一样。