BGP LocalPref 与 MED 调优手册:多出口网络的稳定流量工程实践
在多出口网络里,LocalPref 与 MED 常被同时使用,但很多故障恰恰来自两者混用失控。 常见现象是:出口流量看起来调通了,过几天业务高峰又回抖;或者对端入口流量偏置生效了,却引发本地收敛震荡。
问题根源通常不是协议本身,而是策略边界不清。 LocalPref 负责自治系统内部优先级,MED 负责向同一对端 AS 提示入口偏好。二者语义不同、作用域不同、风险也不同。
本文目标是给出一套可发布、可运维、可回滚的调优框架。
一、先建立“目标优先级”,再选属性
调优前先明确目标顺序,推荐按以下优先级:
- 业务连续性。
- 收敛稳定性。
- 时延优化。
- 成本优化。
如果把成本放在前面,通常会在故障场景失去弹性。 因为高成本路径往往也是高冗余路径,过度压成本会削弱故障缓冲能力。
二、LocalPref 设计:固定档位,禁止自由漂移
LocalPref 是 AS 内最有力的出口控制杆。越强的杠杆越要制度化。 建议用固定档位而非自由数值:
- 320:关键业务保护档。
- 280:低时延优先档。
- 240:默认主出口档。
- 200:普通备出口档。
- 150:成本优先档。
并执行三条硬规则:
- 单次变更最多跨一档。
- 应急档位必须有过期时间。
- 关键前缀档位变更必须双人审批。
这样做可以把“临时经验值”从系统中清理掉。
三、MED 设计:协商属性,不是万能控制器
MED 经常被过度期待。它本质上是“建议值”,而且通常只在同一对端 AS 的路径比较中有效。 因此 MED 调优要强调外部协同:
- 明确对端是否比较 MED。
- 明确对端是否会覆盖你的 MED。
- 明确多互联点的 IGP 与物理路径约束。
如果这些前提不清楚,MED 再精细也可能没有效果,甚至产生反直觉路径。
四、组合策略:LocalPref 决定“我怎么出”,MED 影响“你怎么进”
成熟实践不是二选一,而是分层组合:
- 出口流量主控用 LocalPref。
- 入口流量偏置用 MED + 社区值协同。
- 细粒度修正用 AS_PATH prepend。
- 风险兜底用 NO_EXPORT 与泄露防线。
这套组合避免了把单一属性拉到极限。 “所有问题都用一个属性解决”在 BGP 里几乎必定失稳。
flowchart LR
A["前缀进入策略域"] --> B["安全检查: RPKI/前缀白名单/max-prefix"]
B --> C["业务分类: 关键/普通/成本"]
C --> D["LocalPref 档位映射"]
D --> E["MED 设定与对端协商策略"]
E --> F["可选 Prepend 微调"]
F --> G["发布并观测: 收敛+业务指标"]
五、收敛稳定:调优动作要限制爆炸半径
调优时最危险的不是某个参数,而是动作叠加。 建议执行以下收敛纪律:
- 一个维护窗口只改一种核心属性。
- 每次只灰度一个区域。
- 观察窗至少覆盖一个业务峰值片段。
- 任一阈值触发就立即冻结放量。
阈值建议包含三类:
- 控制面阈值:会话 flap、更新峰值、重算时延。
- 路由面阈值:关键前缀路径切换次数。
- 业务面阈值:核心 API 成功率和 P99 延迟。
六、路由泄露防护:调优不能突破安全基线
流量工程常在高压场景执行,最容易“先调通再补安全”。 这个顺序必须反过来:
- 无策略默认拒绝(RFC 8212)。
- 客户/对等/上游角色约束与 OTC(RFC 9234)。
- max-prefix 分级阈值。
- RPKI Origin Validation 结果分流。
- 异常传播自动隔离。
只有安全门禁先过,LocalPref/MED 才允许放量。
七、可观测性:判断调优有效,必须看联动指标
建议最少构建 12 个指标:
- 各档位 LocalPref 前缀数。
- 各档位流量占比。
- MED 值分布与变化率。
- 关键对端入口流量偏移。
- 会话 flap 频率。
- 更新峰值和重算耗时。
- RIB/FIB 差异时长。
- 关键业务错误率。
- 关键业务 P99 延迟。
- 回滚触发次数。
- 告警关闭时长。
- 变更后 24 小时异常事件数。
如果没有这些指标联动,你只能凭“感觉”判断调优效果。
八、维护窗口流程:从“手工调值”升级为“工程发布”
标准流程建议分八步:
- 变更前仿真:评估路径变化范围。
- 变更评审:确认目标优先级与风险边界。
- 基线快照:记录当前 LocalPref/MED 分布。
- 小流量灰度:单节点或单区域先行。
- 联动验收:网络+业务指标同时达标。
- 阶段放量:逐批推进并持续观察。
- 条件回滚:触发阈值立即回退。
- 复盘归档:更新模板、字典和阈值。
流程的价值不是增加手续,而是降低不可逆风险。
九、回滚策略:提前设计比临场反应更可靠
回滚建议分三层:
- 属性回滚:恢复 LocalPref 档位基线。
- 边界回滚:撤销 MED 与 prepend 变更。
- 路由回滚:回到上个稳定策略版本。
每层都要定义触发条件和验证条件。 例如“触发条件”可以是连续 5 分钟业务错误率超阈值;“验证条件”可以是 10 分钟内指标回归。
十、典型场景打法
场景 A:双运营商出口,关键业务时延波动
建议:
- 关键前缀先提升到低时延档位。
- 观察一个峰值周期。
- 若成功再扩大前缀范围。
- 同时记录成本变化,防止超预算。
场景 B:入口流量集中打爆某互联点
建议:
- 与对端确认 MED 比较策略。
- 小步调整 MED 值。
- 必要时配合 prepend 温和偏置。
- 若无效,快速回退并改用社区协同方案。
场景 C:调优窗口叠加泄露告警
建议:
- 立即冻结调优放量。
- 先执行安全隔离。
- 恢复稳定后再继续优化。
十一、治理制度:让策略长期可维护
建议建立四个资产库:
- LocalPref 档位字典。
- MED 协商矩阵。
- 变更模板与回滚模板。
- 事故复盘与阈值演进记录。
并把它们放进同一版本库,任何生产变更都要引用版本号。 没有版本号的策略,等于不可审计策略。
十二、季度演练建议
每季度至少做三次演练:
- 出口切换演练:验证 LocalPref 档位与回滚时长。
- 入口偏置演练:验证 MED 协商有效性。
- 风险叠加演练:验证泄露告警下的变更冻结机制。
每次演练都应输出改进项并追踪关闭。
十三、落地核查清单
- 是否有固定 LocalPref 档位体系。
- 是否有 MED 协商记录与适用边界。
- 是否设置安全门禁优先于调优动作。
- 是否具备 12 项联动观测指标。
- 是否具备三层回滚包。
- 是否建立季度演练和复盘机制。
这些核查项长期达标,LocalPref 与 MED 才会成为“稳定器”,而不是“风险放大器”。
十四、数据驱动调优案例:从“感觉切流”到“证据切流”
下面给一个可复用的案例框架,帮助团队把 LocalPref/MED 调优变成可验证实验。
案例背景
某区域有两条互联网出口:A 出口时延低但成本高,B 出口成本低但高峰拥塞明显。 业务方希望白天优先稳定,夜间适当降成本。
调优前基线
- 关键前缀全部走 A,普通前缀混合。
- 高峰期 B 出口丢包上升,出现短时重传。
- 入口流量在两个互联点分布不均。
调优动作
- 对关键前缀维持高档 LocalPref,不参与成本策略。
- 对普通前缀在夜间窗口下调一档 LocalPref,导向 B。
- 对入口拥塞互联点提高 MED,配合对端协商做缓慢偏置。
- 对高风险前缀启用严格 max-prefix 与角色约束,防止误发布。
验收指标
- 关键业务成功率保持不变。
- 高峰期 P99 延迟不恶化。
- 夜间总成本下降达到预期目标区间。
- 更新峰值与 flap 不超过基线上限。
结果判读
如果成本下降但高峰延迟恶化,说明策略过度偏向 B,需要回调一档。 如果入口偏置无明显变化,先检查对端是否接受 MED,再决定是否引入更强入口手段。
这个案例的关键不是“某个参数值”,而是调优全过程有可复盘证据。 有了证据,你可以持续迭代;没有证据,每次优化都像重来一次。
十五、跨团队协作建议:把网络策略翻译成业务可理解语言
LocalPref/MED 往往由网络团队维护,但影响的是业务体验与成本。 为了减少沟通损耗,建议在变更文档中同时提供两套描述:
- 技术描述:改了哪些属性、影响哪些前缀。
- 业务描述:预计影响哪些地域、时段、服务等级。
并约定一个统一“发布信号灯”:
- 绿灯:网络和业务指标都在可接受范围。
- 黄灯:网络稳定但业务轻微劣化,需要继续观察。
- 红灯:触发阈值,立即回滚。
当业务方能看懂策略影响,变更决策会更快,复盘也更聚焦。
十七、策略回收节奏与成本复盘补充
LocalPref/MED 调优最容易被忽略的阶段是“回收”。很多团队在故障或大促时上调策略强度,事后没有按计划回收,最终形成长期成本漂移和路径偏态。建议建立固定回收节奏:窗口后 24 小时做首次回看,72 小时做峰值时段复核,7 天做成本与体验联合复盘。复盘内容不只看总带宽费用,还要看关键前缀的路径稳定性、重选频率和业务延迟变化。对于临时标签和临时档位,必须绑定到期动作,逾期自动回退到默认档位并通知责任人。把回收做成制度,才能避免调优从“短期有效”变成“长期负债”,同时让成本优化与稳定性目标保持一致。
补充一条治理建议:成本导向策略必须绑定预算护栏和自动回调条件。当月成本收益未达预期且稳定性指标恶化时,应自动回退到上一个稳态档位,避免“降本动作”在业务高峰期转化为可用性风险。