联盟
在超大型网络中,解决AS内部的IBGP网络连接激增问题,除了使用路由反射器之外,还可以使用联盟。 联盟将一个AS划分为若干个子AS。每个子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系,但联盟外部AS仍认为联盟是一个AS。 配置联盟后,原AS号将作为每个路由器的联盟ID(保留原有的IBGP属性,联盟相关的属性在传出联盟时会自动被删除)。
[AR2]bgp 65001 配置设备所属的子AS
[AR2-bgp]confederation id 100 指定子AS对应的联盟AS
[AR2-bgp]confederation peer-as 65002 65003 指定建立联盟EBGP对等体的子AS
::: warning 上述配置只在AR2上做,原因是AR2是AS 65001的ASBR,与AS 65002、65003直接相连。 其他设备只需要指定子AS对应的联盟AS即可。不需要指定建立联盟EBGP对等体的子AS。 :::
[AR1-bgp]peer 2.2.2.2 as-number 65001
[AR1-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[AR2-bgp]peer 1.1.1.1 as-number 65001
[AR2-bgp]peer 1.1.1.1 connect-interface LoopBack 0
[AR2-bgp]peer 3.3.3.3 as-number 65002
[AR2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[AR5]bgp 65003
[AR5-bgp]confederation id 100
[AR5-bgp]confederation peer-as 65001
[AR5-bgp]peer 2.2.2.2 as-number 65001
[AR5-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[AR3]bgp 65002
[AR3-bgp]confederation id 100
[AR3-bgp]confederation peer-as 65001
[AR3-bgp]peer 2.2.2.2 as-number 65001
[AR3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[AR3-bgp]peer 4.4.4.4 as-number 65002
[AR4]bgp 65002
[AR4-bgp]confederation id 100
[AR4-bgp]peer 3.3.3.3 as-number 65002
[AR4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
上述EBGP出现对等体关系未建立的情况,原因是EBGP对等体之间传递的报文默认TTL是1,如果使用环回口建立EBGP对等体关系,需要把TTL值改大,保证双方报文交互。
[AR2-bgp]peer 3.3.3.3 ebgp-max-hop 2
[AR2-bgp]peer 5.5.5.5 ebgp-max-hop 2
[AR3-bgp]peer 2.2.2.2 ebgp-max-hop 2
[AR5-bgp]peer 2.2.2.2 ebgp-max-hop 2
::: tip 联盟子AS内设备可以跨AS建立EBGP对等体关系,不能建立IBGP对等体关系。 (每个联盟子AS内部建立IBGP全连接关系,子AS之间建立联盟EBGP连接关系) :::
上图引入AS 200内的设备AR6,以接口作为更新源,添加配置:
[AR6]bgp 200
[AR6-bgp]peer 10.1.46.4 as-number 100
[AR4]bg 65002
[AR4-bgp]peer 10.1.46.6 as 200
::: warning 上述在AR4中指定的AS号200不是AR4所在联盟的子AS,即AR6是其他AS,需要使用联盟AS发起连接。 ::: AR6引入lo 2路由并通告在BGP中,AR4可以正常收到,但AR4传递给子AS内的IBGP对等体时会出现问题: 上述路由并不是最优且可用的,原因是下一跳没有被更改。
[AR4-bgp]peer 3.3.3.3 next-hop-local 将路由传给对等体后的下一跳改为自身4.4.4.4
由于联盟内所有设备都可以和AR4直接通信,所以都可以收到最优可用的AR6通告路由。 ::: tip 联盟AS的边界设备ASBR收到其他AS的路由,传递到联盟内的IBGP邻居和EBGP邻居,需要指定下一跳改变为更新源地址。
联盟内子AS之间的EBGP邻居传递路由时,不需要更改下一跳,原因是联盟内IGP相互通信。 :::
联盟内的AS和正常AS之间保留相同的防环机制。 每经过一个子AS,都会将子AS的AS号进行保留,使用()来保存,从右往左依次添加“联盟内有序AS”: AR5收到路由后,查询path中是否存在本端子AS号,没有则接收,有则认为环路丢弃。
如果联盟(100)内产生路由,传递到其他AS(200),则会将()内的子AS替换为联盟AS(100)。
联盟内无序AS:将路由进行汇总,会将明细路由的子AS号进行保留,使用[]来保存。 上述拓扑中,如果在AR2做了路由汇总,传到AR3时,AR2所在的子AS号会以小括号的形式保留,经过AR2的其他子AS的明细路由所在的子AS号会以中括号形式出现。
绝大多数场景都会使用路由反射器,联盟几乎很少使用。
聚合
- 自动聚合
特点:将路由聚合为自然网段(主类网段),但是只有本地以import形式引入的路由可以被自动聚合。
聚合后会将所有明细路由抑制发送,不能解除。
明细路由属性的继承:
- as-path:自动聚合路由不继承明细路由的as-path。
- Origin:自动聚合路由的起源属性为?,不继承明细路由的起源属性。
- Next-hop:自动聚合相当于重新发布一条路由,更新给邻居的下一跳为自身。 即汇总后的路由发给对等体设备后将下一跳变成汇总路由的设备。
[AR1-bgp]summary automatic 自动汇总
引入一条32位路由后,BGP路由表中192.168.1.1为引入路由,192.168.1.0为自动聚合汇总出的路由。引入的明细路由被抑制。 传递给其他对等体的是汇总后的路由。
实验查看属性的继承:
[AR1]route-policy attribute permit node 10
[AR1-route-policy]apply cost 100 MED
[AR1-route-policy]apply local-preference 1000 本地优先级
[AR1-route-policy]apply as-path 123 321 additive as-path
[AR1-route-policy]apply origin igp 起源
在路由引入时增加策略:
[AR1-bgp]import-route static route-policy attribute med 1000
(策略内设置的MED优先级高于引入时设置的MED)
查看汇总路由的属性: 即汇总路由不会继承明细路由的属性。 ::: warning 自动聚合不能继承明细路由的属性,即管理员无法对路由进行操控。 :::
- 手工聚合 特点:按照用户的需求进行聚合,可以支持无类网络,聚合后的网段需要手工指定,所有BGP内的路由都可以被手工聚合。聚合更精确,扩展性比较强。 ::: tip 聚合后默认明细路由和聚合路由一起发送,可以通过配置detail-suppressed关键字抑制所有明细的发布(会出现环路问题)。 也可以通过suppress-policy调用router-policy来选择哪些明细路由被抑制。 :::
明细路由属性的继承: - as-path:默认手工聚合路由不会继承明细路由的as-path,但在聚合时添加as-set参数就会将明细路由经过的AS用{}进行标记,此时聚合路由就可以通过as-set记录命令路由经过的as。 - Origin:手工聚合路由默认继承明细路由中起源属性最差的。 - Next-hop:手工聚合相当于重新发布一条路由,更新给邻居的下一跳为自身。和自动汇总一致。 ::: tip 如果有多条明细被汇总,比较起源属性 i > e > ? ,汇总路由继承最差的。 :::
配置时可挑选的关键字:
as-set:作用是防环。
Detail-suppressed:抑制所有明细路由。
Suppress-policy:抑制策略,用于选择被抑制的明细路由。
Attribute-policy:用于指定配置聚合之后聚合路由的属性。如针对起源属性为i的路由做汇总等。和route-policy类似。
Origin-policy:用于指定可以被聚合的明细路由。
::: warning Suppress-policy的默认动作是拒绝,被匹配到就是拒绝,未被匹配到的默认放行。 :::
[AR1-bgp]aggregate 192.168.1.0 24 手工聚合
将明细路由的起源属性改为?:
[AR1-route-policy]apply origin incomplete
由上,汇总路由的起源属性默认继承明细路由低的起源属性。
[AR1-bgp]aggregate 192.168.1.0 24 as-set 手工聚合时添加as-set参数
[AR1-bgp]aggregate 192.168.1.0 24 as-set detail-suppressed 添加参数抑制明细路由
BGP聚合环路:
保证顺时针传递路由:
[AR2]route-policy deny deny node 10
[AR2-bgp]peer 10.1.23.3 route-policy deny export
[AR3]route-policy deny deny node 10
[AR3-bgp]peer 10.1.34.4 route-policy deny export
AR2把AS 100传来的路由汇总为24位:
[AR2-bgp]aggregate 100.1.1.0 24 detail-suppressed
AR3汇总自身环回口路由,AS 400传来的正好是同网段,被汇总:
[AR3-bgp]aggregate 100.1.0.0 16 detail-suppressed
当AR1的明细路由100.1.1.1失效,AR2再访问该路由,路由表中24位的汇总路由是传给其他设备的,自己不使用,AR2走下一跳不是自身的16位路由: ::: tip BGP本身不产生路由,BGP表中下一跳是自身的路由,在路由表中一定有对应的其他协议路由。 ::: 到达AR3后,路由走下一跳是AR4的路由: AR4的两条汇总路由都是去往AR2的: 如上,出现路由环路。
防环: AR2收到明细路由后,根据最长掩码匹配,会优先匹配24位掩码。 ::: tip 做路由汇总的设备会把自身产生的汇总路由的下一跳指向NULL 0。防止数据环路。 :::
路由层面上,AR2不应该收到16位的汇总路由。
路由汇总时添加as-set参数:
[AR2-bgp]aggregate 100.1.1.0 255.255.255.0 detail-suppressed as-set
[AR3-bgp]aggregate 100.1.0.0 255.255.0.0 detail-suppressed as-set
汇总路由携带明细路由经过的AS:
BGP路由优选
上图中Preferred-Value表示BGP的首选值,是华为设备的私有属性。 BGP只传递最优有效路由,即AR2收到来自AR3、AR4传来的AR5环回口路由时,选择AR3传来的发给AR1。 ::: warning 从对等体来的更新信息,先放入到Adj-RIB-In(从邻居接收到的路由信息库),联动入方向的策略引擎,再通过路径选择,将最优的路由信息加入本地BGP路由表,再将最优的路由加入IP路由表,再联动出方向的策略引擎,再放到Adj-RIB-Out(给邻居发送的路由信息库),将更新信息发送给对等体。 :::
优选协议首选值大的路由
[AR2]route-policy prefVal permit node 10
[AR2-route-policy]apply preferred-value 1000 修改协议首选值为1000
[AR2-bgp]peer 4.4.4.4 route-policy prefVal import 路由进入时执行策略
如上,来自AR4的路由被优选(首选值越大越优先),AR1收到的是来自AR4传来的路由: ::: warning 对于IBGP对等体可以用于出方向或者入方向。 对于EBGP对等体只能用于入方向。 :::
::: warning 不同AS的路由MED值没有可比性。 (不同AS内可能IBGP的协议不同,开销计算方式不同) 如下命令可以忽略不同AS的影响直接比较MED值:
[AR2-bgp]compare-different-as-med
::: 如果前8条完全相同,可以配置路由负载分担:
[AR2-bgp]maximum load-balancing ?
INTEGER<1-8> 指定负载分的条目数,EBGP和IBGP都可以进行负载分担
ebgp EBGP routes as equal cost route
ibgp IBGP routes as equal cost route
单独做上述命令在选路时和负载分担时都会对as-path做检查,要求路径和长度一致。
::: tip
路由负载分担只是BGP路由表转到IP路由表的操作,向对等体传递时只会传递BGP路由表中最优的一条路由。
:::
::: warning
不同AS的路由不能做负载分担。(as-path长度相同但路径不同)
添加如下命令可以忽略不同AS的影响:
[AR2-bgp]load-balancing as-path-ignore
两条命令同时使用时,选路时可以忽略as-path的影响,但负载分担时仍会检查as-path。 即添加该命令时,选路时会忽略本条进行第九条及以后的选路规则比较。 :::
通过以上BGP选路规则,一定可以选出最优的一条路由,满足了BGP的传递的条件(BGP只传递最优的路由)。