0. 课件来源
BGP 承载了互联网数十万条路由,聚合(Aggregation) 是减少路由条目、优化路由表的核心手段。本节讲解三种聚合方式,以及 Community 的标记、传播、过滤和聚合继承策略。
1. 聚合的意义
| 益处 | 说明 |
|---|---|
| 减少路由更新 | 一条聚合路由代替多条明细,降低 Update 报文量 |
| 减少路由条目 | BGP 表和全局路由表变轻,设备资源消耗变小 |
| 增强稳定性 | 明细路由抖动不影响聚合路由(聚合路由保持稳定) |
2. 聚合方法一:山寨法(Static + Network)
2.1 原理
在始发路由器上,用一条静态路由(指向 Null0)+ network 命令宣告聚合路由:
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 配置与原理
AR1:
bgp 100
import-route direct route-policy loop
summary automatic # 开启自动聚合自动聚合将引入的明细路由自动抑制为主类路由(classful 路由),并自动向路由表产生一条指向 NULL0 的主类聚合路由。
<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.13.2 特点
| 优点 | 缺点 |
|---|---|
| 配置简单,一条命令 | 只能在始发 AS 配置 |
| 自动产生 NULL0 路由防环 | 只能聚合主类路由(如 /8, /16, /24),不精确 |
| 具有 BGP 聚合者属性 | 自动聚合不可控粒度 |
4. 聚合方法三:手工聚合(Aggregate)★ 重点
4.1 基本配置
手工聚合可以在任意 AS 的任意路由器上配置,粒度完全可控:
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
AR3:
bgp 64523
aggregate 11.1.12.0 22 as-set # 聚合路由继承明细路由的 AS-PATHas-set 将明细路由的 AS-PATH 取集合,不相同的部分用 { } 包裹:
明细路由前缀 完整 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(优先级)
BGP 路由优先级:
EBGP:255
IBGP:255
Local:255
修改优先级:
AR1:
bgp 100
preference 254 253 252 # EBGP IBGP LocalBGP 路由表中标识为 local 的来源:
network进来的路由import-route进来的路由- 自动聚合产生的主类路由
- 手工聚合产生的聚合路由
6. 三种聚合方式对比
| 对比项 | 山寨法 | 自动聚合 | 手工聚合 |
|---|---|---|---|
| 配置位置 | 始发 AS 始发路由器 | 始发 AS | 任意 AS 任意路由器 |
| 聚合粒度 | 任意 | 仅主类路由 | 任意 |
| 防环 | 静态 NULL0 | 自动 NULL0 | 自动 NULL0 + 需 as-set |
| 属性 | 无 BGP 属性 | 有聚合者属性 | 有聚合者属性 |
| 明细保护 | 明细丢失聚合存在 | 同上 | 同上 + as-set 继承 AS-PATH |
| 推荐度 | ⭐ 仅简单场景 | ⭐ | ⭐⭐⭐ 现网首选 |
7. Route-Policy 导出控制
对特定 peer 精细化控制路由的属性修改:
# 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 抑制明细,实现精准路由发布策略。
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:1009. 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 标记与传播
# 给指定前缀添加私有标签;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-communityadvertise-community 需要在实际承载该属性的 peer 方向配置。若只做 apply community 而没有通告属性,对端可能看不到该标签,后续的 Community 过滤也无从谈起。
9.2 用 Community 过滤路由
# 仅匹配带 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 的传播边界
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 内部传播、禁止泄漏给外部 AS | IBGP 可见,EBGP 对端不可见 |
no-export-subconfed | 联邦内部的边界控制 | 不越过联邦边界 |
internet | 取消特殊传播限制 | 仍需受其他出口策略约束 |
11. 聚合时的 Community 继承
手工聚合配合 as-set 时,聚合路由可能继承明细路由的属性。如果多个明细携带不同的公有 Community,聚合后的路由会受到其中传播范围最严格的标签影响,导致聚合路由意外不被发布。
11.1 只继承符合条件的属性
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 ORIGINorigin-policy 按匹配结果决定哪些明细属性参与聚合,适合保留私有业务标签、排除 no-export 一类限制标签。
11.2 直接重写聚合路由属性
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-AGGREGATEattribute-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 条:
聚合三法:山寨法(static+NULL0)、自动聚合(summary automatic)、手工聚合(aggregate)手工聚合 = 最强:任意位置、任意粒度、需 as-set 防回灌as-set 继承 AS-PATH,防止聚合路由回灌到始发 ASNULL0 是聚合路由的"安全网":明细丢失时流量被丢弃而非乱转route-policy 末尾要加 permit all,否则未匹配全丢BGP preference = 255,IGP 优先Community = 可匹配的标签;no-export 控制不出 AS,私有值由组织自定义
🤖 AI 伴学
让 AI 帮你理解聚合和 as-set 的防环逻辑:
"请用'纸质报纸和电子版摘要'类比 BGP 聚合:山寨法是'手工写一份摘要寄给所有人'(static+network)——简单但只能新闻社自己写;自动聚合是'系统自动生成新闻标题摘要'——只认大类主题,细节可能漏;手工聚合是'任意编辑站都能写的新闻摘要'——灵活但有风险(默认不带 AS-PATH 容易被当成假新闻回传给新闻社)。as-set 就是'在摘要末尾标注原文来源(AS-SET)'——读者(AS 100 始发路由器)看到来源里有自己,就知道这是自己发过的新闻,直接拒绝不再转发,防止了新闻循环。最后 NULL0 是'收件箱的垃圾桶':如果原新闻全文丢了,读者至少不会把摘要错发给别人——直接进垃圾桶,保证不传谣。"
