BGP 防环机制和聚合
# 水平分割
在AS内(IBGP):水平分割机制可以确保从IBGP收到的更新不会发布给IBGP,IBGP更新只传一跳 如上图所示,E发给A,A发给B和C,D就收不到了,但倘若希望D也能收到,该如何解决呢?
最简单粗暴的方法是全互联 但这种方案几乎不可能使用,因为肉眼可见的复杂度增长。
因此,更加实用的方法是通过路由反射器和联盟去解决这类需求
# AS_PATH
这是用于AS间(EBGP)的属性,BGP更新内的重要属性,代表该路由所经过的AS号,如果接受路由器发现AS号与本地AS号一致则丢弃。
# 路由聚合
在执行静态聚合和手动聚合前,切记要先将需要聚和的路由用network宣告
BGP中通过三种方式实现聚合
- 静态聚合 - 通过配置静态路由汇总明细路由,再用network进行宣告
- 自动聚合 - 对引入的IGP路由进行主类掩码聚合,而原引入的路由被抑制,不会被优选和发布给BGP邻居,通过
summary automatic
可以开启自动聚合功能
假设有10.1.8.0/24
、10.1.9.0/24
、10.1.10.0/24
、10.1.11.0/24
,在开启自动聚合功能后,会统一为10.0.0.0/8
- 手动聚合 - 对引入和本地路由进行聚合,最优选为手动聚合
在用network宣告需要聚合的路由后,通过使用aggregate [网段] [掩码]
指令将network宣告与之匹配的路由进行聚合,当然还能追加参数detail-suppressed
从而抑制明细
手动聚合比自动聚合优先级更高,工程师应当优先使用手动聚合。
# 环路问题
假设有上述拓扑图,在AR3处有4个路由引入,但AR3并未在导出路由给AR1前做路由聚合,AR1自行做了路由聚合并生成了聚合路由18.1.0.0/22
,但会发生一种情况,这条新的聚合路由丢失了原来的AS_PATH,这意味着AR3会学到这条路由从而形成一个环路。
因此,我们在进行手动聚合时,还需要追加一个as-set
属性,用于保留原有的AS_PATH属性