企业网络里BGP路由优选的核心是规则顺序,而社区属性则是让规则顺序真正可控的策略杠杆,把两者配合好,才能真正解决多线接入、跨地域互联中的“绕路”和“震荡”问题。
BGP路由优选参数怎么选:先把13条仲裁规则排好序
BGP不会像IGP那样只比“距离”,它是一套“先比钱、再比路、最后才比运气”的决策模型,行业共识认为,一台路由器收到两条相同前缀的路由时,会从上到下依次比对13条仲裁规则,命中即止。
权重(Weight)和本地优先级(Local Preference)的优先级辨析
企业网络里最常见的两个参数,就是思科私有的Weight和标准协议的Local-Pref。
- Weight(权重):优先级排第一,越大越优,它只在本地路由器上生效,不影响邻居,通常用来做“强制出口”策略。
- Local Preference(本地优先级):优先级排第二,越大越优,它通过AS内部传递,影响所有IBGP邻居,多出口场景下,控制“从哪个出口走”,基本都是靠它。
实操建议:在企业边界设备上,优先用Local-Pref做全局出口策略,用Weight做单台设备的特例修正,不要反过来用,否则排查问题时要看每台设备的本地配置,自找麻烦。
传统选路参数的重排逻辑
本地优先级判定之后,AS Path是下一个关键仲裁点。AS Path越短越优,这是BGP防环机制的底层逻辑,但要注意,这条规则在多运营商接入场景下会“骗人”。
- 比如运营商A通告一条路由,AS Path是“64500 4809”,运营商B通告同一条,AS Path是“64500 4809 4809”,看起来B更长更差,但可能B的链路质量远超A。
- 解决方案:使用
as-path prepend故意加长AS Path来降低优先级,或者用local-preference直接无视AS Path长度,行业实践中,大型企业多链接点普遍采用后者,因为更直观可控。
MED(多出口鉴别器)排在AS Path之后,主要用于向对端运营商“暗示”接入带宽大小。MED值越小越优,但只在相邻AS之间传播,内网互联往往配合Community属性来动态修改MED,实现就近回程。
BGP community属性配置详解:把选路规则变成工程语言
Community属性是一个32位的“标签贴纸”,本质是给路由做标记,企业网络的BGP策略,如果全部用前缀列表硬写,配置量大且难以维护,Community属性的出现,正是为了把这些散乱前缀“分类收编”。
标准Community值与私有Community规划
标准社区属性常用于控制路由传播范围,属于“路由卫生”范畴。
| Community值 | 作用 | 场景举例 |
|---|---|---|
NO_EXPORT |
不传给EBGP邻居 | 内部路由不想出AS |
NO_ADVERTISE |
不传给任何邻居 | 本地回环地址 |
NOPEER(部分厂商支持) |
不传给对等体 | 避免流量走免费对等链路 |
企业中更常用的是私有Community值(ASN:编号格式),比如用65001:100标记“电信线路来的路由”,用65001:200标记“联通线路来的路由”,边界设备收到这些标记后,再统一匹配动作。
配置命令:以华为和思科为例
华为AR系列/NE系列:
route-policy LY-TEST permit node 10
if-match community-filter 100
apply local-preference 200
#
ip community-filter 100 permit 65001:100
#
route-policy LY-TEST permit node 20
思科IOS-XE:
ip community-list 100 permit 65001:100
!
route-map LY-TEST permit 10
match community 100
set local-preference 200
!
route-map LY-TEST permit 20
上面的例子中,任何打上65001:100标记的路由,都被自动赋予Local-Pref 200。这种“打标签-匹配标签-执行动作”的三段式写法,是企业网络里BGP community过滤和策略下发的标准范式。
企业网络BGP选路配置案例:从绕路到负载均衡
实际场景中,一个双出口企业网络(电信+联通),经常出现“电信用户走联通出口”的尴尬,某企业总部在杭州,分部在上海,两条专线分别通过电信和联通上联,路由学习正常,但回程流量总往联通方向挤。排查发现,电信方向收到的路由AS Path往往长于联通,导致Local-Pref相同的情况下,流量默认走联通。
具体处理路径
- 第一步:在电信出口设备上,对所有从电信邻居收到的路由,打上
65001:100的Community标记。 - 第二步:在核心交换机(或路由反射器)上配置路由策略,匹配
65001:100后,将local-preference数值提高(比如设为300)。 - 第三步:在联通出口设备上配置
as-path prepend,把联通往回通告的路由AS Path长度增加一倍,逼走电信用户从电信出口回程。
业内专家指出,这种做法本质是“用Community做分类,用Local-Pref做引流”,处理完之后,电信、联通流量比例接近各占一半,链路利用率明显提升。(此处数据为行业求稳常用处理手法,具体效果取决于实际路由情况与带宽比例)
负载均衡场景下的Community衍生玩法
- 如果是三出口(电信+联通+移动),可以设计两个Community值组合,比如
65001:10标记“重要业务路由”,65001:20标记“下载业务路由”,通过调整Local-Pref,让重要业务走高质线路,下载走低价大带宽线路。 - 修改MED配合Community,通常不对等互联(上下行带宽不同)时使用,但企业网内自建IBGP会话时几乎用不到,同一AS内部MED不生效,需要明白这个边界。
运维中的社区属性过滤与安全边界:防止“贴纸”背刺
Community属性虽然是个好工具,但也容易被“带偏”,比如从运营商收到的BGP路由里,混入一些奇怪的Community值,若不处理,可能意外抬高本地优先级,造成路由劫持或黑洞。
入口过滤五步走
- 在EBGP对等体
route-policy import阶段,先匹配已有Community,再做动作,不要把全部路由都允许进来。 - 对非常用Community值做丢弃处理,保留自己规划的私有Community值。
- 配合
as-path filter用于限制对端AS号范围,防止路由泄漏。 - 可以配合
maximum prefix限值邻居最大前缀数,超过后自动断开,这是防路由攻击的压舱石。 - 关键一步:在所有IBGP邻居会话上启用
bestroute选路日志,排查过去7天内选路跳变的记录,方便回溯。
统一出口策略模板化
在配置变更频繁的时期,运维工程师容易改了一条BGP策略,没检查相邻的其他策略。建议将出口路由策略统一写成模板文件,用Git等工具做版本控制。 比如定义路由策略模板,对于所有运营商接入路由,先统一打上识别运营商身份的Community值;再定义本地优先级的映射表,每次变更,只需要修改映射表,不需要改每条路由策略,这让BGP community过滤变得高度自动化,也降低了误操作概率。
常见问题:BGP路由优选与Community边界
问:我配置了BGP路由优选参数,但两条带宽链路依然不均衡,为什么?
答:带宽不均衡不等于故障,先确认两条链路的路由是等价还是非等价,如果是非等价,需要检查本地优先级、AS Path长度、MED值三个参数是否如预期一样设置了。比较常用的小技巧:在边界设备上执行display bgp routing-table检查每条前缀的LocalPref和AS Path值,看哪个参数“压”了流量,若参数都正确,再检查接口下是否配置了bandwidth参数,部分厂商的协议(如OSPF)会在转发层面形成非等价负载,但BGP本身不会因接口带宽改变选路结果。
问:BGP community属性配置详解里,私有Community值怎么规划最合理?
答:推荐采用“站点-功能-线路”三段式编码,比如65001:101表示“站点A的电信线路”,65001:202表示“站点B的联通线路”。要避免直接使用1:1这类过于简单的编号,否则后期维护需求多了,根本记不住哪个值代表什么用途。 在给上游邻居发送路由时,要规划好哪些Community值可以透传,哪些必须剥离,这一步不做好,内网策略可能影响外部流量。
问:企业网络BGP选路配置案例中,双线接入如何控制回程路径?
答:控制回程路径的核心在于入方向的Local-Pref调整,关键在于配合Community做标记,比如运营商A发来的路由,打上标记后给出Local-Pref 200;运营商B发来的路由,打上标记后给出Local-Pref 300。业务侧去程(从内到外)主要看的是路由的出方向策略,回程(从外到内)看的是入方向的Local-Pref。 这条规则务必在两侧路由器上同时验证,否则会出现“去程优化,回程绕路”的畸形状态,建议在白天流量高峰时段做出口延迟监控,确认策略生效。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/792505.html


