关键词: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 传递规则

Community 传递规则 - 图示

关键规则: 1. 默认情况下,接收到的 Community 会透传给所有对等体 2. 可以使用 strip-community 命令清除 Community 3. 使用 additive 关键字可在保留原有 Community 的基础上追加新 Community 4. Confederation 场景下,Confed_members 属性在子 AS 边界被丢弃

三、技术细节

3.1 Community 配置完整流程

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 出口。

场景一:基于 Community 的出口流量引导 - 图示

配置实现:

# === 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 策略,清理过期的标记规则

思考

  1. BGP Community 是可选过渡属性,如果路径中的某台路由器不支持 Community,这对整条路由链路上的 Community 策略执行有什么影响?
  2. 使用 apply community 100:100 和 apply community 100:100 additive 的区别是什么?在生产环境中应该优先使用哪种方式?
  3. no-export 和 no-advertise 的行为差异是什么?为什么大多数场景下使用 no-export 就足够了?

下篇预告:第92篇:BGP 优选路径调优案例