流量走向失控,问题多半出在“选路太老实”
BGP社区属性并非直接修改路由优先级,而是通过给路由“贴标签”的方式,配合本地路由策略,间接影响BGP路由优选流程,从而精准控制流量走向。这就好比你在高速路口给不同车辆发不同颜色的通行证,交警(路由器)会根据通行证颜色决定让车辆走哪条匝道,而不是直接改动道路的限速标准。
很多网络工程师在梳理跨地域、多出口的BGP网络时,经常遇到“明明配置了MED和Local Preference,流量还是不走我想要的路径”的尴尬局面,这背后的核心痛点在于:术语太抽象,配置逻辑与实际流量路径无法直观对应。
本文就用大白话拆解BGP社区属性与路由优选的关系,并给出可直接落地的过滤、操作路径和配置思路,帮你彻底搞懂如何让流量“听你的话”。
BGP社区属性到底是什么?别把它想得太玄乎
社区属性(Community Attribute)本质上是一个32位的标签值,格式上常写成AA:NN,比如100:80、64512:1,它不像Next Hop那样直接告诉路由器“下一跳去哪”,而是告诉路由器“这路由是啥身份”。
任何一个BGP路由器都能打标签
- 在入方向对收到的路由打标签,标识其来源或属性(如“来自北京联通”)。
- 在出方向对通告给邻居的路由打标签,让下游路由器知道如何对待这些路由。
- 路由器收到带标签的路由后,会根据预先定义的策略决定是否接受、是否修改、是否通告。
常见公网公认社区值
NO_EXPORT(0xFFFFFF01):告诉对端“这条路由别传给我的EBGP邻居”。NO_ADVERTISE(0xFFFFFF02):告诉对端“这条路由谁也别说,包括IBGP和EBGP”。LOCAL_AS(0xFFFFFF03):用于联盟场景。
操作要点:华为设备使用
route-policy配合if-match community-filter(匹配团体属性)和apply community(设置团体属性)实现标签的增删改查,思科设备则通过ip community-list和set community实现。
路由器选路的底层逻辑:BGP路由优选规则
BGP选路有十多条规则,但核心通勤路线就这几条,理解了这个顺序,才知道社区属性是怎么“插队”的。
BGP路由优选顺序(关键步骤)
- Preferred-Value(华为)/Weight(思科) :本设备本地生效,值越大越优先。
- Local Preference(本地优先级):AS内传播,值越大越优先,这是控制本AS出口流量最常用的利器。
- AS Path(AS路径):经过的AS数量越少越优先。
- Origin(起源类型):IGP > EGP > Incomplete。
-
MED(多出口鉴别器)
:值越小越优先,通常用于控制入方向流量。 - EBGP优于IBGP。
- IGP Metric:到达下一跳的IGP开销越小越优先。
社区属性在哪一步起作用?
社区属性不在上述直接比较的列表里,它是在选路发生之前,先通过route-policy或路由策略被“翻译”成了上述属性值。
你收到一条社区属性为100:200(代表“来自移动的出口流量”),在路由策略中映射为LP值150,这时候,这条路由在AS内部选路时,LP值比别人高,自然就赢了。
行业共识认为,BGP社区属性的最大价值在于“解耦”:上游设备只需要打标签,不需要关心下游具体怎么选路,下游设备看到标签后,根据自己的业务需求决定是抬高还是压低优先级。
如何用BGP社区属性配合路由优选实现流量走向控制的4个实操步骤
下面我们进入正题,以“双出口连接电信和联通,希望电信流量走电信出口,联通流量走联通出口”为实例场景。
场景描述
- R1(你的核心路由器)连接到ISP_A(电信)和ISP_B(联通)。
- 你从ISP_A学到大量电信网段路由,从ISP_B学到联通网段路由。
- 核心问题:部分路由(如双线IP段)两边都能学到,流量走向随机。
第1步:识别并标记入向流量来源
在R1上,针对从ISP_A和ISP_B两个邻居收到的路由,分别打上不同的社区标签。
- 从ISP_A收到的路由,打上
64512:100(代表电信来源)。 - 从ISP_B收到的路由,打上
64512:200(代表联通来源)。
配置思路(以华为为例):
route-policy FROM_CT permit node 10 // 针对电信邻居
apply community 100:100
route-policy FROM_CU permit node 10 // 针对联通邻居
apply community 100:200
然后在BGP视图下,为两个EBGP邻居分别调用route-policy。
第2步:在路由优选前“翻译”标签
定义一个新的路由策略,用来匹配这些社区标签,并修改LP值。
- 匹配
64512:100的路由,设置LP为200(表示“这是电信流量,优先走电信出口”)。 - 匹配
64512:200的路由,设置LP为150。
注意:这一步是核心,因为LP值仅在AS内部传递,对外部邻居无影响。
第3步:控制对外的通告(影响入方向流量)
社区标签也可以放在出方向,用来告诉邻居“你这条路由到了我这里能享受什么待遇”,比如你希望把某个网段的路由只通告给电信,不想让联通知道(避免联通用户跨网访问你的服务器)。
- 给这特定路由打上
NO_ADVERTISE或者自定义的64512:999。 - 在向联通邻居通告路由时,用
if-match community-filter匹配该标签,然后执行(拒绝通告)。filter-policy deny
实操要点:这招对于处理多线机房的流量调度极其好用,据行业数据,不少BGP机房利用这一特性来降低跨网结算费用。
第4步:基于标签的流量策略联动
除了控制路由优选,社区属性还能关联QoS标记和黑洞路由。
| 场景 | 动作 | 社区值方案 |
|---|---|---|
| 防止DDoS流量打满出口 | 将异常流量引入黑洞Next-Hop | 65535:666 |
| 限制视频流量带宽 | 结合MQC策略匹配社区打低优先级队列 | 64512:300 |
业内专家指出,将社区标签与PBR(策略路由)结合使用,是实现精细化流量控制的高阶玩法,但配置前务必理清QoS队列与BGP下一跳的联动关系,否则容易出环路。
BGP流量走向控制中,社区属性和路由优选怎么配合更顺滑?
这里需要具体说说“配合”的度,如果你只是想把两条出口线路做到“主备”,那直接用LP或MED就够了,但如果你想实现基于源地址的负载分担或者基于目的网段的差异化调度,社区属性就派上大用场了。
具体配合思路
- 先通过社区属性分类:把路由按“动静分离”(大流量下载服务vs关键交易系统)分类。
- 再通过路由优选落地:对关键业务系统的路由设置高LP值,让它们走质量更优的BGP出口;对其他业务设置低LP值,走性价比更高的出口。
一个防环的隐形规则
使用社区属性控制选路时,一定注意不要在向EBGP邻居发送路由时携带内部社区值,默认情况下,华为设备向EBGP邻居通告路由时会携带社区,但许多运营商路由器会过滤掉未知私有社区,你需要显式使用apply community none(华为)或set comm-list delete(思科)来清理,防止内部策略意外泄露给外部AS。
为什么你的BGP流量走向控制策略没生效?排查这四处
写了策略,流量纹丝不动,这是最常见的故障,对照以下清单排查,能省去大量抓包时间。
检查点1:社区属性传递开关
BGP默认不传递社区属性,你需要在BGP视图下启用传递开关:
- 华为:
peer x.x.x.x advertise-community - 思科:
neighbor x.x.x.x send-community - 如果没敲这条命令,下游路由器的路由表里是看不到任何社区标签的,“翻译”过程自然无从谈起。
检查点2:匹配顺序与精确性
- 团体过滤器(community-filter)在华为中默认是匹配部分(permit)逻辑,建议使用
exact-match(精确匹配)避免误伤。 - 配置了
if-match community-filter,但路由策略调用的顺序错误(策略名写错或节点号冲突),会导致策略不生效。
检查点3:路由收敛与反射器
- 在IBGP环境中,如果使用了路由反射器(RR),RR会反射路由但不修改下一跳,社区属性在反射时通常会被保留,但如果RR上配置了
apply community或者修改策略,就会导致属性丢失,检查RR上的peer配置是否开启advertise-community。
检查点4:LP默认值差异
- 华为设备默认LP为100,思科默认为100,但有些老设备或特殊配置(如通过
default local-preference修改过)会导致基准线不一致,如果你在策略里把LP改为120,另一台设备默认就是200,你这个策略就“白设”了,建议在对比前先查看display bgp routing-table里的实际LP值。
BGP社区属性与选路控制的常见疑问解答
设置BGP MED值时,社区属性能帮上什么忙?
MED值只影响对端AS选路(控制入方向流量),社区属性的作用是在你向对方通告路由之前,先给路由打个草稿,让对方路由器根据草稿决定是否修改MED,比如你给不同地理位置的路由打上不同社区,下游运营商可以据此自动设置MED大小,让用户就近接入你的机房,避免跨地域绕路。
多出口场景下,BGP路由优选怎么选才能做到出口冗余?
如果希望做到“专线为主,公网为备”,核心操作不是靠社区属性,而是调整LP值,让备份链路的LP值降到50,同时配合AS Path属性,但社区属性可以用于精准匹配需要走备份链路的特定路由段,防止主链路因链路拥塞导致VoIP语音质量下降而大规模切换,实现基于业务的精细化冗余。
使用BGP社区属性控制路由走向,会不会增加路由器CPU负载?
会,但影响有限,主要开销集中在路由策略匹配的表项查询上,如果你使用大正则表达式去匹配community-list(如在华为ip community-filter里用正则),需谨慎,这比精确匹配耗费更多CPU资源,建议优先使用精确数值或网段匹配,对于长列表的过滤操作,考虑在边界设备上先做汇总,降低策略复杂度。
写在最后
BGP社区属性就像网络世界的“便利贴”,它本身不改变任何选路数值,但能让你在复杂的多出口场景中游刃有余。把标签打好、把策略翻译准、把传递开关打开,流量走向控制就成功了一大半。路由优选看的是最终计算出的数值(LP、MED等),社区属性只是你计算这些数值时用到的“输入变量”。 下次再遇到流量走向问题,不妨先别急着背选路规则口诀,看看你的路由标签乱没乱。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/643255.html





