set community 的三种行为
community 属性用于给路由打业务标签,供本端或对端后续策略匹配。在 route-map 中写 set community 时分三种情况:不加关键字会覆盖原有全部社区值;加 additive 表示保留原值并追加;用 set community none 表示清空全部社区。默认的覆盖行为在多运营商或二次分配场景里最容易被踩到。
基本信息
| 取值格式 | 常见为 AS:编号,16 位 AS 时编号 0-65535 |
|---|---|
| 默认行为 | 覆盖,原有社区值全部被替换 |
| 追加方式 | set community 65001:100 additive |
| 清空方式 | set community none |
| 发送前提 | 邻居需开启 send-community,否则属性不随更新发出 |
典型使用场景
- 给客户路由统一打标,本端后续按标签设置 LOCAL_PREF 实现分流
- 区分流量来源:为不同上游打不同社区编号,便于事后统计与故障定位
- 互联网出口控制:使用众所周知的社区值让上游按约定调整发布范围
- 多级运营商分工场景:保留上游已有标签,只追加自己的编号
- 割接标记:临时给新链路路由打上专用编号,验证完成后再撤销
覆盖与追加对照
覆盖与追加对照
# 覆盖写法:原有社区被清除,只保留本次设置的值
route-map RM-A permit 10
set community 65001:100
!
# 追加写法:保留上游社区,只额外打标
route-map RM-B permit 10
set community 65001:100 additive
!
# 清空写法:用于剥离上游标签
route-map RM-C permit 10
set community none
!
show ip bgp 10.100.0.0/16 | include Community常用社区语义
| 社区值 | 含义 | 使用注意 |
|---|---|---|
| 65535:65281 | NO_EXPORT,收到后不再向任何对端发布 | 常用于让路由止步于本 AS 边界 |
| 65535:65282 | NO_ADVERTISE,不向任何邻居通告 | 本地标记用途,避免意外外泄 |
| 65535:65283 | NO_EXPORT_SUBCONFED,联盟内不过期外发 | 联盟场景使用 |
| 65001:100 | 自定义业务编号 | 编码规则需要文档化,否则半年后无法解读 |
发送开关与删除已有社区
发送开关与删除已有社区
# 未开启发送开关时,本端能看到社区但对端收不到
router bgp 65001
neighbor 10.0.0.2 send-community
!
# 部分平台支持按列表删除匹配到的社区,使用前先确认命令支持情况
ip community-list standard CL-OLD permit 65001:100
route-map RM-D permit 10
set comm-list CL-OLD delete
!
show ip bgp 10.100.0.0/16二次分配场景中默认的覆盖行为会抹掉上游打好的标签,一旦上游依赖该标签做计费或选路,问题不会立即暴露,而是在结算或排障时才被发现。修改他人打过的社区前,先用 show ip bgp 记录原始值。