关键词:BGP、选路优化、优选路径、LOCAL_PREF、MED、AS_PATH、Weight、路由调优
第92篇:BGP 优选路径调优案例
一、引言
在第85篇中,我们系统学习了 BGP 选路的 13 条规则。BGP 的选路机制非常严谨,从 Weight 到 AS_PATH 长度再到 ORIGIN 类型,每一步都有明确的优先顺序。但在实际网络中,默认选路结果往往无法满足业务需求:可能某条链路带宽更大却未被选中,或者某条路径延迟更低但 AS_PATH 更长。
本文聚焦 BGP 优选路径调优,通过修改 BGP 属性来引导选路,覆盖从简单到复杂的多类实战场景。
二、核心概念
2.1 BGP 选路规则速览
BGP 选路按以下优先级依次比较(满足条件即停止比较):
| 优先级 | 比较项 | 优选方向 |
|---|---|---|
| 1 | Weight | 最大(华为私有,本地有效) |
| 2 | LOCAL_PREF | 最大 |
| 3 | 本地产生 | 本地 > Confederation > eBGP |
| 4 | AS_PATH 长度 | 最短 |
| 5 | ORIGIN 类型 | IGP < EGP < Incomplete |
| 6 | MED | 最小 |
| 7 | eBGP > iBGP | eBGP 优先 |
| 8 | IGP 到 Next_Hop 的距离 | 最短 |
| 9 | Router ID | 最小(多路径时) |
2.2 可用于调优的属性
| 属性 | 修改位置 | 影响范围 | 适用场景 |
|---|---|---|---|
| Weight | 本地路由器 | 仅本地有效 | 本地入口调优 |
| LOCAL_PREF | AS 入口处 | 整个 AS 内 | AS 出口调优 |
| MED | AS 边界 | 相邻 AS | 相邻 AS 入口调优 |
| AS_PATH | 本地或入口 | 传递至下游 | 通过 prepend 影响下游选路 |
| Community | 任意位置 | 配合策略 | 集中式标记 + 分布式策略 |
2.3 调优策略选择原则

三、技术细节
3.1 Weight 调优(本地有效)
Weight 是华为/思科设备的私有属性,仅在本地路由器生效,不传递给任何对等体。
# 方式1:对特定 Peer 设置 Weight
bgp 100
peer 203.0.113.1 as-number 64501
peer 203.0.113.1 route-policy SET-WEIGHT import
route-policy SET-WEIGHT permit node 10
apply weight 200
# 方式2:对特定前缀设置 Weight
route-policy SET-WEIGHT-PREFIX permit node 10
if-match ip-address prefix-list VIP-PREFIX
apply weight 300
route-policy SET-WEIGHT-PREFIX permit node 20
ip prefix-list VIP-PREFIX permit 10.1.1.0 24
Weight 特点: - 取值范围 0-1024(华为设备) - 不传递给任何 BGP 对等体 - 适用于入口流量引导(影响本地选路)
3.2 LOCAL_PREF 调优(AS 内部)
LOCAL_PREF 是公认自决属性,在 AS 内部传递,用于影响 AS 的出口选择。
# 在 AS 入口设置 LOCAL_PREF
route-policy SET-LP permit node 10
if-match ip-address prefix-list HIGH-BW
apply local-preference 200
route-policy SET-LP permit node 20
apply local-preference 100
bgp 100
peer 203.0.113.1 as-number 64501
peer 203.0.113.1 route-policy SET-LP import
关键要点: - LOCAL_PREF 默认值为 100 - 仅在 iBGP 域内传递,不传递给 eBGP 对等体 - 在所有 iBGP Speaker 上生效,适合集中式出口策略
3.3 MED 调优(相邻 AS)
MED(Multi-Exit Discriminator)用于在多个出口连接的相邻 AS 之间引导入口选择。
# 在 AS 出口设置 MED(发送给相邻 AS)
route-policy SET-MED permit node 10
if-match ip-address prefix-list LOW-LATENCY
apply med 50
route-policy SET-MED permit node 20
apply med 200
bgp 100
peer 198.51.100.1 as-number 64502
peer 198.51.100.1 route-policy SET-MED export
MED 关键约束:
- MED 仅在相邻两个 AS 之间传递,不会继续传播
- 仅当路由来自同一个 AS 时,MED 比较才有意义
- 可使用 compare-med-all 命令强制比较来自不同 AS 的 MED
bgp 100
compare-med-all # 强制比较所有路由的 MED,无论来源 AS
3.4 AS_PATH Prepend 调优(影响下游)
通过人为延长 AS_PATH 来降低某条路径的优先级,这是影响下游 AS 选路最常用的方法。
# AS_PATH Prepend
route-policy PREPEND permit node 10
if-match ip-address prefix-list BACKUP-ROUTE
apply as-path 100 100 100 additive
# 在原有 AS_PATH 前追加三个 100,使总长度增加3
# 查看效果
display bgp routing-table 10.1.1.0 24 verbose
# AS_PATH 字段显示为:100 100 100 ...
| Prepend 数量 | AS_PATH 增加长度 | 效果 |
|---|---|---|
| 1 次 | +1 | 微弱影响 |
| 3 次 | +3 | 明显降低优先级 |
| 5 次 | +5 | 显著降低,接近备份路径 |
3.5 NEXT_HOP 与 IGP 度量调优
BGP 选路的第 8 条规则是比较 IGP 到 Next_Hop 的距离。通过优化 IGP Cost,可以影响 BGP 在 Next_Hop 可达但其他属性相同时的选路结果。
# 调优 IGP 路径 Cost
interface GigabitEthernet0/0/1
ospf cost 10 # 降低 OSPF Cost,使 Next_Hop 路径更短
四、实战配置/案例分析
4.1 场景一:多出口 AS 的流量工程
需求:AS 100 通过 R1(eBGP 连接 ISP1)和 R2(eBGP 连接 ISP2)两个出口连接互联网。要求: - VIP 业务(10.1.1.0/24)从 R1 出口 - 普通业务从 R2 出口 - R2 链路作为 R1 的备份

配置实现:
# === R1(主出口)===
# 从 ISP1 学到的路由设置高 LOCAL_PREF
ip prefix-list VIP-SERVER permit 10.1.1.0 24
ip prefix-list NORM-SERVER permit 10.1.2.0 24
route-policy ISP1-IMPORT permit node 10
if-match ip-address prefix-list VIP-SERVER
apply local-preference 200
route-policy ISP1-IMPORT permit node 20
apply local-preference 150
bgp 100
peer 203.0.113.1 as-number 64501
peer 203.0.113.1 route-policy ISP1-IMPORT import
# 向 ISP1 发送 VIP 路由时,不 Prepend(优选)
route-policy ISP1-EXPORT permit node 10
if-match ip-address prefix-list VIP-SERVER
apply local-preference 100
route-policy ISP1-EXPORT permit node 20
if-match ip-address prefix-list NORM-SERVER
apply as-path 100 100 100 additive
# 普通路由 Prepend,使 ISP1 优先从 ISP2 接收
bgp 100
peer 203.0.113.1 route-policy ISP1-EXPORT export
# === R2(备出口)===
route-policy ISP2-IMPORT permit node 10
apply local-preference 100
# 默认 LOCAL_PREF 100,低于 R1 的 150/200
bgp 100
peer 198.51.100.1 as-number 64502
peer 198.51.100.1 route-policy ISP2-IMPORT import
# 向 ISP2 发送 VIP 路由时 Prepend(降低优先级)
route-policy ISP2-EXPORT permit node 10
if-match ip-address prefix-list VIP-SERVER
apply as-path 100 100 additive
route-policy ISP2-EXPORT permit node 20
bgp 100
peer 198.51.100.1 route-policy ISP2-EXPORT export
选路分析:
| 路由 | R1 LOCAL_PREF | R2 LOCAL_PREF | AS 内优选出口 | ISP1 优选入口 | ISP2 优选入口 |
|---|---|---|---|---|---|
| VIP 10.1.1.0/24 | 200 | 100 | R1 (出口) | 无 Prepend (优选) | Prepend (次优) |
| 普通 10.1.2.0/24 | 150 | 100 | R1 (主) | Prepend (次优) | 无 Prepend (优选) |
4.2 场景二:利用 MED 协调上下游选路
需求:AS 100 与 AS 200 之间有两条 eBGP 链路,要求 AS 200 进入 AS 100 时优先走链路 A。
# === AS 100 侧 R1(链路A,优选入口)===
bgp 100
peer 10.255.0.1 as-number 200
peer 10.255.0.1 route-policy MED-SET export
route-policy MED-SET permit node 10
apply med 50 # 低 MED,AS 200 优选此入口
# === AS 100 侧 R2(链路B,备份入口)===
bgp 100
peer 10.255.1.1 as-number 200
peer 10.255.1.1 route-policy MED-BACKUP export
route-policy MED-BACKUP permit node 10
apply med 200 # 高 MED,AS 200 次选此入口
4.3 故障案例:MED 比较失效
故障现象:配置了 MED 差异,但对方 AS 仍然选择 MED 较高的路径。
排查步骤:
# 步骤1:确认 MED 值是否正确发出
display bgp routing-table peer 10.255.0.1 advertised-routes
# 检查 MED 列的值
# 步骤2:在对方 AS 检查收到的 MED
display bgp routing-table peer 10.255.0.2 received-routes
# 确认 MED 值是否正确接收
# 步骤3:确认路由来自同一 AS
# MED 比较的前提是路由来自同一个 AS
# 如果来自不同 AS,默认不比较 MED
# 步骤4:检查是否启用了 compare-med-all
display current-configuration configuration bgp 200
# 如果没有 compare-med-all,来自不同 AS 的路由不比较 MED
常见根因:
| 根因 | 说明 | 解决 |
|---|---|---|
| MED 跨 AS 比较 | 默认只比较来自同一 AS 的 MED | 在接收侧配置 compare-med-all |
| 上游策略覆盖 | 对方 AS 的策略修改了 MED | 在对方侧验证 MED 接收值 |
| 其他属性优先 | AS_PATH 等更高优先级属性已决出胜负 | 调整更高优先级的属性 |
| 路由非最佳 | MED 仅对候选路径(非 Best)产生影响 | 检查 BGP 选路的完整属性链 |
五、总结
| 调优属性 | 影响范围 | 生效方向 | 典型场景 |
|---|---|---|---|
| Weight | 本地路由器 | 入口流量引导 | 单路由器多链路入口优选 |
| LOCAL_PREF | 本 AS 全部路由器 | 出口流量引导 | 多出口 AS 的出口策略 |
| MED | 相邻 AS | 相邻 AS 入口引导 | 双链路连接的入口调优 |
| AS_PATH Prepend | 传递至下游 | 下游 AS 选路影响 | 主备链路、备份路由降级 |
| Community | 配合策略 | 灵活路由控制 | 集中标记 + 分布式执行 |
调优建议: 1. 优先使用 LOCAL_PREF 控制 AS 出口,在入口处统一设置 2. 跨 AS 调优时,通过 MED 与相邻 AS 协调,确保双方策略一致 3. AS_PATH Prepend 是"被动"降级手段,适合降低某条路径优先级 4. 避免过度调优,保持路由策略的简洁性和可维护性 5. 所有调优策略变更后,务必验证 BGP 选路结果是否符合预期
思考
- 为什么 LOCAL_PREF 只在本 AS 内有效而不会传递给 eBGP 对等体?如果传递给 eBGP 对等体会导致什么问题?
- MED 仅在路由来自同一 AS 时才进行比较,这条规则的设计意图是什么?取消这个限制会带来什么风险?
- AS_PATH Prepend 和修改 MED 都可以影响相邻 AS 的入口选择,在什么场景下应该选择 Prepend,在什么场景下应该选择 MED?
下篇预告:第93篇:BGP 路由黑洞的产生与避免