路由优选和BGP社区属性不是两套各管各的机制:社区属性负责在AS边界打标签、把选路意图传出去,路由优选策略负责在本机按标签执行动作,协同的关键是把选路意图前移到邻居入口,用community-filter匹配后统一改Local Preference或MED。 只配一边,另一边就是空转。
BGP社区属性怎么配置才能实现路由优选
先把两者的分工说清楚,社区属性(Community)是BGP的可选传递属性,本身不参与选路,它的价值在于”携带意图”,路由优选策略(route-policy、filter-list、weight、Local Preference这些)才真正决定报文往哪走,社区属性是信封,优选策略是拆信的人。
社区属性的三种常见落地用法
- 标记来源:给不同上游运营商打不同标签,例如电信出口打
65001:100、联通出口打65001:200,后续策略按标签分流。 - 标记业务等级:给VIP客户前缀打高优先级标签,普通前缀打默认标签,出口侧按标签抬Local Preference。
- 标记黑洞或清洗:给需要丢弃的前缀打
65001:999,入口处匹配后直接apply community no-export或指向null0,比逐条ACL维护成本低得多。
配置动作分两端,别只做一半
发送端要显式开启社区传递,华为VRP下的典型写法:
route-policy SET-COMM permit node 10
apply community 65001:100
peer 203.0.113.1 route-policy SET-COMM export
peer 203.0.113.1 advertise-community
advertise-community这一步很多人会漏,社区属性默认不向EBGP邻居传递,不开这个开关,对端收到的前缀干干净净,后面所有匹配全部失效。
接收端做匹配和动作:
ip community-filter 1 permit 65001:100
route-policy PREF-IN permit node 10
if-match community-filter 1
apply local-preference 200
route-policy PREF-IN permit node 20
peer 203.0.113.1 route-policy PREF-IN import
注意末尾那条空的permit节点,没有它,未命中社区的前缀会被隐式拒绝,业务直接断。
BGP Community与Local Preference优先级对比
这两个东西经常被混着用,实际作用层级完全不同,Local Preference是本AS内部属性,不会传出AS,数值越大越优先;Community是传递载体,跨AS也能带过去,但需要两端约定语义。行业共识认为,社区属性解决”意图怎么传”,Local Preference解决”本机怎么选”,二者是接力关系,不是替代关系。
回顾一下选路顺序
BGP选路大致按Weight、Local Preference、本地始发、AS-Path长度、Origin、MED、EBGP优于IBGP、IGP度量、Router ID顺序往下比,社区属性不在这条链条上,它是给前面这些属性赋值的触发器。
什么时候用哪个
| 属性 | 作用范围 | 默认值 | 是否跨AS传递 | 典型场景 |
|---|---|---|---|---|
| Local Preference | 本AS内 | 100 | 不传出 | 统一本域出口偏好 |
| MED | 相邻AS间 | 0 | 可传EBGP | 影响对端入向选路 |
| Community | 任意 | 无 | 需显式开启 | 打标签传递选路意图 |
| AS-Path | 全局 | 无 | 传递 | 长度影响选路,可做预置 |
一个实用判断:如果意图只在自家网络里生效,直接改Local Preference,别绕社区;如果意图要跨运营商或跨合作方传递,才用社区属性,因为对端不可能让你直接改它的Local Preference。
协同的典型组合
上游给你发来带65001:200的前缀,你本地匹配后把Local Preference从100抬到200,同时把65001:200剥掉再往下游传,用apply community none或重新apply community覆盖,这样标签只在需要的位置生效,不会污染下游策略。
多出口场景下BGP路由优选协同配置实战
假设一家企业有三个出口:电信、联通、BGP互联,目标是让访问电信资源的前缀走电信出口,且出口故障时自动切到备用。
拓扑与策略设计
- 电信邻居发来的前缀打
65001:100,本地匹配后Local Preference设200。 - 联通邻居发来的前缀打
65001:200,Local Preference设150。 - 默认路由兜底,Local Preference设100。
配置路径在BGP视图下逐个邻居挂route-policy import,配合ip community-filter做匹配,再用display bgp routing-table <前缀>验证优选结果,看LocPrf列是否按预期变化。
几个容易踩的坑
- 社区值别用私有AS号范围之外的数字,
0-65535里前段部分有保留,建议统一用私有AS段64512-65534做前缀。 apply community默认是覆盖,要追加得写additive,否则前面打的标签全被冲掉。- 策略改完记得
reset bgp对应邻居或refresh bgp,软重置无效时再硬重置,别一上来就全表重置。
北京双线机房BGP社区属性配置方案
地域差异主要来自运营商互联质量和机房出口结构,北京地区双线机房常见电信加联通双出口,部分还带移动或教育网,据工信部公开的互联互通监测情况,跨网访问质量波动主要集中在晚高峰时段,因此社区属性除了标来源,常被用来标时段权重。
落地建议
- 与上游运营商协商社区语义,把”备份””主用””仅国内”这类意图写成文档,双方按同一份约定配置,比口头沟通可靠。
- 机房内部用iBGP全互联或RR反射,社区属性在iBGP内默认传递,不需要额外开启,但跨EBGP出去时必须确认
advertise-community。 - 双线出口做Local Preference差异化时,建议主备差距拉到50以上,避免IGP度量抖动导致来回切换。
BGP路由优选策略部署成本大概多少
自建一套完整的社区属性加优选策略体系,成本主要在人力而非设备,设备侧,中端路由器跑几百条community-filter和route-policy毫无压力,真正的开销是策略设计、文档维护和变更评审,多数情况下,一个中等规模网络需要一到两名熟悉BGP的工程师投入数周做梳理和灰度,采购第三方BGP社区服务或托管路由策略的报价差异很大,按前缀数量和出口数量计费,年费从几千到数万元不等,具体要看服务商是否提供社区语义协商和7×24变更支持,折算下来,自建适合出口稳定、变更少的场景,托管适合多线频繁调整的场景。
路由优选与BGP社区属性的协同,本质是把”选路意图”和”选路执行”拆到两个位置,各自做擅长的事,社区属性管传递,优选策略管执行,两端配置缺一不可,验证以display bgp routing-table的LocPrf和Community列为准。
BGP社区属性与路由优选常见问题解答
社区属性配了但选路没变化,先查什么
先查对端是否真的发来了社区属性,用display bgp routing-table <前缀> verbose看Community字段是否为空;再看本机route-policy的匹配节点是否命中,末尾是否有兜底permit;最后确认import方向挂的policy名字没写错,BGP视图下是peer x.x.x.x route-policy xxx import,方向写反不报错但完全不生效。
社区属性和MED同时用会不会冲突
不会冲突,作用层级不同,MED影响的是对端AS如何选你,Local Preference影响的是你如何选出口,社区只是标签,冲突通常出现在同一前缀既有MED比较又有Local Preference比较时,按选路顺序Local Preference先于MED生效,所以本端出口偏好以Local Preference为准,MED真正生效的场景是对端在多个互联点之间做选择。
私有AS号打的社区能不能传给公网邻居
可以传,社区属性本身不校验AS号范围,公网邻居收到64512:100这类值不会丢弃,只是语义由双方约定,真正的限制在于部分运营商会在边界过滤非约定范围的社区值,配置前需要和上游确认放行策略,否则标签在中间被剥掉,本端匹配自然落空。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/792379.html


