关键词: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 的备份

场景一:多出口 AS 的流量工程 - 图示

配置实现:

# === 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 选路结果是否符合预期

思考

  1. 为什么 LOCAL_PREF 只在本 AS 内有效而不会传递给 eBGP 对等体?如果传递给 eBGP 对等体会导致什么问题?
  2. MED 仅在路由来自同一 AS 时才进行比较,这条规则的设计意图是什么?取消这个限制会带来什么风险?
  3. AS_PATH Prepend 和修改 MED 都可以影响相邻 AS 的入口选择,在什么场景下应该选择 Prepend,在什么场景下应该选择 MED?

下篇预告:第93篇:BGP 路由黑洞的产生与避免