在中型或大型BGP网络中,BGP路由表会变得十分庞大,存储路由表占用大量的路由器内存资源,传输和处理路由信息需要占用大量的网络资源。使用路由聚合(Routes Aggregation)可以大大减小路由表的规模;
另外通过对路由进行聚合,隐藏一些具体的路由,可以减少路由震荡对网络带来的影响。BGP路由聚合结合灵活的路由策略,使BGP更有效的传递和控制路由。
在配置BGP路由聚合之前,需完成BGP网络基本配置。
在此基础上完成了网络的互联,搭建好的网络如下图:
自动聚合
summary automatic命令对BGP引入的路由进行聚合,引入的路由可以是直连路由、静态路由、RIP路由、OSPF路由、IS-IS路由。
配置该命令后,BGP将按照自然网段聚合路由(如172.16.1.0/24和172.16.2.0/24将聚合为172.16.0.0/22),并且BGP只向对等体发送聚合后的路由。这样可以减少路由信息的数量。
无效配置方法
summary automatic命令用来使能对本地引入的路由进行自动聚合功能。
我们在R1路由器上添加两个回环地址:172.16.1.1
和172.16.2.1
并宣告后执行自动聚合:
执行summary automatic
后提示该命令仅对引入的路由可用,向下看路由表,可以看到表中有这两个IP但确实没有汇总路由。该命令对network
命令引入的路由无效。
有效配置
那么我们要解决这个问题就要先通过路由策略先引入这两个路由后再进行路由聚合:
ip ip-prefix 命令用来创建IPv4地址前缀列表或增加其中一个表项。
permit 指定地址前缀列表的匹配模式为允许.
greater-equal 指定掩码长度匹配范围的下限
less-equal 指定掩码长度匹配范围的上限
route-policy 命令用来创建路由策略并进入Route-Policy视图。
node 指定Route-Policy的节点号
if-match ip-prefix 命令用来创建一个基于IP地址前缀列表的匹配规则。
import-route命令用来配置BGP引入其他路由协议和路由类型的路由信息。
route-policy 从其他路由协议引入路由时,可以使用该参数指定的Route-Policy过滤器过滤路由和修改路由属性。
如此便可看到172.16.0.0
成功显示在路由表中。
后面面两个明细路由不再可用,状态码多了一个S。
这个S代表的是suppressed 抑制 :被抑制的路由信息将不再加表和传递。
优缺点
自动聚合的缺点:
- 自动聚合功能只能针对重发布的路由条目生效
- 自动聚合只能将明细路由直接汇总到主类。这样将会产生巨大的路由黑洞。所以,华为设备默认是关闭自动汇总功能的。
优点:
- 聚合后的网段信息可用且优,也会加载到自身的路由表中,并指向空接口。相当于自动生成了一条防环路由。(如上图所示)
手动聚合
手动聚合后的路由的优先级高于自动聚合。聚合路由在本地的出接口为NULL0,当其他设备收到聚合路由后会自动加上出接口
当全部具体路由的Origin属性都是igp时,则聚合路由的Origin属性按照优先级igp > egp > incomplete为准。如果聚合路由中所包含的具体路由各Origin属性不相同,当全部具体路由中的Origin属性存在incomplete时,则聚合路由的Origin属性按照优先级incomplete > egp > igp为准。如果具体路由没有被抑制,聚合路由会携带原来所有具体路由中的团体属性。
使用aggregate命令,用户可以灵活地指定汇总路由的目的网络掩码长度,而且不受网络地址类别的限制。(也不受重发布路由的限制。)
aggregate命令用来在BGP路由表中创建一条聚合路由。
aggregate ipv4-address { mask | mask-length } [ as-set | attribute-policy route-policy-name1 | detail-suppressed | origin-policy route-policy-name2 | suppress-policy route-policy-name3 ]
操作步骤:
- 执行命令
bgp as-number
,进入BGP视图。 - 执行命令
aggregate ipv4-address { mask | mask-length }
(发布全部的聚合路由和明细路由)
执行成功后我们就会在BGP路由表中看到该172.16.0.0/22
汇总网段信息,但原本172.16.1.1
和172.16.2.1
的所属网段却没有像上文所用的自动聚合那样将明细路由抑制,仍然会将这两个路由通告给R2、R3等其它路由。要解决这第一个问题这个时候我们就需要用到aggregate
命令的其它参数。
detail-suppressed
通过设置关键字detail-suppressed可以抑制该聚合路由所包含的所有具体路由,只发布该聚合路由。
生成的聚合路由带Atomic-aggregate属性,并且不能携带原具体路由的团体属性。
detail-suppressed 指定仅通告聚合路由。
目前来看没问题,我们先撤回聚合:
[R1-bgp]undo aggregate 172.16.0.0 22
然后在R2上手工聚合:
现在虽然抑制了明细路由的通行,但R2所产生的这条汇总路由,由于丢失了明细路由的路径信息(尤其是 AS_Path属性),因此它们会被通告给R3并被它接收,而且加载到路由表,这样就产生了第二个问题:路由环路的隐患。
as-set
通过设置关键字as-set,可创建一条聚合路由,该路由的自治系统AS(Autonomous System)路径包含了具体路由的AS路径信息。
设置这个属性就能解决聚合产生的路由环路的隐患。
as-set 指定生成具有AS-SET的路由。
当使用aggregate命令配置BGP路由汇总时,如果增加 as-set 关键字,则产生的汇总路由将会继承明细路由的路径属性,其中 AS_Path属性的继承最为关键。
完成上述配置后,R2将抑制明细路由172.16.1.0/24
及172.16.2.0/24
,只通告汇总路由172.16.0.0/22
(这得益于detail-suppresse关键字),而且由于命令中使用了as-set关键字,因此该条汇总路由将继承172.16.1.0/24
及172.16.10.0/24
这两条明细路由的路径属性。
从R3的BGP路由表可以看出,它从R2收到的这条汇总路由的AS_Path 属性有了明显的变化,在使用as-set关键字之后,R2产生的汇总路由将会继承明细路由172.16.1.0/24
及172.16.2.0/24
的AS_Path属性值,因此1这个 AS号被写入汇总路由的AS_Path。
如此一来,路由环路的隐患也就可以得到规避。
suppress-policy
通过设置关键字suppress-policy能产生聚合路由,但抑制指定路由的通告。
可以用route-policy的if-match子句有选择地抑制一些具体路由,即匹配该策略的路由将被抑制,但其它未通过策略的具体路由仍被通告。
也可以通过peer route-policy命令,配置不希望发布给对等体的策略达到相同效果。
suppress-policy 指定抑制指定路由通告的策略名称。
在使用aggregate命令配置路由汇总时,还可以搭配suppress-policy关键字,这个关键字用于通告汇总路由以及被选定的明细路由(换句话说,就是有选择性地抑制明细路由)。
先在R2把聚合关闭
[R2-bgp]undo aggregate 172.16.0.0 255.255.252.0
使用suppress-policy
实现:R1将汇总路由172.16.0.0/22
以及除了172.16.1.0/24
之外的其他明细路由都通告给R2
在上述配置中,我们首先定义了一个名称为subnet-1的IP前缀列表,并使用这个IP前缀列表允许了路由172.16.1.0/24
。
接着创建了一个名称为policy-2的 Route-Policy,并在这个Route-Policy 的节点10中
调用已经定义好的IP前缀列表subnet-1。
最后,在BGP的配置视图下,使用aggregate 172.16.0.0 22 suppress-policy policy-2
命令通告汇总路由172.16.0.0/22
以及被选定的明细路由(抑制172.16.1.0/24
路由,放行其他明细路由)。
suppress-policy关键字意为“抑制策略”,因此该关键字所指定的Route-Policy 中,被允许(Permit)的路由将会被抑制。
留意到IP前缀列表subnet-1的这条语句的匹配模式为Permit,
而且 RoutePolicy policy-2的节点10 的匹配模式也为Permit,所以只172.16.1.0/24路由被“允许”。
因此最终R2将学习到汇总路由172.16.0.0/22
以及除了172.16.1.0/24
之外的其他明细路由。
值得注意的是,suppress-policy虽然调用了 Route-Policy,但是被调用的Route-Policy 只能用于路由匹配(只能使用if-match命令),不能用于设置路由属性(不能配置apply命令)。
Aggregator
display bgp routing-table命令用来查看BGP的路由信息
ipv4-address 显示指定IPv4形式的网络地址的路由信息。
在BGP路由详细信息中可与看到Aggregator属性记录了聚合设备的AS号、Router ID,同时通过Atomic-Aggregate属性标明该路由为聚合路由。