BGP路由聚合
BGP在AS之间传递路由信息,随着AS数量的增多,单个AS规模的扩大,BGP路由表将变得十分庞大,因此带来如下两类问题:
- 存储路由表将占用大量的内存资源,传输和处理路由信息需要消耗大量的带宽资源。
- 如果传输的路由条目出现频繁的更新和撤销,对网络的稳定性会造成影响。
本节将介绍BGP的路由聚合对上述两种问题的处理,下面我们将从以下三个方面进行具体介绍:
○ BGP路由聚合的必要性,解决BGP网络存在的问题。
○ BGP路由聚合的配置方法。
○ BGP路由聚合带来的问题讨论。
总结,BGP网络面临的问题
- 路由数量庞大,占用内存,消耗带宽
- BGP网络震荡,导致稳定性下降
BGP路由聚合的必要性
如图所示,AS 100内有4个用户网段,AS 200内有4个用户网段。AS 300连接了一个Client AS,该AS内的路由器比较低端,处理能力较低,因此既希望能访问AS100与AS 200内的网段,又不希望接收过多的明细路由,如何解决该问题?
解:在RTC上面做路由汇总(路由聚合)
路由汇总,能有效减少BGP路由器通告的路由条目的数量,减小设备的路由表规模,并将拓扑变化产生的影响限制在一个相对更小的范围内。
BGP路由聚合方式:
- 静态方式聚合(野路子)
- 自动聚合(一般不用)
- 手动聚合(真正靠谱)
BGP路由聚合方式–静态
场景:AS 100内有4个用户网段,RTA通过路由聚合屏蔽明细路由,只将一条聚合后的路由10.1.8.0/22发布给AS 200内的RTB。
BGP路由聚合–静态方式聚合(野路子)
- 做汇总的静态路由
- network发布出去
- 同时配置路由策略,过滤掉明细路由,达到汇总效果
实验:
接口配置
R1路由器
[Huawei]sysname R1
[R1]int g 0/0/0
[R1-GigabitEthernet0/0/0]ip add 10.1.13.1 24
[R1-GigabitEthernet0/0/0]
R2路由器
[Huawei]sysname r2
[r2]int g 0/0/0
[r2-GigabitEthernet0/0/0]ip add 10.1.23.2 24
R3路由器
[Huawei]sysname R3
[R3]int g 0/0/0
[R3-GigabitEthernet0/0/0]ip add 10.1.13.3 24
[R3-GigabitEthernet0/0/07q
[R3]int g 0/0/1
[R3-GigabitEthernet0/0/1]ip add 10.1.23.3 24
[R3]int g 0/0/2
[R3-GigabitEthernet0/0/2]ip add 10.1.34.3 24
[R3-GigabitEthernet0/0/2]
R4路由器
[Huawei]sysname R4
[R4]int g 0/0/0
[R4-GigabitEthernet0/0/0]ip add 10.1.34.4 24
BGP邻居配置
#配置BGP邻居
[R1]bgp 1
[R1-bgp]peer 10.1.13.3 as-number 3
[r2]bgp 2
[r2-bgp]peer 10.1.23.3 as 3
[R3]bgp 3
[R3-bgp]peer 10.1.13.1 as 1
[R3-bgp]peer 10.1.23.2 as 2
[R3-bgp]peer 10.1.34.4 as 4
[R4]bgp 4
[R4-bgp]peer 10.1.34.3 as 3
#R1添加环回口,并发布出去
[R1]int 1o 0
[R1-LoopBack0lip add 192.168.1.1 24
[R1-LoopBack0]q
[R1]int lo 1
[R1-LoopBack1]ip add 192.168.2.1 24
[R1-LoopBack1]q
#发布环回口
[R1]bgp 1
[R1-bgp]network 192.168.1.0 24
[R1-bgp]network 192.168.2.0 24
[R1]dis bgp routing-table # 查看发布的两条BGP路由信息,R3、R4上面也可以查看到这两条BGP路由信息
R2添加环回口,并宣告
[r2]int lo 1
[r2-LoopBack1]ip add 172.16.1.1 24
[r2-LoopBack1]q
[r2]int 1o 2
[r2-LoopBack2]ip add 172.16.2.1 24
[r2-LoopBack2]q
#路由宣告
[r2]bgp 2
[r2-bgp]network 172.16.1.0 24
[r2-bgp]network 172.16.2.0 24
#R3上配置一条汇总的静态路由
[R3]ip route-static 192.168.0.0 255.255.252.0 nu
[R3]ip route-static 192.168.0.0 255.255.252.0 NULL 0
[R3]dis ip routing-table protocol static #查看静态路由
#汇总的静态路由发布出去
[R3-bgp]network 192.168.0.0 22
[R3-bgp]dis this #查看当前BGP进程下的配置
[R3-bgp]dis bgp routing-table #汇总路由:192.168.0.0/22
同理,静态的172.16网段也是如此
做汇总的静态路由
[R3]ip route-static 172.16.0.0 255.255.252.0 nu
[R3lip route-static 172.16.0.0 255.255.252.0 NULL 0
[R3]bgp 3
[R3-bgp]network 172.16.0.0 22
这时,R3上出现了172.16.0.0的汇总路由
但是,利用静态方式强行汇总,这种路由不是严格意义上的BGP路由汇总,而是利用BGP发布路由的特点,利用静态路由先汇总,然后network发布出去,只不过明细路由还在。
此时,需要利用一些策略,过滤掉明细路由即可。
#匹配汇总路由
[R3]ip ip-prefix 1 permit 172.16.0.0 22
[R3]ip ip-prefix 1 permit 192.168.0.0 22
[R3]bgp 3
[R3-bgp]peer 10.1.34.4 ip-prefix 1 export
[R3-bgp]refresh bgp all export
[R3]dis bgp routing-table 172.16.0.0 #查看路由详细信息,汇总路由的标志是:network route
#记得触发更新:refresh bgp all export,此时,明细路由过滤完成,在R4上只有汇总路由
#这里在R4上添加一个环回口,并发布,作为二级运营商的一个用户:
[R4]int lo 0
[R4-LoopBack0]ip add 4.4.4.4 24
[R4]bgp 4
[R4-bgp]network 4.4.4.0 24
[R4-bgp]q
[R4]ping -a 4.4.4.4 192.168.1.1 #可以ping通
[R4]ping -a 4.4.4.4 172.16.1.1 #可以ping通
[R1]dis bgp routing-table # R1上会学习到4.0网段的路由
# 假设,R1上两条静态路由没有了
[R1-bgp]undo network 192.168.1.0 24
[R1-bgp]undo network 192.168.2.0 24
#此时,R3上就不会有明细路由了,但是静态的汇总路由还在,因为这并不是真正的汇总路由,只是因为写了一条静态的路由放在这儿,发布出去,并且,R4上面也会看到静态汇总路由
#静态的汇总:明细路由失效,汇总路由依然在,不受明细路由的影响,也就是,明细路由出现故障,那么在访问这些故障网段的时候,报文还是会发到R3上面,R3再丢掉,这就会导致R3上面大量的带宽被浪费。
#因此,虽然结合策略达到了汇总的效果:network route,但,这不是一种推荐的方法,只是钻了BGP发布路由的空子,是一种野路子。
总结:
利用静态路由执行BGP路由汇总
- 并不是真正意义上的BGP路由汇总,只是利用BGP发布路由的特点来实现汇总的效果。
- 明细路由并不会被抑制,还是会正常的通告给邻居,需要做明细路由的过滤(利用策略)。
- 会丢失明细路由的某些BGP路由属性,存在路由环路的风险。
- 明细路由是否存在,和汇总路由之间不存在依赖关系,导致汇总路由不能真实的反映网络的现状。
BGP路由聚合–自动聚合(一般不用)
BGP自动汇总(一般不用)
- 仅对自身通过import-route命令发布的路由生效,对邻居传来的或者network产生的BGP路由无效。
- 只能汇总成主类网络号,汇总精确度差,容易产生黑洞路由或次优路由。
- 明细路由会被抑制。
#把上面去掉的明细路由,再加回来
[R1]bgp 1
[R1-bgp]network 192.168.1.0 24
[R1-bgp]network 192.168.2.0 24
#去掉静态路由配置
[R3]undo ip route-static 192.168.0.0 22 NULL 0
[R3]undo ip route-static 172.16.0.0 22 NULL 0
#汇总的静态路由删掉了,也就不需要发布了
[R3-bgp]undo net
[R3-bgp]undo network 172.16.0.0 22
[R3-bgp]undo network 192.168.0.0 22
[R3-bgp]dis this
[V200R003C00]
bgp 3
peer 10.1.13.1 as-number 1
peer 10.1.23.2 as-number 2
peer 10.1.34.4 as-number 4
#
ipv4-family unicast
undo synchronization #关闭同步功能
peer 10.1.13.1 enable
peer 10.1.23.2 enable
peer 10.1.34.4 enable
peer 10.1.34.4 ip-prefix 1 export
#
return
# 一条命令即可开启自动汇总:summary automatic
[R3-bgp]summary automatic
# 此时,因为R3上面没有import-route产生的路由,所以没有实现汇总
# 接下来,R3上面引入静态路由,并发布:
[R3]ip route-static 1.1.1.0 30 NULL 0
[R3]bgp 3
[R3-bgp]network 1.1.1.0 30
[R3-bgp]q
[R3]dis bgp routing-table
# 这里,因为也不是import-route引入的,所以并没有自动汇总
# 这里,将network引入,更改为import引入
[R3-bgp]undo network 1.1.1.0 30
[R3-bgp]import-route static
# 成功自动汇总,但只能汇总成主类网络号
#另外,之前的配置静态路由加的策略,此时一定要删掉
[R3-bgp]undo peer 10.1.34.4 ip-prefix 1 export
此时,1.1.1.0/30成功汇总(前提是import-route引入),明细路由也被抑制,其他的192.168和172.16是network引入的,不汇总也不抑制。
*代表有效路由,>代表最优路由,s代表抑制路由
BGP路由聚合–手动聚合(真正靠谱)
BGP手动汇总,主流方式
- 只要是在BGP路由表中存在的路由,都能被手动汇总
- 可以实现精确汇总,可以支持CIDR
- 可以对汇总路由的属性做编辑
- 可以继承明细路由的相关属性,防止环路(起源属性、团体属性)
- 明细路由全部失效,汇总路由才会失效
- 默认情况下,明细路由依然会通告出去,需要抑制
AS_PATH和as set:
AS_PATH 记录路由传递的AS的次序,有序的。
as-set { } 无序的AS _PATH,防环用的,并不表明路由传递的次序,{ }中无论多少个AS号,都只算1个AS长度。
明细路由和汇总路由:
只要明细路由还有,汇总路由就不会失效。
明细路由只是删除部分,汇总路由依然存在,只有全部删除,汇总路由才会没有。
面临问题:
BGP路由聚合带来的问题–潜在环路
原因:聚合路由丢失了原明细路由的AS_PATH属性,导致产生环路风险。
BGP路由聚合带来的问题–解决方法
解决之法:汇总路由的AS_PATH属性依旧携帯着明细路由的路径信息,避免环路产生。
# R3的BGP配置情况
[R3]bgp 3
[R3-bgp]dis this
[V200R003C00]
bgp 3
peer 10.1.13.1 as-nunber 1
peer 10.1.23.2 as-number 2
peer 10.1.34.4 as-nunber 4
#
ipv4-family unicast
undo synchronization
sumnary automatic
import-route static
peer 10.1.13.1 enable
peer 10.1.23.2 enable
peer 10.1.34.4 enable
# 关闭自动聚合
[R3-bgp]undo summary automatic
#去掉import-route引入的静态路由
[R3-bgp]undo import-route static
#开始手动聚合
[R3-bgp]aggregate 172.16.0.0 22
[R3-bgp]dis bgp routing-table
虽然成功执行了一次BGP路由汇总,但是丢失了AS_PATH属性,明细路由也还在
手动聚合路由的标志:Aggregated route
因为在R3上面手动聚合,丢失了AS_PATH属性,所以在R4上面查看BGP路由表,origin属性值从R3的开始。
针对手动路由聚合,AS_PATH属性丢失,以及明细路由依然存在问题,下面是解决方法:抑制,继承
- aggregate 汇总路由
- detail-suppressed 抑制明细路由
- as-set 继承AS号
#抑制、继承
[R3-bgp]aggregate 172.16.0.0 22 ?
[R3-bgp]aggregate 172.16.0.0 22 detail-suppressed ?
[R3-bgp]aggregate 172.16.0.0 22 detail-suppressed as-set
[R3-bgp]dis this
BGP手动聚合路由的配置情况
聚合后的路由信息:
*代表有效路由,>代表最优路由,s代表抑制路由,2i中,as_path 2,i代表network方式引入
[R3-bgp]aggregate 192.168.0.0 22 detail-suppressed as-set
此时,在R4上面的效果,路由已聚合,明细路由被抑制,AS_PATH属性继承。
目前,路由传到R1、R2后,一看AS_PATH,直接丢弃,不接收,R1不收含有AS 1 的自己的汇总路由,R2同理不收含有AS 2 的自己的汇总路由:
利用策略对BGP属性进行修改
[R3]route-policy att permit node 10
[R3-route-policy]apply cost 999
[R3-route-policy]apply origin incomplete
[R3-route-policy]apply community no-export
[R3-route-policy]q
# 汇总明细路由,aggregate 汇总, as-set 继承, detail-supressed 抑制,attribute-policy 属性
[R3-bgp]aggregate 172.16.0.0 22 as-set detail-suppressed attribute-policy att
[R3-bgp]dis cu
查看汇总路由及属性
# 团体属性继续修改
[R3]route-policy att permit node 10
[R3-route-policy]dis this
[V200R003C00]
#
route-policy att permit node 10
apply cost 999
apply origin incomplete
apply community no-export
return
[R3-route-policy]apply community 3:100
#然后,挤牙膏,并刷新
[R3]bgp
[R3-bgp]peer 10.1.34.4 advertise-community
[R3-bgp]q
[R3]q
<R3>refresh bgp all export
#继续新的实验,在R1上把192.168的路由再次发布
[R1-bgp]net
[R1-bgp]network 192.168.1.0
[R1-bgp]network 192.168.2.0
R3上查看明细路由,汇总路由:
# 在R2上面建立两个环回口3 4,并发布
[r2-LoopBack3]ip add 192.168.3.1 24
[r2-LoopBack3]int lo 4
[r2-LoopBack4]ip add 192.168.4.1 24
[r2-LoopBack4]dis this
[r2-bgp]network 192.168.3.0
[r2-bgp]network 192.168.4.0
[r2-bgp]dis this
[V200R003C00]
bgp 2
peer 10.1.23.3 as-number 3
#
ipv4-family unicast
undo synchronization
network 0.0.0.0
network 172.16.1.0 255.255.255.0
network 172.16.2.0 255.255.255.0
network 192.168.3.0
network 192.168.4.0
peer 10.1.23.3 enable
#
return
#添加新的汇总路由:
[R3-bgp]aggregate 192.168.0.0 255.255.248.0 as-set detail-suppressed
#干掉之前的
[R3-bgp]undo aggregate 192.168 0.0 255.255.252.0
[R3-bgp]dis this
[R3-bgp]dis bgp routing-table
R3上查看BGP路由表,发现汇总路由用大括号把明细路由的AS_PATH继承下来了
对于192.168网段的路由,因为R3上进行了汇总,同时也对明细路由进行了抑制,继承了AS_PATH,所以汇总路由传不到R1、R2,同时R1、R2之间明细路由也因为抑制无法互传,R1、R2之间无法访问192.186网段。
解决方法:利用策略:
#配置策略,分别去往R1、R2
[R3]ip ip-prefix 1 permit 192.168.0.0 21
[R3]route-policy as1 permit node 10
[R3-route-policy]if-match ip-prefix 1
[R3-route-policy]apply as-path 2 overwrite
[R3-route-policy]q
[R3]route-policy as2 permit node 10
[R3-route-policy]if-match ip-prefix 1
[R3-route-policy]apply as-path 1 overwrite
#其他路由正常放行:
[R3]route-policy as1 permit node 20
[R3]route-policy as2 permit node 20
#应用策略
[R3-bgp]peer 10.1.13.1 route-policy as1 export
[R3-bgp]peer 10.1.23.2 route-policy as2 export
汇总路由传过来啦
总结
BGP路由聚合在IPV4网络中支持:自动聚合和手动聚合。
BGP路由聚合在IPV6网络中支持:手动聚合。
BGP路由聚合方式:
- 静态方式聚合(野路子,静态汇总路由+network发布+策略过滤明细路由)
- 自动聚合(一般不用,仅对自身import-route发布的路由生效,汇总成主类网络,明细路由会被抑制)
- 手动聚合(真正靠谱,精确汇总,支持属性编辑、继承,配合策略效果好)