关键词:BGP、Community、团体属性、路由控制、Standard Community、Extended Community、路由策略
第91篇:BGP Community 属性与路由控制
一、引言
在第90篇中,我们学习了 BGP 路由聚合技术。聚合能有效缩减路由表规模,但也会带来 AS_PATH 丢失等副作用。当我们面对更精细的路由控制需求时——比如"如何让某条路由优先从某个出口发出""如何阻止某条路由传播到特定对等体"——单纯依靠 AS_PATH 或 LOCAL_PREF 已经力不从心。
BGP Community(团体属性)正是为此而生的机制。它允许我们在 BGP 路由上附加标签,下游路由器根据标签匹配并执行相应的路由策略。Community 不改变路由本身的可达性,却为路由控制提供了极强的灵活性。
二、核心概念
2.1 Community 属性概述
Community 是 BGP 的可选过渡(Optional Transitive)属性。所谓"可选",表示不支持该属性的 BGP 路由器可以忽略它;"过渡"表示即使被忽略,它也会继续向下一跳传递。
Community 的核心价值在于解耦——将"打标签"与"读标签执行策略"两个动作分离到不同的路由器上完成,从而实现集中式策略管理和分布式策略执行。
2.2 Community 格式分类
| 类型 | 长度 | 格式 | 说明 |
|---|---|---|---|
| Standard Community | 4 字节 | ASN:Value | 最常用,ASN 和 Value 各占 2 字节 |
| Large Community | 12 字节 | ASN:Data1:Data2 | RFC 8092 定义,更大的标记空间 |
| Extended Community | 8 字节 | Type:Length:Value | 用于 MPLS VPN、EVPN 等场景 |
Standard Community 常见值:
| 示例 | 含义 |
|---|---|
100:100 |
AS 100 定义的标记,值为 100 |
100:1 |
AS 100 定义的标记,值为 1(可用于编号分类) |
65535:65535 |
通配,匹配任意 Standard Community |
no-export |
预定义,等价于 Internet Admin:100 |
no-advertise |
预定义,等价于 Internet Admin:101 |
no-export-subconfed |
预定义,等价于 Internet Admin:102 |
2.3 预定义 Community 详解
| 预定义 Community | 标准值 | 行为 |
|---|---|---|
| no-export | 0:EXPORT | 路由不会被通告给任何 eBGP 对等体,但可以在 iBGP 域内传递 |
| no-advertise | 0:ADVERTISE | 路由不会被通告给任何 BGP 对等体(包括 iBGP 和 eBGP) |
| no-export-subconfed | 0:EXPORT-CONFED | 路由不会传播出当前 Confederation 子 AS |
2.4 Community 传递规则

关键规则:
1. 默认情况下,接收到的 Community 会透传给所有对等体
2. 可以使用 strip-community 命令清除 Community
3. 使用 additive 关键字可在保留原有 Community 的基础上追加新 Community
4. Confederation 场景下,Confed_members 属性在子 AS 边界被丢弃
三、技术细节
3.1 Community 配置完整流程
Community 的典型使用遵循"打标签→传递→匹配→执行"四步模式:

3.2 Community 匹配方法
华为 VRP 提供多种 Community 匹配方式:
# 方式1:基本 Community 过滤器(精确匹配)
ip community-filter basic FILTER1 permit 100:100
ip community-filter basic FILTER1 permit 100:200
# 方式2:高级 Community 过滤器(正则匹配)
ip community-filter advanced FILTER2 permit 100:.*
# 匹配所有以 100: 开头的 Community
# 方式3:在 route-policy 中直接匹配
route-policy COMM-POLICY permit node 10
if-match community-filter FILTER1
apply local-preference 200
匹配模式对比:
| 匹配方式 | 语法 | 灵活性 | 适用场景 |
|---|---|---|---|
| basic(精确) | permit 100:100 |
低 | 精确匹配已知 Community |
| advanced(正则) | permit 100:.* |
高 | 批量匹配同一 AS 定义的 Community |
| direct(直接) | if-match community 100:100 |
中 | 简单场景内联匹配 |
3.3 Community 的清除与追加
# 清除所有 Community
route-policy CLEAR-COMM permit node 10
apply community none
# 追加 Community(保留原有)
route-policy ADD-COMM permit node 10
apply community 100:300 additive
# 替换 Community(覆盖原有)
route-policy REPLACE-COMM permit node 10
apply community 100:400
# 不使用 additive,原有 Community 被替换
3.4 Large Community
Large Community(RFC 8092)采用 12 字节格式 ASN:Data1:Data2,其中 Data1 和 Data2 均为 4 字节,提供 2^64 倍的标记空间:
# 华为 VRP 配置 Large Community
route-policy LARGE-COMM permit node 10
apply community large 100:1000001:1 additive
| 对比项 | Standard | Large |
|---|---|---|
| 长度 | 4 字节 | 12 字节 |
| 格式 | ASN:Value | ASN:Data1:Data2 |
| 标记空间 | 2^32 | 2^96 |
| 设备支持 | 所有版本 | VRP V200R010+ |
3.5 Extended Community
Extended Community 主要用于 MPLS VPN 和 EVPN 场景:
| Type 值 | 名称 | 用途 |
|---|---|---|
| 0x0000 | Opaque | 不透明标记 |
| 0x0002 | Route-Target (RT) | VPN 路由导入目标 |
| 0x0003 | Route-Distinguisher (RD) | VPN 路由唯一标识 |
| 0x0102 | IPv4 Address | 地址族相关 |
| 0x0201 | Ethernet Segment | EVPN 以太网段标识 |
四、实战配置/案例分析
4.1 场景一:基于 Community 的出口流量引导
需求:AS 100 有两条出口链路分别连接 ISP1 和 ISP2。要求来自 Customer A 的 VIP 业务流量优先从 ISP1 出口,其他流量从 ISP2 出口。

配置实现:
# === PE1(入口路由器)===
# 从 Customer A 接收路由时添加 Community 标签
ip prefix-list CUSTA-VIP permit 10.1.1.0 24
route-policy ADD-VIP-COMM permit node 10
if-match ip-address prefix-list CUSTA-VIP
apply community 100:VIP additive
route-policy ADD-VIP-COMM permit node 20
# 默认放行
bgp 100
peer 10.1.1.2 as-number 101
peer 10.1.1.2 route-policy ADD-VIP-COMM import
peer 192.168.1.2 as-number 100
peer 192.168.1.2 route-policy VIP-EXPORT export
# === PE1(出口路由器)===
# 根据 Community 设置 LOCAL_PREF,引导出口方向
ip community-filter basic VIP-COMM permit 100:VIP
route-policy VIP-EXPORT permit node 10
if-match community-filter VIP-COMM
apply local-preference 200
# VIP 路由 LOCAL_PREF = 200,从 PE1 优先出口
route-policy VIP-EXPORT permit node 20
apply local-preference 100
# 其他路由 LOCAL_PREF = 100,从 PE2 出口
4.2 场景二:防止路由泄露
需求:从 ISP1 学到的默认路由和聚合路由不应泄露给 ISP2,防止成为 transit。
# === 边界路由器 ===
# 从 ISP1 接收路由时标记 no-export
route-policy ISP1-IMPORT permit node 10
apply community no-export additive
bgp 100
peer 203.0.113.1 as-number 64501
peer 203.0.113.1 route-policy ISP1-IMPORT import
# 向 ISP2 发送路由时,携带 no-export 的路由不会被通告
# 华为设备默认行为:携带 no-export 的路由不发布给 eBGP 对等体
# 也可以通过策略显式过滤
ip community-filter basic NO-EXP permit no-export
route-policy ISP2-EXPORT deny node 10
if-match community-filter NO-EXP
route-policy ISP2-EXPORT permit node 20
# 放行其他路由
4.3 故障案例:Community 未生效排查
故障现象:在入口路由器上配置了 Community 标记,但出口路由器匹配不到该 Community。
排查步骤:
# 步骤1:确认 Community 是否已添加到路由
display bgp routing-table community 100:VIP
# 如果无输出,说明 Community 未成功添加
# 步骤2:检查 import 策略是否生效
display bgp peer 10.1.1.2 verbose
# 查看 route-policy 绑定状态
# 步骤3:检查 route-policy 匹配条件
display current-configuration configuration route-policy ADD-VIP-COMM
# 确认 if-match 条件与路由前缀匹配
# 步骤4:检查 Community 是否在传递过程中被清除
display bgp routing-table peer 192.168.1.2 received-routes community 100:VIP
# 在 RR 上查看是否收到了携带 Community 的路由
常见根因:
| 根因 | 表现 | 解决 |
|---|---|---|
未使用 additive |
原有 Community 被覆盖 | 添加 additive 关键字 |
| route-policy 未正确绑定 | 策略配置了但未应用到 peer | 检查 peer route-policy 配置 |
| RR 清除了 Community | RR 配置了 strip-community |
移除清除策略或改为选择性清除 |
| Community 格式不匹配 | 正则表达式编写错误 | 用 advanced 模式验证正则 |
| peer 类型为 Route-Reflector Client | RR 到 Client 的反射需确认 reflector 规则 | 验证 RR 反射配置 |
五、总结
| 维度 | Standard Community | Large Community | Extended Community |
|---|---|---|---|
| 长度 | 4 字节 | 12 字节 | 8 字节 |
| 格式 | ASN:Value | ASN:Data1:Data2 | Type:Value |
| 主要用途 | 通用路由标记 | 大规模标记 | MPLS VPN/EVPN |
| 匹配方式 | basic/advanced | large community-filter | vpn-target 等专用 |
| 推荐场景 | 常规路由控制 | 超大规模多租户 | VPN 路由隔离 |
Community 使用最佳实践:
1. 建立统一的 Community 编号规范,按业务类别或客户编号分配
2. 在入口打标签,在出口读标签,中间节点保持透传
3. 使用 additive 保留原有标记,避免意外覆盖
4. 对外发布的路由建议清除内部 Community,防止信息泄露
5. 定期审计 Community 策略,清理过期的标记规则
思考
- BGP Community 是可选过渡属性,如果路径中的某台路由器不支持 Community,这对整条路由链路上的 Community 策略执行有什么影响?
- 使用
apply community 100:100和apply community 100:100 additive的区别是什么?在生产环境中应该优先使用哪种方式? - no-export 和 no-advertise 的行为差异是什么?为什么大多数场景下使用 no-export 就足够了?
下篇预告:第92篇:BGP 优选路径调优案例