第91篇:BGP Community 属性与路由控制

关键词

BGP、Community、团体属性、路由策略、Well-known Community


一、什么是 Community 属性

Community(团体) 是一个可选传递属性,用于给 BGP 路由打上"标签"。一台路由器根据标签做出相应的路由策略决策。

核心思想:社区不是告诉路由器"怎么做",而是"我是谁"——收到路由的路由器根据 Community 值决定如何处理。


二、Community 的格式

Community 是一个 32 位的值,通常表示为 AA:NN 格式:

部分 含义 示例
AA AS 编号 100
NN 本地有意义的值 10, 20, 30
完整的 Community AA:NN 100:10

三、四种公认的 Well-known Community

Community 名称 含义
NO_EXPORT 0xFFFFFF01 不将路由通告给任何 EBGP 邻居
NO_ADVERTISE 0xFFFFFF02 不将路由通告给任何 BGP 邻居
NO_EXPORT_SUBCONFED 0xFFFFFF03 不将路由通告给联邦外的 EBGP 邻居
NO_PEER 0xFFFFFF04 不将路由通告给对等体

3.1 NO_EXPORT(不导出)

AS 100                AS 200                AS 300
  │                     │                     │
  │── eBGP ────────────│── eBGP ────────────│
  │  172.16.0.0/16     │                     │
  │  Community=NO_EXPORT│                     │
  │                     │                     │
  │  AS 200 收到:       │                     │
  │  Community = NO_EXPORT  → 不通告给 AS 300  │

3.2 NO_ADVERTISE(不通告)

收到 Community=NO_ADVERTISE 的路由后,不传给任何 BGP 邻居(eBGP 和 iBGP 都不传)。

3.3 配置示例

# 为特定路由设置 Community
route-policy SET_COMM permit node 10
 if-match ip-prefix SPECIAL
 apply community 100:100 no-export      # 设置 Community

bgp 100
 peer 10.0.12.2 route-policy SET_COMM export

四、Community 的配置与传递

4.1 使能 Community 传递

默认情况下,BGP Update 中不携带 Community 属性。需要显式配置:

bgp 100
 peer 10.0.12.2 advertise-community     # 使能向该邻居发送 Community

4.2 设置 Community

# 方式 1:在 route-policy 中设置
route-policy SET_COMM permit node 10
 apply community 100:100 100:200 100:300

# 方式 2:按邻居设置
bgp 100
 peer 10.0.12.2 route-policy SET_COMM export

4.3 删除 Community

# 清空 Community
route-policy CLEAR_COMM permit node 10
 apply community none

五、基于 Community 的策略控制

5.1 入方向策略

# AS 200 根据 Community 值设置 Local Preference
route-policy COMM_IN permit node 10
 if-match community 100:100
 apply local-preference 200

route-policy COMM_IN permit node 20
 if-match community 100:200
 apply local-preference 150

bgp 200
 peer 10.0.12.1 route-policy COMM_IN import

5.2 使用 community-filter

# 定义 Community 过滤器
ip community-filter 1 permit 100:100
ip community-filter 2 permit 100:200

route-policy COMM_FILTER permit node 10
 if-match community-filter 1
 apply local-preference 200

六、Community 在运营商网络中的应用

6.1 典型的运营商 Community 设计

运营商 A(AS 100)的 Community 规划:

  AS 内部控制:
    100:10  → 设置 Local Preference = 200(高优先级)
    100:20  → 设置 Local Preference = 150(中优先级)
    100:30  → 设置 Local Preference = 50(低优先级)

  地理标记:
    100:101 → 北京接入
    100:102 → 上海接入
    100:103 → 广州接入

  动作标记:
    100:999 → 不按地域最优(NO_EXPORT 的变体)

6.2 应用示例

# 客户路由从北京接入
route-policy CUSTOMER_BJ permit node 10
 apply community 100:101 100:10

# 上游 AS 根据 Community 调整优先级
route-policy UPSTREAM_IN permit node 10
 if-match community 100:10
 apply local-preference 200

七、查看 Community

# 查看路由的 Community
display bgp routing-table 172.16.0.0

  Network: 172.16.0.0/16
  Community: 100:100 100:200

# 按 Community 筛选
display bgp routing-table community 100:100

# 查看已配置的 Community
display bgp community

八、总结

知识点 核心要点
Community 本质 路由标签,可选传递属性
格式 AA:NN(AS 号:本地值)
Well-known Community NO_EXPORT / NO_ADVERTISE 等
控制方式 route-policy 匹配 Community 执行策略
应用场景 运营商网络中精细控制路由传播和选路
前提 必须配置 advertise-community

九、思考

  1. 四种 Well-known Community 分别有什么作用?
  2. 为什么需要配置 advertise-community 邻居才能传递 Community 属性?
  3. 如何在入方向策略中根据 Community 值修改 Local Preference?
  4. 在运营商网络中,Community 的典型应用场景有哪些?
  5. 什么是 Community Filter?它与 ACL 的原理有什么相似之处?

下篇预告:第92篇《BGP 优选路径调优案例》——通过实际案例掌握 BGP 选路调优。