BGP路由优选没有放之四海而皆准的公式,关键是把业务类型和AS_PATH、LOCAL_PREF、MED这些属性一一对上号,分场景精细化调优才能让流量走对路。
为什么BGP路由优选策略必须按业务划分
很多网络工程师拿到BGP配置手册就直接照搬默认策略,这种偷懒的做法在业务单一的IDC场景勉强能跑,一旦碰上混合业务就原形毕露,视频业务要带宽、金融业务要稳、电商业务要快,它们的路由诉求天然互斥。
举个例子,视频点播业务对时延和丢包率极度敏感,但它的流量模型是“读多写少”,连接持续时间长,这个时候如果让视频流量走了AS_PATH短但绕了远路的物理链路,用户体验就会断崖式下跌,而普通网页浏览业务对时延不那么敏感,却要求连接建立速度快,选路逻辑完全两样。
业内专家指出,不同业务对BGP路径属性的容忍度差异,是导致策略分歧的根本原因,LOCAL_PREF控制的是AS内出口优先级,对跨运营商互通影响最大;MED影响的是入站流量,对多线接入场景至关重要;而AS_PATH长短往往和故障率呈正相关,路径越长越容易出问题。
咱们把业务和非业务流量混在一起跑,就像把货车和小轿车放在同一条车道上,谁都没跑出最佳效率,所以第一步就是做业务画像,搞清楚你的网络里跑的是哪种类型的流量。
企业BGP选路方案对比:不同业务的属性权重分配逻辑
先明确一个前提:BGP选路总共要经过十多个步骤,但能由我们主动调节的不过五六个,日常配置中,最常用的可变属性是Weight、LOCAL_PREF、AS_PATH、MED和Community,下面这张表展示了几种主流业务的属性权重差异:
| 业务类型 | 核心诉求 | 首要调优属性 | 典型策略倾向 |
|---|---|---|---|
| 视频直播/点播 | 码率稳定、低时延 | LOCAL_PREF + AS_PATH | 避开长途绕行,优先直连骨干节点 |
| 金融交易系统 | 链路稳定、极少震荡 | MED + Community | 屏蔽抖动的备份线路,严格控制重路由 |
| 跨境电商网站 | 跨国访问体验好 | AS_PATH + Weight | 按地域分流,欧美流量走特定国际出口 |
| 多线IDC机房 | 成本与性能平衡 | MED + 本地优先级 | 根据多线BGP机房价格动态切量 |
LOCAL_PREF是出站流量的“遥控器”,值越大越优先,比如你同时接了电信和联通,想让视频流量优先走电信,就能通过设置LOCAL_PREF 200(电信)和100(联通)来强制分流。
有一个关键细节容易踩坑:LOCAL_PREF只在AS内部传递,对上游运营商不起作用,所以跨域控制还得配合AS_PATH prepend来“拉长”路径。
再看MED,它的值是越小越优先,而且只在两个AS之间传递,多线接入场景下,如果想引导电信用户主要走电信线路、联通用户走联通线路,就靠MED在下游设备上做方向性调控,但要注意,MED不能传给第三个AS,否则策略会失效。
对价格敏感的中小企业,经常纠结要不要上BGP,其实多线BGP机房价格确实比单线贵不少,但算上故障赔偿和运维成本,多数情况下反而更划算,策略上可以采用“BGP为主、静态备份”的降级方案,控制成本的同时保证关键业务不掉线。
BGP路由优选策略有哪些关键属性与配置命令
配置BGP优选策略,说白了就是编排一套“交通规则”,动手之前你得明确每个属性在路由决策里的优先级顺序,这属于行业共识:Weight最优先,然后是LOCAL_PREF,接着看本地始发路由,再看AS_PATH长度,随后才是MED、eBGP优先于iBGP、IGP metric,最后比较Router-ID和Peer-IP,这个顺序必须刻在脑子里,排在前面的属性一票否则,后面的再贵也没用。
实操:用route-policy精准控制出站流量
以华为设备为例,假设咱们要把来自AS 100的BGP路由标记为高优先级,让它们优先被选为下一跳:
ip ip-prefix prefix_from_AS100 permit 10.0.0.0 8 greater-equal 24
route-policy PREF_HIGH permit node 10
if-match ip-prefix prefix_from_AS100
apply local-preference 200
apply community 65001:200
# 在BGP视图里调用
bgp 65001
peer 203.0.113.1 route-policy PREF_HIGH import
这段配置的本质是:把来自特定邻居的路由的LOCAL_PREF从默认100加大到200,这样当路由器在多个出口间做选择时,会优先走这个邻居,是不是很简单?但实际项目中,很多工程师把LOCAL_PREF的apply写在了export方向,导致策略不生效,排查半天还找不到原因。
实操:用AS_PATH控制入站流量
多线机房想引导外部流量从指定线路进来,常用的辣手招数是AS_PATH prepend,思路很简单:对某个邻居发布路由时,把自己的AS号在AS_PATH里多补几跳:
route-policy AS_PATH_CTRL permit node 10
apply as-path 65001 65001 65001 additive
# 在BGP发布路由给联通时调用此策略
bgp 65001
address-family ipv4
neighbor 202.102.128.1 route-policy AS_PATH_CTRL export
加长了AS_PATH,传播给联通的路由就会被认为“绕路了”,联通来向的流量自然而然会减少,这样你就能把主要来访流量引导到电信线路上,如果要反过来做,就把那几条prepend删掉,换成电信邻居发短路径。
多种业务混合运行时的BGP路由优选落地路径
现实网络中,一条AS里可以同时跑电商、办公、视频会议好几个业务,这时如果还用一套策略,必然会互相打架,落地路径一般是分三步走。
第一步:按业务打Community标签。 比如给视频业务打上65001:100,给办公业务打上65001:200,Community可以看作BGP路由的“便利贴”,方便上游路由器根据这张便利贴做后续判断。
第二步:在路由反射器上做分流。 现在很多企业没有全互联IBGP,而是用路由反射器RR,在RR上配置基于Community的export策略,给不同业务邻居只反射符合条件的前缀,这是实现业务隔离的常用手段。
第三步:建立灰度发布机制。 改策略最怕一刀切,先在测试网段跑几天,观察丢包和时延数据,稳定后才把策略推广到全量路由,据统计,现在有相当一部分严重网络事故都是改动BGP策略时缺少回滚方案导致的。
有一个细节容易被忽略:BGP策略改动前必须检查是否影响下游非业务流量,例如把某条链路的LOCAL_PREF调大时,可能把原本走另一条链路的邮件服务器流量也带着改了道,引发一连串不可预期的问题。
关于BGP路由优选策略的常见问题
Q:BGP路由优选策略有哪些常用的检查命令?
A:查看BGP邻居状态用display bgp peer,查看某条前缀的详细属性用display bgp routing-table 203.0.113.0/24,能看到LOCAL_PREF、MED、AS_PATH全貌,华为设备上还支持display bgp routing-table statistic,快速看整体路由量变化,思科设备对应的查看命令是show bgp neighbor和show bgp prefix-list detail,实操时建议先抓线上路由做对比,改动前后各存一份快照,输出差异分析。
Q:企业BGP选路方案对比里,单线接入加静态路由和全BGP差距到底有多大?
A:最大的差距在故障切换速度上,静态路由依赖链路检测协议,通常要几十秒甚至几分钟才能感知故障,期间业务完全中断,BGP会话通过Keepalive机制,秒级就能感知邻居故障,配合BFD把收敛时间压到毫秒级,这是质的差别,另一个差距是路径优化能力,BGP能根据实时策略挑路径,静态路由只能走死路一条。“次优路径”带来的时延损失,对实时业务来说是没法接受的。
Q:BGP路由优选怎么配置才能避免路由振荡?
A:核心是充分利用BGP的阻尼惩罚机制,或者手动设置路由抑制,在华为设备上可以配置route-policy配合dampening命令,对频繁翻动的路由设置抑制阈值,比如达到半衰期就停止优选,同时避免在一台设备上反复用refresh bgp手动触发更新,这会让路由稳定性大打折扣,更稳妥的做法时把路由抑制和Community策略结合,对核心业务路由设置更高的抑制门槛,防止误伤。
做BGP路由优选,最终追求的是让每一类业务都获得“专属最优路径”,按业务拆策略、按属性做调优、按场景设阈值,这三个动作缺一不可,别指望一套配置打天下,网络环境不是一成不变的,你的策略也应该跟着业务成长,定期做复盘和调优才是长久之道。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/792428.html


