关键词:BGP、团体属性、运营商网络、流量工程、Multi-Exit、路由策略、Community 编号
第97篇:BGP 团体属性在运营商网络中的应用
一、引言
在第91篇中,我们学习了 BGP Community 的基本概念和配置方法。Community 在小型网络中已经展现出了强大的路由控制能力,但在运营商网络中,它的应用规模和技术深度远远超出基础用法。
运营商网络通常包含数千台路由器、数十个 AS、百万条路由。在这样的规模下,传统的路由策略管理方式(在每台路由器上分别配置策略)变得不可行。Community 提供了一种"集中标记、分布式执行"的策略管理模式,是运营商实现大规模路由控制的核心技术。
二、核心概念
2.1 运营商网络拓扑特征
运营商网络的典型架构包含多个层次和多种角色:
| 层级 | 设备角色 | 数量级 | 主要 BGP 对等关系 |
|---|---|---|---|
| 核心层 | Core Router | 数十台 | iBGP 全互联/RR |
| 汇聚层 | Aggregation Router | 数百台 | iBGP 到核心 |
| 接入层 | Access Router | 数千台 | iBGP 到汇聚 |
| 边界层 | PE/ASBR | 数百台 | eBGP 到外部 AS |
2.2 Community 编号规划
在运营商网络中,Community 编号需要统一规划以避免冲突:

| Community 范围 | 用途 | 示例 |
|---|---|---|
| ASN:1-99 | 全局策略标记 | 100:1 = 高优先级业务 |
| ASN:100-999 | 业务分类标记 | 100:100 = VoIP 业务 |
| ASN:1000-1999 | 客户标记 | 100:1001 = 客户A |
| ASN:2000-2999 | 出口引导标记 | 100:2001 = 从出口1离开 |
| ASN:3000-3999 | 内部策略标记 | 100:3001 = 禁止出 AS |
2.3 运营商 Community 应用场景
| 场景 | 说明 | Community 使用方式 |
|---|---|---|
| 流量工程 | 引导特定流量从指定出口离开 | 入口标记 → 出口策略匹配 |
| 客户路由隔离 | 不同客户的路由分别处理 | 每个客户独立 Community |
| 防路由泄露 | 防止上游路由泄露给对等体 | no-export 标记 |
| 负载分担 | 均衡多个出口的流量 | 按 Community 分配不同 LOCAL_PREF |
| 业务优先级 | VIP 业务优先路由 | VIP 标记 → 高 LOCAL_PREF |
三、技术细节
3.1 流量工程:出口引导
场景:运营商 AS 100 有 4 个边界出口连接到不同的上游 ISP,需要根据业务类型和客户引导流量从最优出口离开。
# === Community 编号规范 ===
# 100:100 = VoIP 业务 → 出口 ISP1(低延迟)
# 100:200 = 视频流媒体 → 出口 ISP2(大带宽)
# 100:300 = 普通互联网 → 出口 ISP3(低成本)
# 100:400 = VIP 客户 → 出口 ISP1(高优先级)
# === 入口路由器:打标签 ===
# 根据客户前缀添加 Community
ip prefix-list VOIP-CUSTOMER seq 10 permit 10.1.0.0 16
ip prefix-list VIDEO-CUSTOMER seq 10 permit 10.2.0.0 16
ip prefix-list VIP-CUSTOMER seq 10 permit 10.3.0.0 16
route-policy TAG-TRAFFIC permit node 10
if-match ip-address prefix-list VOIP-CUSTOMER
apply community 100:100 additive
route-policy TAG-TRAFFIC permit node 20
if-match ip-address prefix-list VIDEO-CUSTOMER
apply community 100:200 additive
route-policy TAG-TRAFFIC permit node 30
if-match ip-address prefix-list VIP-CUSTOMER
apply community 100:400 additive
route-policy TAG-TRAFFIC permit node 40
apply community 100:300 additive
# 默认:普通互联网
# 应用于所有入口对等体
bgp 100
peer 10.1.1.1 route-policy TAG-TRAFFIC import
peer 10.1.2.1 route-policy TAG-TRAFFIC import
peer 10.1.3.1 route-policy TAG-TRAFFIC import
# === 出口路由器:读标签执行策略 ===
ip community-filter basic VOIP-COMM permit 100:100
ip community-filter basic VIDEO-COMM permit 100:200
ip community-filter basic VIP-COMM permit 100:400
# 出口 ISP1(VoIP + VIP)
route-policy ISP1-EXPORT permit node 10
if-match community-filter VIP-COMM
apply local-preference 200
route-policy ISP1-EXPORT permit node 20
if-match community-filter VOIP-COMM
apply local-preference 150
route-policy ISP1-EXPORT permit node 30
apply local-preference 50
# 出口 ISP2(视频流媒体)
route-policy ISP2-EXPORT permit node 10
if-match community-filter VIDEO-COMM
apply local-preference 200
route-policy ISP2-EXPORT permit node 20
apply local-preference 100
# 出口 ISP3(普通互联网)
route-policy ISP3-EXPORT permit node 10
if-match community-filter VIP-COMM
apply local-preference 50
route-policy ISP3-EXPORT permit node 20
apply local-preference 150
3.2 多出口客户路由控制
场景:一个大型企业客户通过多个运营商接入互联网,运营商需要确保该客户的流量从最优路径转发。
# === 客户 A 通过 PE1 接入 ===
bgp 100
peer 10.10.0.1 as-number 65001
peer 10.10.0.1 route-policy CUST-A-TAG import
route-policy CUST-A-TAG permit node 10
apply community 100:1001 additive
# 所有从客户 A 学到的路由标记 100:1001
# === RR 传递标记 ===
# RR 不做处理,透传 Community
# === 所有出口 PE ===
# 匹配客户 A 的 Community,设置高 LOCAL_PREF
route-policy CUST-A-EXPORT permit node 10
if-match community-filter CUST-A
apply local-preference 200
# 客户 A 的流量从本地 PE 优先出口
ip community-filter basic CUST-A permit 100:1001
3.3 基于 Community 的负载分担
场景:运营商有两个同等级的出口,希望将流量平均分配到两个出口。
# === 入口路由器:按哈希标记 ===
# 使用高级 Community 过滤器实现奇偶分配
route-policy LOAD-BALANCE permit node 10
if-match ip-address prefix-list EVEN-PREFIX
apply community 100:LB1 additive
route-policy LOAD-BALANCE permit node 20
if-match ip-address prefix-list ODD-PREFIX
apply community 100:LB2 additive
# === 出口路由器1:匹配 LB1 ===
route-policy EXIT1 permit node 10
if-match community-filter LB1-COMM
apply local-preference 200
route-policy EXIT1 permit node 20
apply local-preference 100
ip community-filter basic LB1-COMM permit 100:LB1
# === 出口路由器2:匹配 LB2 ===
route-policy EXIT2 permit node 10
if-match community-filter LB2-COMM
apply local-preference 200
route-policy EXIT2 permit node 20
apply local-preference 100
ip community-filter basic LB2-COMM permit 100:LB2
3.4 跨区域路由策略

四、实战配置/案例分析
4.1 完整运营商路由策略部署
网络拓扑:AS 100 拥有 2 台 RR、4 台边界 PE 和若干接入 PE。
# === RR 配置 ===
bgp 100
router-id 10.255.0.1
rr-client-list 10.255.0.2 10.255.0.3 10.255.0.4
# RR 不修改 Community,仅反射
# === 接入 PE 统一打标签 ===
route-policy ACCESS-TAG permit node 10
if-match ip-address prefix-list VOIP-NET
apply community 100:100 additive
route-policy ACCESS-TAG permit node 20
if-match ip-address prefix-list VIDEO-NET
apply community 100:200 additive
route-policy ACCESS-TAG permit node 30
if-match ip-address prefix-list VIP-NET
apply community 100:400 additive
route-policy ACCESS-TAG permit node 40
apply community 100:300 additive
# === 边界 PE1(出口 ISP1)===
route-policy PE1-IMPORT permit node 10
if-match community-filter VOIP-COMM
apply local-preference 200
route-policy PE1-IMPORT permit node 20
if-match community-filter VIP-COMM
apply local-preference 200
route-policy PE1-IMPORT permit node 30
apply local-preference 100
# === 边界 PE2(出口 ISP2)===
route-policy PE2-IMPORT permit node 10
if-match community-filter VIDEO-COMM
apply local-preference 200
route-policy PE2-IMPORT permit node 20
apply local-preference 100
# === 对外发布时清除内部 Community ===
route-policy OUTBOUND-CLEAN permit node 10
apply community none
# 向外部 AS 发送路由前,清除所有内部 Community
# 防止内部策略信息泄露
bgp 100
peer 203.0.113.1 as-number 64501
peer 203.0.113.1 route-policy OUTBOUND-CLEAN export
4.2 故障案例:Community 策略冲突
故障现象:修改出口策略后,VIP 客户的流量不再从优选出口发出。
排查:
# 步骤1:确认路由携带的 Community
display bgp routing-table community 100:400
# 确认 VIP 路由确实携带 100:400 Community
# 步骤2:检查出口策略匹配
display bgp routing-table peer 203.0.113.1 advertised-routes
# 查看向 ISP1 发送的路由属性
# 步骤3:检查策略顺序
display current-configuration configuration route-policy PE1-IMPORT
# 发现 node 10 的匹配条件被修改了
# 根因:route-policy 节点顺序错误
# 新的 deny 节点在 Community 匹配节点之前,导致 VIP 路由被拒绝
# 修复:调整策略节点顺序
route-policy PE1-IMPORT permit node 5
if-match community-filter VIP-COMM
apply local-preference 200
route-policy PE1-IMPORT deny node 10
if-match ip-address prefix-list BLOCKED-NET
route-policy PE1-IMPORT permit node 20
五、总结
| 应用维度 | 传统方式 | Community 方式 |
|---|---|---|
| 策略部署 | 逐台配置 | 入口标记 + 出口策略 |
| 策略变更 | 逐台修改 | 仅修改出口策略 |
| 策略审计 | 分散在各设备 | 集中审计 Community 策略 |
| 排障效率 | 低(需逐台检查) | 高(跟踪 Community 传递路径) |
| 扩展性 | 差(设备多时不可行) | 好(新增出口只需配置匹配策略) |
运营商 Community 部署最佳实践: 1. 建立统一的 Community 编号规范文档 2. 按业务/客户/出口维度分配编号范围 3. 入口打标签、中间透传、出口读标签,职责分离 4. 对外发布前清除内部 Community 5. 定期审计 Community 策略的完整性和一致性 6. 使用社区过滤器批量管理同一类的 Community
思考
- 在运营商网络中,为什么"入口标记 + 出口策略"的 Community 模式比"逐台配置策略"更优?
- 对外发布路由时为什么要清除内部 Community?如果不清除会有什么风险?
- 如果一个运营商有 100 个出口 PE 和 10000 个客户,Community 编号空间是否足够?如何规划?
下篇预告:第98篇:BGP 大规模网络设计:AS 规划与 RR 层级