BGP路由聚合原理和实验(华为设备)

概述:

在这里插入图片描述
在大规模的网络中,BGP路由表十分庞大,给设备造成了很大的负担,同时使发生路由振荡的几率也大大增加,影响网络的稳定性。

路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

路由聚合是会使用Aggregator属性和AutoAggregator属性 :

Atomic-Aggregate属性:属于公认任意属性,主要用于路由聚合时,如果聚合路由将所有明细路由抑制了,就会为聚合路由生成该属性。使用该属性也有一种警告作用,用于告知对等体,原始的明细路由AS_ PATH 出现了丢失。

Aggregator属性:属于可选过渡属性,该属性作为Atomic-Aggregate 的补充,指明路由信息是在何处出现了丢失,该属性包含发起聚合路由的AS号及生成聚合路由的BGP通告者的RouterID ( 又称为Aggregator ID)。

自动聚合:

在这里插入图片描述
自动聚合注意事项:

  1. 该命令对BGP引入的路由进行聚合,引入的路由可以是直连路由、静态路由、RIP路由、OSPF路由、IS-IS路由。配置聚合后,BGP将按照自然网段聚合路由,明细路由在BGP路由更新中被抑制。该命令对network命令引入的路由无效。
  2. BGP只向对等体发送聚合后的路由。
  3. 缺省情况下BGP不启用自动聚合。

配置:

  1. 执行命令bgp as-number,进入BGP视图。
  2. 执行命令ipv4-family unicast,进入IPv4单播地址族视图。
  3. 执行命令summary automatic,配置对本地引入的路由自动聚合。
    该命令对BGP引入的路由进行聚合,引入的路由可以是直连路由、静态路由、RIP路由、OSPF路由、IS-IS路由。配置该命令后,BGP将按照自然网段聚合路由。该命令对network命令引入的路由无效。

手动聚合:

一、利用静态路由进行聚合
这种方式是先在路由表中为聚合地址创建静态表项,之后再利用network命令宣告该聚合地址,如下面这个例子:
在这里插入图片描述
如图,AS100中有192.168.1.0/24、192.168.2.0/24、192.168.3.0/24和192.168.4.0/24四个内部网络,现在要将4个内部网络的路由聚合成一条192.168.0.0/16这条路由。R1的关键配置:

bgp 100
peer 11.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
network 192.168.0.0 255.255.0.0 //将聚合路由发布到BGP中
peer 11.1.1.2 enable

ip route-static 192.168.0.0 255.255.0.0 NULL0 //配置一条指向NULL0的静态聚合路由

由于聚合路由本身并不是合法的终端目的地址,因而静态路由指向Null接口,该路由在R1的路由表中仅代表一条精确路由。如果数据包的目的地址属于AS100的C类地址,那么AS100的外部路由器将撇配该聚合路由并转发给R1,到了路由器R1之后,数据包将被匹到更精确的地址,并被转发到正确的内部下一跳路由器。如果因某种导致更精确的C类地址不在R1路由表中的话,将把该数据包转发到Null接口并予以丢弃。我们查看R2的BGP路由表:
在这里插入图片描述
R2的路由表中只有一条聚合路由,其他明细路由均未进入R2的路由表。

二、通过aggregate命令手动聚合路由,并抑制明细路由
在上面这种简单的场景下,通过静态路由进行聚合的方式已经足够了,但是对于拓扑结构或者路由策略稍微复杂一些的情况,通过静态路由进行聚合的方式不建议被使用,我们可以使用aggregate命令进行手动聚合。下面具体说明下aggregate命令极其参数的作用。先在上面那个简单的例子中使用aggregate命令。

R1的关键配置:

bgp 100
peer 11.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
aggregate 192.168.0.0 255.255.0.0 detail-suppressed
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
network 192.168.4.0
peer 11.1.1.2 enable

想要宣告由aggregate命令指定的聚合路由,必须通过重分布或者network命令使至少一个更精确的地址进入BGP路由表。这里我们查看R1和R2的BGP路由表:
在这里插入图片描述
可以看到,R1的BGP路由表中包含了所有精确路由,而R2的路由表中只有一条聚合路由,这是因为在aggregate命令中配置了detail-suppressed参数,使R1只会将聚合路由发送给R2。而R1的BGP路由表中,明细路由前面都有“s”的标志,代表这些路由已经被聚合路由抑制。

三、 同时发送聚合路由和明细路由
对于像上面这种简单拓扑来说,确实不需要同时宣告聚合路由和明细路由。再看一下下面这个例子:
在这里插入图片描述
如图,AS100多归属到AS200,AS200需要从AS100接受全部路由以设置路由策略,但AS200仅能向AS300发送聚合路由。这个场景下,AS100就需要将全部路由发送给AS200。这里一种简单的解决方式是利用团体属性。让AS100发送给AS200的明细路由携带NO_EXPORT团队属性。配置以R1为例:

bgp 100
peer 11.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
aggregate 192.168.0.0 255.255.0.0 /路由聚合为192.168.0.0/16,并且不抑制明细路由
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
network 192.168.4.0
peer 11.1.1.2 enable
peer 11.1.1.2 route-policy COMMUNITY export /对R2出方向使用路由策略COMMUNITY
peer 11.1.1.2 advertise-community /对R2发送携带团队属性的路由

route-policy COMMUNITY permit node 5 /配置路由策略COMMUNITY,对匹配前缀列表AGGREGATE的路由不设置团队属性
if-match ip-prefix AGGREGATE
apply community none

route-policy COMMUNITY permit node 10 /未匹配上一个节点的路由,为其打上团队属性NO_EXPORT,这样就实现了仅对明细路由打上NO_EXPORT属性
apply community no-export

ip ip-prefix AGGREGATE index 10 permit 192.168.0.0 16 /配置前缀列表
AGGREGATE仅匹配192.168.0.0/16

我们通过命令display bgp routing-table 192.168.0.0查看R2上聚合路由的详细信息:
在这里插入图片描述
可以看到,该路由已被并标明是一条聚合路由,并且在AS100进行聚合,始发路由器的ROUTER ID是11.1.1.1。该路由并未携带任何团队属性。再查看R5的BGP路由表:
在这里插入图片描述
R5上只存在聚合路由,明细路由由于携带NO_EXPORT团队属性,并未发送给R5。

四、仅发送聚合路由和选定的明细路由
在这里插入图片描述

在上述场景下,通过仅发送聚合路由和选定的明细路由,我们还可以实现链路的备份和负载分担,方法如下:

  1. 让R1-R2的链路只宣告192.168.1.0/24和192.168.2.0/24这两条路由。
  2. 让R3-R4的链路只宣告192.168.3.0/24和192.168.4.0/24这两条路由
  3. 通过上述两条链路宣告聚合路由作为备份,再任一条链路出现故障的情况下,所有该链路上访问AS100的流量都会迅速被切换到另外一条链路上。

这里,我们需要R1和R3分别发送聚合路由和一部分明细路由,这时,会用到aggregate命令的另外一个参数“suppress-policy”。下面给出R1和R3的关键配置:

R1的关键配置:

bgp 100
peer 11.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
aggregate 192.168.0.0 255.255.0.0 suppress-policy SUPPRESS /聚合路由时使用抑制列表SUPPRESS,对于匹配路由策略SUPPRESS的明细路由进行抑制,没有匹配到的就放行,不抑制。
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
network 192.168.4.0
peer 11.1.1.2 enable

route-policy SUPPRESS permit node 5 /配置路由策略,注意这里只能配置if-match子句,用来匹配被抑制的路由。虽然上面使用的是抑制策略,但是这里仍然配置路由策略即可,但是名称需要和调用的抑制。并且不要再添加一个新的节点,只需要匹配抑制的条目即可。
if-match ip-prefix SUPPRESS

ip ip-prefix SUPPRESS index 10 permit 192.168.3.0 24 /配置前缀列表,匹配抑制的条目
ip ip-prefix SUPPRESS index 20 permit 192.168.4.0 24

R3的关键配置:

bgp 100
peer 12.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
aggregate 192.168.0.0 255.255.0.0 suppress-policy SUPPRESS
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
network 192.168.4.0
peer 12.1.1.2 enable

route-policy SUPPRESS permit node 5
if-match ip-prefix SUPPRESS

ip ip-prefix SUPPRESS index 10 permit 192.168.1.0 24
ip ip-prefix SUPPRESS index 20 permit 192.168.2.0 24

我们通过抑制特定的明细路由,实现了R1和R3只宣告聚合路由和特定的明细路由,在R5上查看BGP路由表:
在这里插入图片描述
可以看到,R5上聚合路由有两个下一跳,而192.168.1.0/24和192.168.2.0/24这两条路由的下一跳为R2,而192.168.3.0/24和192.168.4.0/24这两条路由的下一跳为R4。这就实现了访问AS100不同网段的流量的负载分担,而一旦有一条链路出现故障,由于聚合路由的存在,可以将流量快速切换到另外一条链路上。

五、仅聚合特定的明细路由
依然是这个场景下,假定我们要求R1只将192.168.1.0/24和192.168.2.0/24这两条路由进行聚合,而聚合其余的明细路由。如图:
在这里插入图片描述
这里,我们可以用到aggregate命令的“origin-policy”参数。下面给出R1的具体配置:

R1的关键配置:

bgp 100
peer 11.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
aggregate 192.168.0.0 255.255.0.0 detail-suppressed origin-policy ORIGIN /这里只有匹配路由策略ORIGIN的路由被聚合,其他明细路由未被聚合。并只宣告聚合路由
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
network 192.168.4.0
peer 11.1.1.2 enable

route-policy ORIGIN permit node 5 /配置路由策略ORIGIN(仍然是配置路由策略),注意这里只能配置if-match子句,匹配前缀列表ORIGIN的路由
if-match ip-prefix ORIGIN

ip ip-prefix ORIGIN index 10 permit 192.168.1.0 24 /配置前缀列表
ip ip-prefix ORIGIN index 20 permit 192.168.2.0 24

这样,就实现了只聚合特定的明细路由,而其余明细路由未被聚合,我们查看一下R2的BGP路由表:

在这里插入图片描述

可以看到,R2的BGP路由表中,只有一条聚合路由,和两条明细路由。由于192.168.1.0/24和192.168.2.0/24这两条路由已被聚合,而R1上又配置了detail-suppressed参数,所以这两条明细路由并未发送给R2,而其余明细路由由于未被聚合,所以被发送给了R2,这里还需要说明的是,只有被聚合的明细路由(192.168.1.0/24和192.168.2.0/24)均失效的情况下,聚合路由才会实效,而其余明细路由失效与否是不会影响聚合路由的。

六、修改聚合路由的属性

还是这个场景,在R5上,聚合路由的下一跳有两个,分别是R2和R4,而我们很可能要求手动实现R5选择R4作为优选下一跳,而选择R2作为备份下一跳。如果用MED属性,我们需要在R2和R4上部署路由策略,这里我们采用另外一种方式:在发送聚合路由的时候,可以修改聚合路由的属性。
在这里插入图片描述
由于明细路由均为我们手动Network进R1的,所以路由的Origin属性均为IGP,而当两条BGP路由的Origin分别为IGP和Incomplete时,BGP会优选Origin属性为IGP的路由。所以我们可以将R1发送给R2的聚合路由属性修改为Incomplete。

这时,我们会用到了aggregate命令的另一个参数“attribute-policy”。下面给出具体配置:

R1的关键配置:

bgp 100
peer 11.1.1.2 as-number 200

ipv4-family unicast
undo synchronization
aggregate 192.168.0.0 255.255.0.0 detail-suppressed attribute-policy ATTRIBUTE /按照路由策略ATTRIBUTE修改聚合路由属性
network 192.168.1.0
network 192.168.2.0
network 192.168.3.0
network 192.168.4.0
peer 11.1.1.2 enable

route-policy ATTRIBUTE permit node 5 /配置路由策略ATTRIBUTE修改属性为incomplete
apply origin incomplete

查看R5的BGP路由表:
在这里插入图片描述
可以看到,BGP优选了R4作为优选下一跳,由于R4对应的路由Ogn值为“i”代表该路由的Origin属性为IGP,而R2对应的路由的Ogn值为“?”代表该路由的Origin属性为Incomplete。

配置汇总:

  1. 执行命令bgp as-number,进入BGP视图。
  2. 执行命令ipv4-family unicast,进入IPv4单播地址族视图。
  3. 根据实际组网选择执行如下命令,配置路由的手动聚合。
    • 发布全部的聚合路由和明细路由:执行命令aggregate ipv4-address { mask | mask-length }
    • 只发布聚合路由:执行命令aggregate ipv4-address { mask | mask-length } detail-suppressed
    • 有选择的发布明细路由:执行命令aggregate ipv4-address { mask | mask-length } suppress-policy route-policy-name
    可以通过peer route-policy命令应用策略来达到相同的效果。
    • 生成检测环路的聚合路由:执行命令aggregate ipv4-address { mask | mask-length } as-set
    • 设置聚合路由的属性:执行命令aggregate ipv4-address { mask | mask-length } attribute-policy route-policy-name
    通过执行peer route-policy命令也可以达到相同效果。
    执行aggregate命令时,如果使用了关键字as-set,而在策略中也执行命令apply as-path配置了AS_Path属性,那么策略中的AS_Path不会生效。
    • 只根据部分明细路由来生成聚合路由:执行命令aggregate ipv4-address { mask | mask-length } origin-policy route-policy-name

手动聚合对BGP本地路由表中已经存在的路由表项有效,例如BGP路由表中不存在10.1.1.1/24等掩码长度大16的路由,即使配置了命令aggregate 10.1.1.1 16对其进行聚合,BGP也不会将这条聚合路由发布出去。

检测配置结果:使用display bgp routing-table [ network [ mask | mask-length ] ]命令查看BGP聚合路由信息。

另外,如果一个聚合路由条目的起源有?也有i,最后聚合出来的路由条目的起源为?。如果都为i才为i。

整理资料来源:《交换机在江湖》、华为培训文档

猜你喜欢

转载自blog.csdn.net/tushanpeipei/article/details/112756881