BGP社区属性的核心作用是给路由打上可传递的标签,配合路由策略在邻居入口或出口匹配这些标签,就能精确控制哪些路由通告给哪个邻居、哪条路由优先。
BGP community属性怎么控制路由通告?先看3个典型场景
BGP community是一种可选传递属性,数值范围从0到4294967295,它本身不会改变路由的下一跳或AS路径,只是给路由贴上一个标记,控制路由通告的关键,就是在出口或入口路由策略里用if-match community匹配这个标记,再决定放行还是拒绝。
多线机房只想把联通路由通告给联通邻居
假设你的BGP路由器同时接了电信和联通两个上游,你从联通邻居学到一批路由,希望这些联通路由只回传给联通邻居,不发给电信邻居,避免电信线路承载联通的回程流量。
操作思路如下:
- 在从联通邻居收路由时,入口策略给这些路由打上
community 65001:100。 - 给联通邻居发路由时,出口策略只允许携带
65001:100的路由。 - 给电信邻居发路由时,出口策略拒绝携带
65001:100的路由。
华为VRP平台的核心配置命令:
ip community-filter basic UNICOM permit 65001:100
route-policy FROM-UNICOM permit node 10
apply community 65001:100
route-policy TO-UNICOM permit node 10
if-match community-filter UNICOM
route-policy TO-UNICOM deny node 20
route-policy TO-TELECOM deny node 10
if-match community-filter UNICOM
route-policy TO-TELECOM permit node 20
在BGP进程里分别应用这些策略到对应邻居的import和export方向即可。
对等体之间过滤特定前缀
上游运营商有时会给部分路由打上标准community值,比如no-export,这个标记的意思是“收到这条路由后,不要再通告给其他AS”,如果你和多个AS互联,上游设备发来的路由带有no-export,你的路由器在向其他AS通告时会自动过滤这些前缀。
你可以在自己的出口策略里显式匹配标准community值:
ip community-filter basic NO-EXPORT permit no-export route-policy TO-PEER deny node 10 if-match community-filter NO-EXPORT route-policy TO-PEER permit node 20
这样即使收到的路由没有正确携带no-export,你也能在出口方向主动拦截。
防止路由回灌
当你把路由通告给下游客户后,下游可能因为配置错误或恶意行为,把同一条路由又通告回来,如果这条路由带有你之前打上的community标签,就可以在入口策略里识别并丢弃。
具体做法是:给所有发给下游客户的路由打上community 65001:999,在从下游客户收路由时,入口策略拒绝任何携带65001:999的路由,这样就能有效避免路由环路和回灌。
BGP community和本地优先级对比:谁更适合做优选?
很多刚接触BGP的工程师会问:BGP community和本地优先级对比哪个更重要? 答案不是二选一,而是两者作用层级不同,经常联动使用。
两者的作用层级
- BGP community是标签,本身不参与路由优选。
- 本地优先级是公认必遵属性,直接参与BGP选路,值越大越优先,但只在AS内部有效。
- community可以跨AS传递,本地优先级不能跨AS传递。
行业共识认为,community更适合做路由分类和跨域协作,本地优先级更适合做AS内部的出口优选,把两者结合起来,才能同时控制“路由发给谁”和“流量走哪条路”。
操作路径对比
| 维度 | BGP community | 本地优先级 |
|---|---|---|
| 作用对象 | 路由标签 | 路由属性 |
| 是否参与选路 | 不参与 | 直接参与 |
| 传递范围 | 可跨AS传递 | 仅AS内有效 |
| 配置方式 | 打标签+匹配策略 | 直接修改数值 |
| 典型场景 | 控制通告范围、防环、跨域协作 | AS内多出口优选 |
多数情况下,你不需要在community和本地优先级之间做取舍,正确做法是先用community给路由分类,再在入口策略里匹配community修改本地优先级,这样既能保持分类清晰,又能精确控制选路。
多线机房BGP出口用community优选联通路由的实操路径
以北京多线机房为例,一条BGP线路同时接入电信、联通、移动三家运营商,默认情况下,所有出站流量可能都走电信出口,但访问联通资源时,走联通出口延迟更低、速度更快,这时就可以用community配合本地优先级实现优选。
第一步:给联通路由打标签
从联通邻居收路由时,入口策略匹配联通邻居的AS号或前缀列表,给这些路由打上community 65001:200。
ip community-filter basic UNICOM permit 65001:200
route-policy FROM-UNICOM permit node 10
apply community 65001:200
在BGP进程里对联通邻居应用route-policy FROM-UNICOM import。
第二步:防止联通路由发给电信邻居
出口给电信邻居发路由时,拒绝携带65001:200的路由,避免电信线路收到联通路由后产生绕行。
route-policy TO-TELECOM deny node 10
if-match community-filter UNICOM
route-policy TO-TELECOM permit node 20
第三步:本地提高联通路由优先级
在本路由器上,匹配65001:200的路由,将本地优先级从默认的100调高到150,这样访问联通地址时,优选联通出口。
route-policy SET-LOCAL-PREF permit node 10
if-match community-filter UNICOM
apply local-preference 150
在BGP进程里对全局或对等体应用route-policy SET-LOCAL-PREF import,完成这三步后,联通流量走联通出口,电信流量走电信出口,互不干扰。
国内运营商BGP community值怎么用?地域场景经验
国内不同运营商对community的使用习惯并不统一,电信、联通、移动各自可能有一套内部标记值,比如用AS号开头加自定义数字,但具体数值多数情况下需要向上游运营商索取路由策略文档才能确认。
常见约定
- 部分运营商使用
no-export、no-advertise等标准值。 - 部分运营商在公告中声明用
4134:xxx表示电信路由,4837:xxx表示联通路由,9808:xxx表示移动路由。 - 多数情况下,这些community值仅在上游AS内部有意义,传递到你这里后需要转换为本地community再使用。
地域场景建议
北京、上海、广州等地的多线BGP机房,通常建议自己定义一套本地community,不要直接依赖运营商的原始标记,因为不同省份、不同合同可能有差异,自定义规则可以是:
65001:100表示联通路由65001:200表示电信路由65001:300表示移动路由65001:999表示防回灌标记
这套规则只在你自己的AS内部生效,不会和运营商冲突,也方便后续维护。
配置排错核心检查点
community属性配置后不生效,往往不是命令写错,而是方向或传递出了问题,按下面顺序逐项检查:
- 确认community-filter匹配方向:是
permit还是deny,是否匹配了正确的标准值或扩展值。 - 确认route-policy是否同时绑定在正确的邻居和正确的方向:
import控制收路由,export控制发路由。 - 确认邻居是否允许发送community属性,部分厂商默认不向EBGP邻居发送community,需要显式开启
peer x.x.x.x advertise-community。 - 使用
display bgp routing-table community查看路由是否携带了预期标签。 - 使用
display bgp peer x.x.x.x verbose查看策略应用状态。
常见问题:BGP community属性怎么控制路由通告?
BGP community属性怎么控制路由通告?
通过在入口或出口路由策略中使用if-match community匹配标签,再决定permit或deny路由,实现对特定邻居的通告过滤,标签本身不改变路由,但策略匹配后可以精确控制放行范围。
BGP community和本地优先级对比哪个更重要?
两者作用层级不同,community用于分类和跨域协作,本地优先级用于AS内选路,实际网络中通常先用community打标签,再匹配标签修改本地优先级,两者联动使用。
多线机房BGP出口如何用community优选联通路由?
给联通路由打上本地community标签,出口拒绝该标签路由发给电信邻居,同时在本地调高匹配该标签路由的本地优先级,这样联通流量走联通出口,电信流量走电信出口,出站路径不再混跑。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/643459.html





