BGP路由汇总

BGP汇总,支持CIDR,这么牛B的协议肯定是支持的

 Auto summary,在cisco的IOS中,默认是关闭的,

 如果想要进行自动汇总的话,就要先手动开启功能,

  

自动汇总

开启自动汇总后

并不意味着什么样的条目都能够进行自动汇总,

对此BGP是这样规定的 开启auto-summary以后

通过network+mask精确宣告的,不会被自动汇总 

通过network+mask汇总宣告的,会被汇总  //废话

     通过重分布进BGP的,会自动被汇总成主类  , 这一点很重要

所以综上所述,可以总结出一句话,那就是BGP只会针对重分布的类型条目进行自动汇总

 

测试一下重分布后的条目能否被自动汇总

 

BGP路由触发式更新原则 bgp路由更新周期_属性值

 

所有设备上开启自动汇总,然后在R1和R2上重分布进直连网段,为了不要它们自已的更新源地址,我们要建立route-map,进行有条件的重分布,此处不再赘述,

 

直接看结果吧

 

BGP路由触发式更新原则 bgp路由更新周期_属性值_02

 

咱们先来分析一下,汇总是汇总了,但是有问题的

1 明细条目被汇总也是显示的两条,分别来自于AS100和AS200,这没问题,本来就是来自于两个AS的,但是,你会发现,2.2.2.2的条目没有被视为最优,

不最优的结果就是不能被写入路由表,同时也无法传递给我的邻居

那R4上,肯定就不可能ping通AS200的条目喽~,

咱们试一下,

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_03

 

通过结果,我们不难看出,的确是存在这样的问题,

我的AS200去哪里了,连PATH列表中都没有,(因为在R3上面 2.2.2.2的条止不是最优的,所以不会传递给BGP邻居)肯定是不可能通的.

 

所以,自动汇总是多么的,多么的不靠谱,

我们之前在学习IGP路由协议的时候也一再强调这个事儿,

自动汇总,会产生路由黑洞,现在倒好,连黑洞还没出来呢,直接就给你抛弃了

 

我们主要讲述的是BGP 的手动汇总,

 

手动汇总

还是上图的环境,我们将条目的形式改变一下,全都变成network

 

BGP路由触发式更新原则 bgp路由更新周期_R3_04

 

 配置完成

在R3上查看BGP表

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_05

 

来自于两个下一跳,两个AS,而且条目全都有效,

并且没有被自动汇总,因为我们把au sum给关了

 

现在R4和R5上看到的都是一样的条目

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_06

 

由于是EBGP的peer,在离开自己的AS时,会将AS加上去,所以在这里看到的就是300 200/ 300 100,现在的状态是正常的,完全没有问题

 

现在开始汇总

1 首先要明白,在哪里汇总,

2 汇总后的IP地址是多少,~要不要精确的计算

 

对于BGP的汇总而言,肯定是在发送端这边来做汇总,如上图所示,R3是R4-R5的发送端

R1,R2是R3的发送端 ,

为了省事儿,我们直接 在R3上做,

 

第二个, 172.16.1.0 /2.0/10.0/11.0/24条目,汇总后应该是多少呢?

2的4次方=-16,那就用这个吧

172.16.0.0 /20 255.255.240.0 

BGP的汇总命令

Aggregate-address 172.16.0.0 255.255.240.0 

实验来试一下 

R3(config)#router bgp 300
R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0

来看一下最终的效果,在R4上查看BGP表

 

BGP路由触发式更新原则 bgp路由更新周期_R3_07

 

哦~,有了,有了,

但是为啥明细条目还有啊~

这不科学啊,按理来说,明细 条目应该不在才对啊~

 

是的,没错,但是在BGP中,如果想要清除明细条目,只保留汇总条目的话,就要再加单独的命令

 手动汇总summary-only

我们把刚才的汇总条命令NO掉,重新写一下

R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only

好,再来查看一下,是不是奏效呢~

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_08

 

 OK,没问题,看来summary-only 还是很有效果的,

 

汇总告警消息

Aggregated  聚合,由谁聚合的

Atomic-aggregate  原子聚合

 

针对于这两个属性,我们可以直接在明细中看到,

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_09

 

这个条目是由AS300的RID为3.3.3.3的设备进行汇总的,

另外,这是一条告警消息,原子聚合。当出现这个消息的时候你要注意了,

是有问题的。因为汇总条目中并不包含明细条目的AS-path信息。

这会造成环路。

 

 

手动汇总

 

这个时候你要不要考虑一个问题

R1和R2上有没有这个汇总条目???

想一想

我们看一下在R4上的结果是什么样的啊~

 

首先,在R4看来,这是一个崭新的条目,我可以收,

PATH上写的是300

但是,注意啊.........但是来了,

对于R1和R2而言,这不是新的吗?

假设R2和R4之间存在着EBGP的邻居关系,怎么办?

R2收到这个更新以后,会不会接收,??? 肯定会接收,因为在as-path中根本就没有他的AS标识,可现在即使是没有这个EBGP的关系,我们也不防到R1和R2上看一下

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_10

 

我们在R1上看,

同样可以看到这个条目,且下一跳设备为3.3.3.3, 为什么他会接收呢?你往后面看,看到了什么>?

Path 300,根本就没有100,我为什么不收呢~ 这就是问题的所在 

那这个时候我要怎么样才可以将明细的AS编号加到PATH中呢? 

是否还记得之前讲AS-PATH路径属性的时候,讲过AS-PATH的4种类型

我们最常见的就是这种AS-senquence 是EBGP 都会标记的,而且是有序的,

还有一种是无序的,前面只是提了一句,说是在这里要讲

  

As-set类型的path ,主要用于标记汇总条目的明细 AS的,

它们的表现形式是{xx,xx}里面并没有顺序可言,只要有就可以了

 

回到实验中

我们重写一下汇总命令

R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only as-set

 

好了,再来看一下R4上的BGP表吧

看看这个条目发生了哪些变化

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_11

 

嘿嘿,不一样了吧

这时变成了300{100,200}300是汇总的AS,100和200是明细的所在AS

 

BGP路由触发式更新原则 bgp路由更新周期_属性值_12

 

查看汇总条目的详细信息,也可以看到  这个汇总条目产生在AS 300 RID是3.3.3.3

 

那这个时候请问R1和R2能否收到呢?

猜一下?

 

BGP路由触发式更新原则 bgp路由更新周期_R3_13

 

还用说吗?肯定是收不到的,因为有了as-set的关键字以后,就会在{ }里面加上明细条目所在的AS号,这和EBGP 的防环机制也是有关系的.看到更新信息中有自己的AS号,则直接丢弃这个包.不进行更新。这一关键字,解决了EBGP的环路问题

  


汇总继承origin

汇总条目会继承明细条目上最差的origin,我们来测试一下是否奏效

 

我们把R2上的条目改成e,把R1上的条目改成?

来看一下会怎么样,

那么问题又来了,修改origin,In/out?哪个生效呢?

答:哪个都生效,因为起源属性,是公认必遵属性,每个update包中都是包含的

所以我们现在直接就在明细的源头进行修改就好了 

R1(config)#access-list 1 per 172.16.1.0
R1(config)#route-map ori per 10
R1(config-route-map)#ma ip add 1
R1(config-route-map)#set origin egp 500
R1(config-route-map)#exit
R1(config)#route-map ori per 20
R1(config)#router bgp 100
R1(config-router)#nei 3.3.3.3 route-map ori out
R1(config-router)#exit   
在R1上效条目的origin 改成了e
在R2上将条止的origin改成了incomplete?
R2(config)#access-list 1 per 172.16.10.0
R2(config)#route-map ori per 10
R2(config-route-map)#ma ip add 1
R2(config-route-map)#set ori incomplete
R2(config-route-map)#exit
R2(config)#route-map ori per 20
R2(config-route-map)#exit   
R2(config)#router bgp 200
R2(config-router)#nei 3.3.3.3 route-map ori out

此时我们到R3上先来查看一下

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_14

 

 可以看到,明细条目都已经改了,

我们说过,汇总条目会继承明细条目中origin最差的那个

顺序还记得吗?i>e>?

那么此图中,最差的就是?了,

我们到R4上来验证一下中否继承了

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_15

 

 没错,真的是继承了,并且是继承的最差的。

 

BGP路由汇总的额外特性


Suppress-map 抑制条目

在前面的实验中,我们可以看到,使用了summary-only以后,所有的明细条目都被干掉了,一个不留,

但有没有一些特殊的情况,我需要一些明细的条目呢?肯定是有的

那么如何来操作呢?

就要用到suppress-map了

 

配置思路

ACL抓取条目

定义route-map

在汇总时调用关键字

 

这里要额外的提一下,这个是有点儿绕的地主

当route-map和suppress相结合时, route-map的permit,就等于是抑制

                                                            Deny  就等于不是抑制

说白了,就是你permit哪个条目,哪个条目就不能显示出来

因为在route-map的最后还隐藏着deny ,所以想放行的可以不写Permit就默认被放行了。

  

还是结合我们上面的实例来看一下

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_16

 

我想要汇总条目到达R4的时候,还要携带着明细条目 172.16.1.0 以及 172.16.10.0

那应该怎么做呢?

配置

R3(config)#access-list 1 per 172.16.1.0
R3(config)#access-list 1 per 172.16.10.0
R3(config)#route-map sup deny 10   //这时的deny等于是针对suppress放行,不汇总
R3(config-route-map)#ma ip add 1
R3(config-route-map)#exit
R3(config)#route-map sup per 20    //这里的permit等于是被抑制了,其它全部被抑制了
R3(config-route-map)#exit
R3(config)#router bgp 300
R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 suppress-map sup as-set 
这里就不再是summary-only了,而是换成了suppress-map了

最终在汇总的时候进行调用suppress-map即可

 


Unsuppress-map

如果说我有多个EBGP邻居,而其中有一个邻居,不想在汇总的时候被抑制,那要如何操作呢?

如果结合使用了suppress-map的话,就要对单独的peer,指定一个unsuppress-map

 

当然,这一操作要在汇总的设备上进行

R3(config-router)#nei 5.5.5.5 unsuppress-map sup  //sup为之前定义的route-map名称

 

此时再到R5上看一下,

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_17

 

 哎呀,不对啊,怎么都出来了?

那么请问,怎么就不能都出来,我前边的命令是怎么敲的?有summary-only吗?

没有吧,我只是应用了suppress-map,而针对于5.5.5.5而言,我还被配置了 unsuppress-map,不接受这个策略的限制,也就是不抑制,

那我为啥不能接收全部的消息呢~你说呢?~

 

 


Advertist-map 单独继承属性

前文提过,汇总条目会继承明细条止的路径属性origin,其实不全然,

继承的还是挺多的,

                   as-path,需要as-set的关键字

                   Local prefen本地优先级,汇总条目会在AS内部为100

                   Origin

                   Community  这个在后面会有更加详细的解释

 

我们拿origin来做个例子吧

之前说过,汇总条目会继承明细路径中origin属性最差的,

那么,我想不继承那个最差的行不行?

只继承那个最好的,可不可以?

当然可以

我们来测试一下

 

我们将

       172.16.10.0 设置为 ?

       172.16.2.0和172.16.11.0不变,就是i

如果是默认情况下,肯定会继承最差的那个 ?,我们不让它这么选

我们最终让汇总条目只继承i的属性,看看可不可以

 

配置思路

ACL抓取条止

Route-map permit条目

这里要注意一下千万不要在后面加上per 20

重新汇总条目

 

配置命令
R3(config)#access-list 1 per 172.16.2.0
R3(config)#access-list 1 per 172.16.10.0
R3(config)#route-map adv per 10
R3(config-route-map)#ma ip add 1
R3(config-route-map)#exit

     ///这里千万要注意,不要per 20了,如果再per20的话,所有的属性又都过去了

R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only as-set advertise-map adv

 

在R3上先看一下它们的origin

 

BGP路由触发式更新原则 bgp路由更新周期_属性值_18

 

可以看到有?  有i的,就像我们之前所说的,我就让这个汇总条目只继承i的,

上面的命令已经输入完成,

到R4上来验证一下

 

BGP路由触发式更新原则 bgp路由更新周期_属性值_19

 

神奇不?

 

总结一下这个关键字吧,advertise-list,可以针对于某一个,某多个条目的属性进行选择性继承,

设置好以后,比如说你选择了两条路由么属性做为汇总属性的继承,那么当这两条明细路由正常的时候,汇总路由也正常,

当两条明细挂掉一个,汇总还正常,

可是,当两条明细都挂掉了,不管你那边儿有多少个明细,汇总都会随之消失,因为你只选择了这两个路径做为依据。

我们可以来测试一下

之前参考的是172.16.2.0 和 11.0这两个条目的属性,

现在我们一一的断开,看一下效果会是什么样的,

 

1 down掉172.16.2.0 的loopback接口,看会发生什么

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_20

 

关掉以后 我们看一下R3上的BGP表,有没有什么变化

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_21

 

 汇总条目还在,没问题

 

我们再断开另外一个

 

BGP路由触发式更新原则 bgp路由更新周期_R3_22

 

此时再到R3上查看一下

 

你会发现,选择性继承的那两条明细都down掉以后,汇总路由立即也跟着down掉了,

 

BGP路由触发式更新原则 bgp路由更新周期_路由协议_23

 

 


Attribute-map路由策略

对待汇总路由就像是对待一个普通 的明细路由一样,可以使用route-map来为其修改路径属性。

但前提是修改的路径属性在AS之间支持传递

 

可以修改的属性,主要遵循BGP的路径属性一篇提到的

大概可以支持

 

这里我们来修改一下as-path的属性,让它在R4上看起来与众不同。

 配置思路

Acl 抓取条目。 prefix-list

1 route-map定义  针对于汇总条目不用再单独的抓取了

2 set 具体属性值

3重新汇总,并加上具体的策略

 

配置如下

现在要求汇总路由在出去的时候1111的med值 ,看看可不可以实现

 

R3(config)#route-map wfy per 10
R3(config-route-map)#set metric 11111
R3(config-route-map)#exit
R3(config)#router bgp 300
R3(config-router)#aggregate-address 172.16.0.0 255.255.240.0 summary-only as-set attribute-map wfy

 

此时到R4上再看一下

 

BGP路由触发式更新原则 bgp路由更新周期_BGP路由触发式更新原则_24

 

以上就是关于BGP路由汇总的内容,

 

-------------------------------------------

CCIE成长之路 --- 梅利