第90篇:BGP 聚合与 AS_SET 属性

关键词

BGP、路由聚合、Aggregation、AS_SET、summary、CIDR


一、为什么需要 BGP 路由聚合?

互联网上 BGP 路由表已超过 90 万条,如果不做聚合,这个数字会大得多。

聚合的好处: 1. 减少路由表条目——用一条聚合路由替代多条明细路由 2. 提高稳定性——明细路由震荡不影响聚合路由 3. 降低 LSP 开销——减少 BGP Update 报文数量


二、BGP 聚合的两种方式

方式 配置命令 说明
手动聚合 aggregate 手动指定聚合路由
自动聚合 summary automatic 按类自动聚合(已不推荐)

三、手动聚合配置

3.1 基本配置

bgp 100
 aggregate 172.16.0.0 255.255.0.0        # 发布聚合路由

3.2 聚合的关键参数

参数 说明 默认
detail-suppressed 抑制明细路由发布 不抑制
as-set 生成 AS_SET 属性 不生成

四、detail-suppressed 参数

4.1 不带 detail-suppressed

bgp 100
 aggregate 172.16.0.0 255.255.0.0

# 结果:聚合路由和明细路由都通告
# 对端 AS 200 收到:
#   172.16.0.0/16 (聚合)
#   172.16.1.0/24 (明细)
#   172.16.2.0/24 (明细)
#   ...

4.2 带 detail-suppressed

bgp 100
 aggregate 172.16.0.0 255.255.0.0 detail-suppressed

# 结果:只通告聚合路由
# 对端 AS 200 收到:
#   172.16.0.0/16 (聚合)
#   172.16.1.0/24 (被抑制)
#   172.16.2.0/24 (被抑制)

4.3 选择性抑制

# 只抑制部分明细路由
route-policy SUPPRESS permit node 10
 if-match ip-prefix SUPPRESS_LIST

bgp 100
 aggregate 172.16.0.0 255.255.0.0 suppress-policy SUPPRESS

五、AS_SET 参数

5.1 没有 AS_SET 的问题

AS 100                   AS 200                  AS 300
  │                        │                       │
  │── eBGP ───────────────│── eBGP ───────────────│
  │  172.16.1.0/24        │                       │
  │  172.16.2.0/24        │                       │
  │                        │                       │
  │                        │   聚合后:              │
  │                        │   172.16.0.0/16        │
  │                        │   AS_PATH = [200]      │
  │                        │                       │
  │  AS 300 发现:          │                       │
  │  AS_PATH = [200]        │                       │
  │  但实际上路由来自 AS 100  │                       │
  │  → 潜在环路风险         │                       │

5.2 使用 AS_SET

bgp 200
 aggregate 172.16.0.0 255.255.0.0 as-set

# 结果:
#   AS_PATH = [200 {100}]   ← AS_SET = {100}
#   AS_SET 中的 AS 号没有顺序,放在大括号中

AS_SET 的作用: - 告诉对端:这条聚合路由的明细路由来自 AS {100} - 防环:如果 AS 100 收到这条路由,发现自己在 AS_SET 中 → 丢弃

5.3 AS_SET 的选路影响

display bgp routing-table 172.16.0.0

  Network: 172.16.0.0/16
  AS_PATH: 200 {100}
  # AS_PATH 长度计算:200(1 个 AS)+ {100}(1 个 AS,算 1) = 2

注意:AS_SET 中的每个 AS 在计算 AS_PATH 长度时算 1 个。这是 BGP 选路规则 4(AS_PATH 最短)中的一部分。


六、聚合路由的 attributes

6.1 聚合路由的属性继承

当生成聚合路由时,它的属性来自最匹配的明细路由:

属性 继承规则
NEXT_HOP 聚合设备的接口 IP
LOCAL_PREF 使用明细路由中的最高值
MED 不使用(聚合路由不继承 MED)
AS_PATH 聚合设备生成新的 AS_PATH

6.2 通过 Route-Policy 设置属性

route-policy AGGREGATE_ATTR permit node 10
 apply as-path 100 additive          # 添加 AS 100
 apply local-preference 200
 apply community 100:100

bgp 100
 aggregate 172.16.0.0 255.255.0.0 attribute-policy AGGREGATE_ATTR

七、自动聚合(不推荐)

bgp 100
 summary automatic                    # 按主类网络自动聚合(BGP-3 特性)

问题: - 按 A/B/C 类网络聚合,不支持 CIDR - 已不推荐使用


八、聚合的注意事项

8.1 聚合导致的信息丢失

聚合后丢失的信息:
  - 路由起源信息(AS 细节)
  - MED 值
  - 部分 Community 属性

如果需要保留这些信息,考虑使用 as-set 和 route-policy

8.2 聚合可能导致次优路径

AS 100 有 172.16.1.0/24 和 172.16.2.0/24
AS 200 有 172.16.3.0/24

AS 300 聚合为 172.16.0.0/16(指向 AS 100)

172.16.3.0/24 的流量也会先到 AS 100 → 次优路径

解决:使用 suppress-policy 选择性抑制

8.3 查看聚合信息

display bgp routing-table 172.16.0.0

  Network: 172.16.0.0/16
  Path/Ogn: 200 {100} i
  Aggregator: AS 100, 1.1.1.1      ← 聚合设备信息
  Atomic-aggregate                  ← 标记:信息已被聚合(可能丢失细节)

九、总结

配置 作用 推荐使用
aggregate x.x.x.x y.y.y.y 发布聚合路由
detail-suppressed 抑制明细路由 ✅ 外部 AS
as-set 保留 AS 起源信息 ✅ 推荐
suppress-policy 选择性抑制 ✅ 精细控制
attribute-policy 修改聚合路由属性 ⚠️ 按需
summary automatic 自动聚合 ❌ 不推荐

十、思考

  1. BGP 路由聚合的作用是什么?它为什么对互联网路由表规模很重要?
  2. detail-suppressed 参数的作用是什么?在什么场景下需要使用它?
  3. AS_SET 属性的作用是什么?没有 AS_SET 会有什么潜在风险?
  4. 聚合路由的 AS_PATH 长度如何计算?AS_SET 中的 AS 算几个?
  5. 聚合路由可能导致次优路径吗?如何避免?

下篇预告:第91篇《BGP Community 属性与路由控制》——利用 Community 实现灵活的路由策略。