Skip to content

0. 课件来源

BGP 承载了互联网数十万条路由,聚合(Aggregation) 是减少路由条目、优化路由表的核心手段。本节讲解三种聚合方式,以及 Community 的标记、传播、过滤和聚合继承策略。


1. 聚合的意义

益处说明
减少路由更新一条聚合路由代替多条明细,降低 Update 报文量
减少路由条目BGP 表和全局路由表变轻,设备资源消耗变小
增强稳定性明细路由抖动不影响聚合路由(聚合路由保持稳定)

2. 聚合方法一:山寨法(Static + Network)

2.1 原理

在始发路由器上,用一条静态路由(指向 Null0)+ network 命令宣告聚合路由:

text
AR1:
bgp 100
 network 11.1.12.0 255.255.252.0    # 宣告聚合路由 → BGP 产生 /22 聚合
#
ip route-static 11.1.12.0 255.255.252.0 NULL0   # 静态路由指向 NULL0

# NULL0 的三大作用:
# 1. 为聚合路由"构造"一条路由 → BGP network 能宣告
# 2. 防止黑洞(明细丢失时流量走聚合进 NULL0 丢弃,不会错误转发)
# 3. 防环

2.2 优缺点

优点缺点
简单、高效,不依赖 BGP 聚合特性只能在始发 AS 配置(其他 AS 不能配)
明细丢失时聚合依然存在,稳定明细全部丢失时聚合不会自动消失
不能携带额外 BGP 属性

3. 聚合方法二:自动聚合(Summary Automatic)

3.1 配置与原理

text
AR1:
bgp 100
 import-route direct route-policy loop
 summary automatic         # 开启自动聚合

自动聚合将引入的明细路由自动抑制为主类路由(classful 路由),并自动向路由表产生一条指向 NULL0 的主类聚合路由。

text
<AR1> dis bgp routing-table 11.0.0.0
BGP routing table entry information of 11.0.0.0/8:
Summary automatic route
Direct Out-interface: NULL0
Original nexthop: 127.0.0.1
AS-path Nil, origin incomplete, pref-val 0, valid, local, best, select
Aggregator: AS 100, Aggregator ID 1.1.1.1

3.2 特点

优点缺点
配置简单,一条命令只能在始发 AS 配置
自动产生 NULL0 路由防环只能聚合主类路由(如 /8, /16, /24),不精确
具有 BGP 聚合者属性自动聚合不可控粒度

4. 聚合方法三:手工聚合(Aggregate)★ 重点

4.1 基本配置

手工聚合可以在任意 AS 的任意路由器上配置,粒度完全可控:

text
AR3:
bgp 64523
 aggregate 11.1.12.0 255.255.252.0    # 生成 11.1.12.0/22 聚合路由

手工聚合与自动聚合一样:

  • 有聚合者属性(Aggregator:AS, Aggregator ID)
  • 本地产生 NULL0 防环路由

4.2 ⚠️ 致命问题:路由回灌

🚨 手工聚合默认不继承 AS-PATH!

手工聚合的聚合路由默认 AS-PATH 为空。如果 AR3 把这条聚合路由发给 AR2 → AR2 发给 AR1 → AR1 收到一条自己(AS 100)发出去但没有自己 AS 号的路由 → AS-PATH 防环失效 → 路由回灌!

4.3 解决方案:as-set

text
AR3:
bgp 64523
 aggregate 11.1.12.0 22 as-set    # 聚合路由继承明细路由的 AS-PATH

as-set 将明细路由的 AS-PATH 取集合,不相同的部分用 { } 包裹:

text
明细路由前缀      完整 AS-PATH
11.1.12.0/24      100 12
11.1.13.0/24      100 13
11.1.14.0/24      100 14
11.1.15.0/24      100 15

聚合后:11.1.12.0/22  AS-PATH = 100 {12 13 14 15}

                               AS-SET:AS 集合

AR1 收到后检查 AS-PATH → 发现有自己 AS 号 100 → 丢弃路由 → 防环成功。

4.4 聚合选项汇总

选项作用
aggregate x.x.x.x mask基本手工聚合
as-set继承明细路由的 AS-PATH(防环)
detail-suppressed只通告聚合路由,抑制明细
suppress-policy选择性抑制部分明细
origin-policy只聚合匹配路由策略的明细
attribute-policy修改聚合路由的属性

5. BGP Preference(优先级)

text
BGP 路由优先级:
  EBGP:255
  IBGP:255
  Local:255

修改优先级:
AR1:
bgp 100
 preference 254 253 252        # EBGP IBGP Local

BGP 路由表中标识为 local 的来源:

  1. network 进来的路由
  2. import-route 进来的路由
  3. 自动聚合产生的主类路由
  4. 手工聚合产生的聚合路由

6. 三种聚合方式对比

对比项山寨法自动聚合手工聚合
配置位置始发 AS 始发路由器始发 AS任意 AS 任意路由器
聚合粒度任意仅主类路由任意
防环静态 NULL0自动 NULL0自动 NULL0 + 需 as-set
属性无 BGP 属性有聚合者属性有聚合者属性
明细保护明细丢失聚合存在同上同上 + as-set 继承 AS-PATH
推荐度⭐ 仅简单场景⭐⭐⭐ 现网首选

7. Route-Policy 导出控制

对特定 peer 精细化控制路由的属性修改:

text
# AR1 对发给 AR2 的路由追加 AS-PATH
route-policy r1-r2-ex permit node 10
 if-match acl 2012
 apply as-path 12 additive              # 追加 AS-PATH(EBGP 防环控制)
#
bgp 100
 peer 172.16.12.2 route-policy r1-r2-ex export   # 对 peer 导出方向调用

# ⚠️ route-policy 末尾需要一条空 permit,否则未匹配路由被丢弃
route-policy r1-r2-ex permit node 50
 # 不写 if-match = 匹配所有;apply nothing = 原样放行

8. 折衷方案:attribute-policy + detail-suppressed

在实际部署中,常需通过 attribute-policy 控制聚合路由的 Community 等属性,并结合 detail-suppressed 抑制明细,实现精准路由发布策略。

text
bgp 100
 aggregate 11.1.12.0 22 as-set detail-suppressed attribute-policy SET-COMM
#
route-policy SET-COMM permit node 10
 apply community 100:100

9. Community:给路由附加可匹配的标签

Community 是 32 位的可选传递属性,可理解为路由携带的“标签”。它不直接决定下一跳,而是让沿途设备能按策略标记、过滤、控制传播范围。私有 Community 常写成 ASN:Value,例如 100:1

类型常见取值语义
公有internet可向任意 peer 正常传播
公有no-advertise不向任何 peer 发布
公有no-export不发布到本 AS 之外
公有no-export-subconfed不发布出当前联邦范围
私有65001:100由本组织自行约定,例如“仅备份出口”

WARNING

Community 只是标签。标签要产生实际效果,必须由本端或对端的 route-policy / community-filter 匹配并执行动作;私有值没有天然的全球语义。

9.1 标记与传播

text
# 给指定前缀添加私有标签;additive 表示保留原有 Community
route-policy MARK-BACKUP permit node 10
 if-match acl 2015
 apply community 65001:100 additive
route-policy MARK-BACKUP permit node 100

bgp 65001
 peer 192.0.2.1 route-policy MARK-BACKUP export
 # 必须显式允许 Community 随 Update 通告
 peer 192.0.2.1 advertise-community

advertise-community 需要在实际承载该属性的 peer 方向配置。若只做 apply community 而没有通告属性,对端可能看不到该标签,后续的 Community 过滤也无从谈起。

9.2 用 Community 过滤路由

text
# 仅匹配带 65001:100 的路由
ip community-filter basic BACKUP permit 65001:100

# 在入方向拒绝该类路由,其他路由原样放行
route-policy BLOCK-BACKUP deny node 10
 if-match community-filter BACKUP
route-policy BLOCK-BACKUP permit node 20

bgp 65002
 peer 192.0.2.2 route-policy BLOCK-BACKUP import

生产策略通常使用 deny 节点直接拒绝不需要的前缀;如果只想清除标签而不丢弃路由,则在 permit 节点使用 apply community none。无论采用哪种方式,都必须有一个明确的“其他路由如何处理”的末尾节点。


10. 公有 Community 的传播边界

text
route-policy LIMIT-TEST-ROUTE permit node 10
 if-match acl 2012
 apply community no-export
route-policy LIMIT-TEST-ROUTE permit node 100
标签适合场景验证重点
no-advertise本机保留的临时测试或抑制信息邻居 BGP 表不应看到该前缀
no-export允许在本 AS 内部传播、禁止泄漏给外部 ASIBGP 可见,EBGP 对端不可见
no-export-subconfed联邦内部的边界控制不越过联邦边界
internet取消特殊传播限制仍需受其他出口策略约束

11. 聚合时的 Community 继承

手工聚合配合 as-set 时,聚合路由可能继承明细路由的属性。如果多个明细携带不同的公有 Community,聚合后的路由会受到其中传播范围最严格的标签影响,导致聚合路由意外不被发布。

11.1 只继承符合条件的属性

text
ip community-filter basic KEEP-PRIVATE permit 65001:100
route-policy ORIGIN permit node 10
 if-match community-filter KEEP-PRIVATE

bgp 65001
 aggregate 10.10.10.0 23 as-set origin-policy ORIGIN

origin-policy 按匹配结果决定哪些明细属性参与聚合,适合保留私有业务标签、排除 no-export 一类限制标签。

11.2 直接重写聚合路由属性

text
route-policy CLEAN-AGGREGATE permit node 10
 apply community none

bgp 65001
 aggregate 10.10.10.0 23 as-set detail-suppressed attribute-policy CLEAN-AGGREGATE

attribute-policy 作用于生成后的聚合路由,适合清理或重写 Community;不要依赖它修改 AS_Path,AS_Path 的防环继承应由 as-set 完成。


12. 易混淆点与考前速记

对比项结论
山寨法static+network+NULL0,只能始发 AS 配
自动聚合summary automatic,只能主类路由,只能始发 AS 配
手工聚合aggregate,任意 AS 任意位置,推荐方案
as-set聚合路由继承明细 AS-PATH,防回灌(必需)
detail-suppressed只发聚合不发明细
NULL0 防环聚合路由自动生成 NULL0 ← 防环正确性关键
BGP preference默认 255(低于所有 IGP),可 preference 修改
Route-policy 末尾必须有 permit all,否则丢路由
Community标签本身不改路由;需策略匹配并配置通告
advertise-community允许 Community 沿对应 peer 传播

考前速记 6 条

  1. 聚合三法:山寨法(static+NULL0)、自动聚合(summary automatic)、手工聚合(aggregate)
  2. 手工聚合 = 最强:任意位置、任意粒度、需 as-set 防回灌
  3. as-set 继承 AS-PATH,防止聚合路由回灌到始发 AS
  4. NULL0 是聚合路由的"安全网":明细丢失时流量被丢弃而非乱转
  5. route-policy 末尾要加 permit all,否则未匹配全丢
  6. BGP preference = 255,IGP 优先
  7. Community = 可匹配的标签;no-export 控制不出 AS,私有值由组织自定义

🤖 AI 伴学

让 AI 帮你理解聚合和 as-set 的防环逻辑:

"请用'纸质报纸和电子版摘要'类比 BGP 聚合:山寨法是'手工写一份摘要寄给所有人'(static+network)——简单但只能新闻社自己写;自动聚合是'系统自动生成新闻标题摘要'——只认大类主题,细节可能漏;手工聚合是'任意编辑站都能写的新闻摘要'——灵活但有风险(默认不带 AS-PATH 容易被当成假新闻回传给新闻社)。as-set 就是'在摘要末尾标注原文来源(AS-SET)'——读者(AS 100 始发路由器)看到来源里有自己,就知道这是自己发过的新闻,直接拒绝不再转发,防止了新闻循环。最后 NULL0 是'收件箱的垃圾桶':如果原新闻全文丢了,读者至少不会把摘要错发给别人——直接进垃圾桶,保证不传谣。"

真人撰写written by human