BGP社区属性是一种灵活的路由标记机制,它通过给路由前缀打上自定义标签,让路由器在收到路由后基于标签执行本地策略,从而在不改变路由自身属性的前提下精准控制路由的发布范围、选路优先级和流量调度行为,是所有跨域BGP网络中路由优选和策略编排的核心工具。
BGP社区属性是什么,凭什么能干预路由器选路
社区属性(Community Attribute)是一个可变长可选传递属性,编号范围是0到4294967295,通常写作两个16位十进制数的组合,比如100:100,前半段是AS号,后半段是管理员自定义的标记值,路由器把这条路由连同社区号一起发给邻居,邻居看到社区号后就能知道“这条路由是什么身份、允许发给谁、优先级多高”。
公认社区号和私有社区号的区别
社区号分为公认社区(Well-known Community)和私有社区(Private Community)两类,公认社区由IANA定义,全球通用,
- NO_EXPORT(0xFFFFFF01):路由不传出AS边界,但可以在联盟内部传递
- NO_ADVERTISE(0xFFFFFF02):路由不发给任何邻居,彻底止步
- NO_EXPORT_SUBCONFED(0xFFFFFF03):路由不传出AS,也不传给联盟子AS
- NOPEER(0xFFFFFF04):路由不发给对等体
私有社区号由AS管理员自行定义,例如AS100的网络管理员可以让上游AS把携带100:80标记的路由优先于100:90的路由,这些编号在本地网络内有意义,出了自治域就失去含义。
社区属性在路由优选中的真实角色
社区属性并不直接参与BGP选路规则的十步比较流程,它不属于AS-Path、MED、Local Preference那样的直接竞争项,它的价值在于“间接控制”。
在实际场景中,社区属性最常见的用法是搭配路由策略与Local Preference联动,出口路由器收到带特定社区号的路由后,通过route-policy或route-map将这些路由的Local Preference调高或调低,从而改变它们在BGP选路流程中的排名,行业共识认为,这种“先打标、后调优”的方式比逐条写前缀列表更易维护,也是多数大型IP网络采用的标准做法。
BGP社区和MED选路优先级对比,究竟谁说了算
很多刚接触BGP的工程师会困惑:社区属性和MED都是可选属性,都能干扰选路,那冲突时听谁的?
关键区别在于作用域,MED只影响同一AS的相邻邻居对多条路径的判断,而且只有当路径的第一跳AS相同时才会比较MED,社区属性则没有这个限制,它可以通过上游路由器把不同AS来源的路由统一映射成不同的Local Preference,让选路决策发生在AS内部,而不是依赖邻居之间的MED协商。
从路由优选十步流程看社区属性的介入点
BGP选路顺序中,Local Preference排在第三步,MED排在第六步,社区属性通过修改Local Preference,实际上就把决策点提前了,运营商骨干网之间互联时,双方往往约定好社区映射规则:
- 携带community A:10的路由,本地优先级设为200,作为主用路径
- 携带community A:20的路由,本地优先级设为150,作为备用链路
- 未打标签的路由,维持默认优先级100
这个映射关系一旦建立,新增路由只需在源头打上正确的社区号,本端AS的所有路由器就会自动按预设规则选路,不需要反复修改前缀列表和策略。
BGP社区属性与AS-Path的配合使用场景
AS-Path是BGP选路中权重较高的比较项,但AS-Path的长度是客观事实,无法随意篡改,社区属性可以结合AS-Path过滤,在路由入向时先按社区号筛掉一部分非法路由,再对合法路由调整优先级,例如在IXP(互联网交换中心)场景中,管理员通常会在入向策略里禁用携带NO_EXPORT或BLACKHOLE社区的路由进入路由表,防止环路和黑洞误触发。
bgp community怎么配置,华为与思科核心命令拆解
不同厂商的社区配置语法差异较大,但核心逻辑一致:先定义社区列表,再写路由策略引用列表,最后在BGP邻居上应用策略,下面以华为和思科为例,给出可直接测试的配置思路。
华为设备:route-policy与community-filter的搭配
华为设备上配置社区属性,核心是ip community-filter和route-policy,假设AS100需要把来自客户AS200的路由打上社区号100:80,并设置Local Preference为200:
ip community-filter 10 permit 100:80
route-policy IMPORT_POLICY permit node 10
if-match community-filter 10
apply local-preference 200
route-policy IMPORT_POLICY permit node 20
bgp 100
peer 192.0.2.1 as-number 200
peer 192.0.2.1 route-policy IMPORT_POLICY import
配置完成后用display bgp routing-table community或display bgp community验证社区标签是否注入,若需删除社区号,华为在route-policy里使用apply community delete命令。
思科设备:community-list与route-map的组合使用
思科IOS和IOS XE上配置方式与此类似,但命名稍有不同,以给路由打上100:80社区并设置权重为例:
ip community-list 10 permit 100:80
route-map SET_COMMUNITY permit 10
match community 10
set local-preference 200
set community 100:80
router bgp 100
neighbor 192.0.2.1 route-map SET_COMMUNITY in
思科设备若要向邻居发送社区属性,还需在BGP配置中加上neighbor x.x.x.x send-community,默认情况下社区属性不会随路由通告出去,华为设备默认不做此限制,但建议在全局视图下使用peer x.x.x.x advertise-community显式开启,避免跨厂商对接时出现意料之外的丢标签问题。
跨厂商对接时的配置差异提醒
在思科和华为混合组网环境中,社区号格式兼容,但策略应用方向需格外注意,华为的route-policy区分import和export方向,思科的route-map同样区分in和out方向,两边必须匹配好:上游设备的export策略打标签,下游设备的import策略读标签并调优先级。
运营商BGP路由策略场景实战,社区属性如何落地
国内运营商和大型IDC场景中,社区属性被广泛用于跨域流量调度和黑洞路由发布,互联网出口路由器上,社区属性往往和QoS、黑洞牵引等功能绑定,运维效率远高于纯前缀列表方案。
中国电信与教育网场景中的社区约定
中国电信AS4134的CN2网络对特定社区号进行识别后,会对路由执行不同的QoS标记,以实现大带宽客户和普通客户在同等带宽价格下的差异化服务质量,教育网CERNET的互联出口也采用社区属性来区分国际流量和国内流量,实现不同方向的选路偏好,业内专家指出,不同运营商之间的社区号约定属于各自网络的内部策略,对接前需要向上游索要社区映射文档,不能直接套用其他网络的号码。
SDN和自动化网络中的社区属性新用法
在SDN控制器集中控制BGP的场景中,社区属性反而是自动化策略的最佳落脚点,控制器只需要在路由源端批量打上社区标签,下游路由器就能基于本地策略自动完成选路,不需要每一台设备都下发繁重的路由策略,大幅减少运维出错率。
社区属性配置后的三条验证路径
配置完成后,验证环节不能省,至少做三件事:
- 在邻居设备上查看收到的路由是否携带预期社区号:华为用display bgp routing-table community,思科用show bgp community
- 检查路由策略是否被正确匹配:华为用display route-policy,思科用show route-map
- 通过traceroute验证实际流量是否走了预期路径,因为路由表选路正确不代表数据面转发正常
社区属性路由优选的局限性和避坑指南
社区属性虽然灵活,但滥用会带来问题,社区号属于非强制属性,对端路由器可以选择忽略,跨AS传递时,上游AS可能修改或剥离社区号,导致下游策略失效,多个AS之间使用相同数字但语义不同的社区号时,可能引发路由优先级混乱。
互联网出口路由器的路由表中同时存在数十万条BGP路由,维护者必须制定清晰的社区号分配表,并把它纳入网络变更流程管理,避免“同一个号码两种含义”的尴尬局面。
BGP社区属性在路由优选中的应用方法有哪些坑
Q1:BGP社区属性为什么不直接参与BGP选路比较,而是靠调整Local Preference间接干预?
BGP选路算法规定了一组固定的比较顺序,社区属性不在这个列表里,但Local Preference在,通过社区号映射成Local Preference值,相当于把自定义策略插入选路流程的第三步,这种设计让社区属性的作用范围完全可控,策略变化时只需要修改映射关系,不需要动路由本身。
Q2:NO_EXPORT和NO_ADVERTISE社区在实际组网中选择哪个?
如果希望路由仅在当前AS内部传递,不跨域通告给任何外部邻居,使用NO_EXPORT是最常见选择,NO_ADVERTISE的约束更严格,路由连当前路由器之外的邻居都不通告,实际部署中,需要控制某个AS内的路由不外泄时用NO_EXPORT,需要单台设备上的路由完全静默时用NO_ADVERTISE。
Q3:社区属性配置完成后发现邻居路由表里没有社区号,常见原因是什么?
思科设备默认不向邻居通告社区属性,需要执行neighbor x.x.x.x send-community命令显式开启,华为设备部分版本和接口视图下同样存在类似开关,跨厂商对接时,先确认两端设备的community通告开关均已启用,再排查route-policy中是否在出方向误用了apply community none或类似清除命令。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/792518.html


