BGP路由优选在多线互联中的落地,核心不是背熟选路十条,而是把“权重本地优先AS路径MED”这四层按业务方向一次性排好序,再用route-map和community把策略固定下来,最后靠路由表比对和双向探测做回归验证。顺序错了、方向反了、匹配漏了,配得再花哨也不会生效。
先看懂BGP选路这条流水线
选路顺序里的四道关键闸门
BGP的best path选择是一条有严格先后顺序的流水线,前面的属性一旦分出胜负,后面的属性根本没机会上场,多线互联场景里,真正天天用到的其实只有四个:
| 属性 | 生效范围 | 影响方向 | 典型用途 |
|---|---|---|---|
| weight(华为叫preferred-value) | 仅本机 | 入方向 | 单台设备临时改道、故障兜底 |
| local-preference | 整个AS内部 | 入方向 | 主线备线切换,最常用 |
| AS-Path | 跨AS传播 | 出方向 | 告诉上游“别从我这条走” |
| MED | 相邻两个AS之间 | 出方向(影响对端入口) | 同运营商多出口分流 |
排在前面的属性优先级更高,这是行业共识认为最容易被新手忽略的一点,你在错误的层级上配了参数,比如想用MED去影响自己出方向选路,结果前面local-preference已经分出胜负,MED压根不参与比较。
为什么很多人配了不生效
排查下来无非几类:
- 方向搞反:local-preference只对入方向路由生效,想影响“从我这出去走哪条线”,得用AS-Path或MED。
- 匹配没对上:route-map里写了match,但prefix-list范围写错,或者漏了
permit 100的兜底节点,导致其他路由被默认拒绝。 - 默认值干扰:Cisco设备local-preference默认100,weight默认0,你不显式set,它就按默认值参与比较。
- 对端不认:你精心设计的community,运营商侧根本没有对应的策略模板,等于白发。
去程和回程要分开治理
多线互联的经典难题是“去程走电信、回程走联通”,路径不对称导致延迟抖动,去程由你自己的出方向策略决定,回程由运营商侧决定,两边必须分别规划,业内专家指出,多数线路质量问题并不是带宽不够,而是双向路径没有对齐。
BGP多线互联路由优选怎么配置:从规划到敲命令
第一步:先画流量地图,别急着登录设备
拿一张纸把这几件事写清楚:
- 每条出口的运营商属性、带宽、计费方式(包月还是95计费)。
- 每个业务网段的质量要求支付类要低延迟,下载类要大带宽,办公类可以走备线。
- 主线备线的切换条件:是链路down,还是延迟超阈值,还是丢包率超标。
- 是否需要对端配合:比如让运营商在回程上做prepend,需要提前提工单。
第二步:给每条线路打community标签
统一编号规则是后期运维省事的关键。
65001:100电信主用65001:200联通主用65001:900黑洞/清洗
入方向按community匹配设local-preference,出方向按同一套标签生成AS-Path prepend,这样以后加线路只改一张表,不用翻遍所有设备的配置。
第三步:入方向用local-preference分主备
Cisco IOS XE上的典型写法:
ip prefix-list PL-BIZ seq 10 permit 203.0.113.0/24 route-map RM-IN-TEL permit 10 match ip address prefix-list PL-BIZ set local-preference 200 route-map RM-IN-TEL permit 100 set local-preference 100
华为设备对应的是:
route-policy RP-IN-TEL permit node 10 if-match ip-prefix PL-BIZ apply local-preference 200
注意最后那个permit 100的兜底节点,漏了它,未匹配的路由会被隐式拒绝,业务直接断。
第四步:出方向用AS-Path做牵引
想让某段流量从联通出去,就在电信方向的邻居上做prepend:
route-map RM-OUT-TEL permit 10 match ip address prefix-list PL-BIZ set as-path prepend 65001 65001 65001
prepend长度控制在2到4次比较稳妥,太长容易被对端做入方向过滤,行业里对超过5次的prepend普遍持谨慎态度。
第五步:灰度上线,别一次全推
先在备用线路的边界设备上应用,用show ip bgp 203.0.113.0确认best path变化符合预期,再推到主设备,全量推之前保留一份show run备份是基本操作。
BGP路由优选策略和本地优先哪个生效快
这是运维群里问得最多的对比,直接给结论:
- weight/preferred-value:只在本机生效,改完立刻影响本机选路,最快,但其他设备看不到。
- local-preference:在AS内部通过iBGP传播,收敛取决于iBGP邻居数量和路由反射器结构,通常秒级到十几秒。
- AS-Path:要跨AS传到对端再传回来,收敛最慢,而且会影响对端的入方向决策,波及面最大。
- MED:只在相邻AS之间比较,且对端可以选择忽略。
所以紧急故障切换优先用weight做本机兜底,常规主备规划用local-preference,需要影响上游入口时才动AS-Path,三者的作用域完全不同,混着用就会出现“我这边切了,对面还没反应”的尴尬。
北京BGP多线机房路由优选方案怎么定
单机房多线 vs 双机房多线
单机房接三家的方案,成本低但存在单点风险,路由优选主要解决的是出口选择和链路质量,双机房方案要多考虑一层:机房之间的iBGP全互联还是路由反射器,以及跨机房的local-preference是否要统一,北京地区不少机房提供电信、联通、移动加教育网的四线接入,教育网出口的选路策略往往需要单独一套prefix-list,因为教育网的回程路径和公网差异明显。
和运营商对接前必须确认的四件事
- 对端是否接受你发送的community,能否按其做回程策略。
- 是否过滤私有AS号,你的prepend里如果带了私有AS会被丢弃。
- 对prepend次数有没有上限限制。
- 是否提供looking glass,方便你在外部视角验证路由发布情况。
这几条不提前问清楚,策略上线后会出现“本地看正常、外部看绕路”的情况。
多线BGP接入一年多少钱,值不值得为选路策略多投入
价格主要由四块决定:带宽大小、IP地址数量、线路条数、是否含DDoS清洗,中小带宽的包月接入通常是几千元级别,大带宽和专线场景按月计费会明显上一个量级,95计费模式适合流量波动大的业务,包月适合稳定输出。
需要算清楚的是隐性成本:
- 每条线路的初装费和调试费。
- 额外的IP地址段费用。
- 策略维护的人力成本这部分最容易被低估。
如果只有两条线路、业务对延迟不敏感,做一套精简的local-preference主备就够了,不必上完整的community体系,三条以上线路、或者有支付、游戏、直播这类对路径敏感的业务,策略投入的回报才明显。
上线后怎么验证策略真的生效
四条必查命令
show ip bgp 203.0.113.0:看best path和各项属性值,确认选中的是你预期的下一跳。show ip bgp summary:确认所有邻居Establish,没有反复震荡。show route-map:确认策略命中计数在增长,没命中的策略等于没配。mtr -r -c 100 目标地址:双向看路径和丢包,单向traceroute容易误判。
回归测试清单
切换前后各跑一次,记录基线:主备线各跑一轮延迟、丢包、抖动;模拟主线down,观察切换时间和路由收敛;确认切换后回程路径没有绕行到第三个运营商。
关于BGP多线路由优选的常见问题
BGP多线互联路由优选怎么配置才不会互相覆盖?
按层级分工,不要在同一层堆叠多个属性,约定入方向只动local-preference,出方向只动AS-Path或MED,weight仅用于临时故障兜底且用完即删,所有策略挂在明确的prefix-list上,禁止match any,每加一条策略,先在单台设备验证show ip bgp输出,再推全量。
只有两条线路,有必要做完整的选路策略吗?
两条线路的场景,一套local-preference主备加一条出方向prepend就足够覆盖绝大多数需求,完整的community体系更适合三条以上线路、或者需要和运营商联动做回程优化的环境,策略复杂度应该跟线路数量和业务敏感度匹配,过度设计反而增加故障面。
路由优选策略和运营商侧的流量清洗会冲突吗?
会,清洗中心通常通过community触发路由引流,如果你的入方向策略在更靠前的位置用local-preference把流量钉在了原线路上,清洗路由可能进不来,处理办法是把清洗community的匹配节点放在route-map最前面,赋予比业务主备更高的local-preference,并在变更后确认清洗路由确实出现在BGP表中。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/792433.html


