关键词:BGP、选路原则、13条规则、BestPath、LOCAL_PREF、AS_PATH、MED、PrefVal

第85篇:BGP 选路原则(13条规则)详解

一、引言

BGP 选路原则是 BGP 协议中最核心也最复杂的内容之一。当 BGP 路由器收到多条到达同一目的前缀的路由时,需要按照严格的优先级顺序逐条比较,最终选出最优路由(Best Path)。

BGP 的选路规则按优先级从高到低依次应用。只有当前一条规则无法区分优劣(多条路由在该属性上值相同)时,才进入下一条规则的比较。理解并熟练运用这 13 条规则,是进行 BGP 路径调优和故障排查的必备技能。

注意:以下选路规则以华为 VRP 设备为准。不同厂商的 BGP 选路规则顺序可能有所不同,Cisco 与华为的主要差异在于 LOCAL_PREF 和 MED 的比较顺序。

二、核心概念

2.1 BGP 选路规则总览(华为设备)

优先级 规则 比较内容 优选方向
0 PrefVal(预估值) 华为独有属性 越大越优
1 路由类型 本地路由 > 聚合 > 重分发 > eBGP > iBGP 本地最优
2 LOCAL_PREF 本地优先值 越大越优
3 AS_PATH 长度 AS_PATH 中 AS 号的数量 越短越优
4 Origin 类型 IGP > EGP > Incomplete 优先级越高越优
5 MED Multi-Exit Discriminator 越小越优
6 eBGP > iBGP(Confed) > iBGP 路由来源类型 eBGP优先
7 IGP Metric to Next_Hop 到达 Next_Hop 的 IGP Cost 越小越优
8 Cluster_List 长度 路由反射场景 越短越优
9 Peer Type eBGP > iBGP(Confed-eBGP) > iBGP(Confed-iBGP) > iBGP 越优越好
10 Peer Router ID 对端的 Router ID 越小越优
11 Cluster_List + Originator_ID 联合比较 越小越优
12 NLRI(对端地址) 对端地址比较 越小越优
13 最先学习 到达时间 最先学到的优先

2.2 选路流程示意

选路流程示意 - 图示

三、技术细节

3.1 规则0:PrefVal(预估值,华为独有)

PrefVal 是华为设备特有的 BGP 属性,优先级最高:

特性 说明
作用范围 仅本地有效,不传递给任何 Peer
默认值 0
优选方向 越大越优
使用场景 在有多条等价 BGP 路由时,强制指定优选某一条
# 通过路由策略设置PrefVal
route-policy PREF-SET permit node 10
 if-ip-address prefix-list TARGET-Routes
 apply pref-value 100

bgp 100
 peer 2.2.2.2 route-policy PREF-SET import

3.2 规则2:LOCAL_PREF

LOCAL_PREF 是 BGP 中最常用的路径控制工具,用于控制离开 AS 的流量出口:

特性 说明
作用范围 AS 和 Confederation 内部传递,不传递给标准 eBGP Peer
默认值 100
优选方向 越大越优
使用场景 选择离开 AS 的最佳出口
# 通过路由策略设置LOCAL_PREF
route-policy SET-LP permit node 10
 if-ip-address prefix-list ALL-ROUTES
 apply local-preference 200

# 通过default-lp设置全局默认值
bgp 100
 default-lp 150

# 应用到特定Peer
bgp 100
 peer 2.2.2.2 route-policy SET-LP import

3.3 规则3:AS_PATH 长度

AS_PATH 长度比较是 BGP 默认的选路标准:

特性 说明
比较内容 AS_PATH 中 AS 号的个数(非字节长度)
优选方向 AS_PATH 越短越优
AS_SET 计数 AS_SET 中的 AS 号只计为 1 个

AS_PATH Prepending 技巧:通过人为追加 AS 号使路径"变长",从而降低该路径的优先级:

# 在出口路由器上配置AS_PATH Prepending
route-policy APPEND-AS permit node 10
 apply as-path 200 200 200 additive

bgp 100
 peer 2.2.2.2 route-policy APPEND-AS export
 # 配置后,出方向路由的AS_PATH增加三个200,路径变长,不被优选

3.4 规则5:MED(多出口判别器)

MED 用于建议进入 AS 的最佳入口:

特性 说明
作用范围 默认仅在相邻 AS 之间传递
默认值 0
优选方向 越小越优(标准 RFC,华为 VRP 现代版本遵循标准)
比较前提 仅来自同一相邻 AS 的路由才比较 MED

MED 比较的特殊规则: - 只有来自同一相邻 AS 的多条路由才比较 MED 值 - 来自不同相邻 AS 的路由,默认不比较 MED

规则5:MED(多出口判别器) - 图示

R1 从 AS 200 学到两条路由(来自 R2 MED=100 和 R3 MED=50),比较 MED:MED=50 优先(MED 越小越优)。

3.5 规则7:IGP Metric to Next_Hop

比较到达各路由 Next_Hop 的 IGP Cost,Next_Hop 不可达的路由不参与比较(被标记为 Invalid):

特性 说明
比较内容 IGP 到达 Next_Hop 的度量值
优选方向 IGP Cost 越小越优
前提 Next_Hop 必须可达,否则路由为 Invalid

四、实战配置/案例分析

4.1 调试 BGP 选路过程

# 查看BGP选路详情(单条路由)
display bgp routing-table 10.1.1.0 verbose
  Path id: 1, Packet-based weight: 0
  NextHop: 2.2.2.2
  MED: 0, LOCAL_PREF: 100, PrefVal: 0
  AS_PATH: 200 I
  PathState: E-BGP Peer

# 查看多条候选路由(对比选路)
display bgp routing-table 10.1.1.0 all-path
  *表示Best路径,>表示Valid路径
  *> 10.1.1.0/24  2.2.2.2   MED:0   LP:200  AS_PATH:200 I    # Best
  >  10.1.1.0/24  3.3.3.3   MED:0   LP:100  AS_PATH:200 I    # Valid but not Best

# 查看BGP选路过程详情
display bgp routing-table 10.1.1.0 best-path

4.2 案例分析:利用 LOCAL_PREF 控制出口

场景:AS 100 有两个出口连接到 AS 200,希望大部分流量通过 R1(主出口),R2(备份出口)仅在 R1 故障时启用。

案例分析:利用 LOCAL_PREF 控制出口 - 图示

配置:

# 在RR上配置:来自R1的路由LOCAL_PREF=200,来自R2的为默认100
route-policy MAIN-EXIT permit node 10
 if-ip-address prefix-list ALL-ROUTES
 apply local-preference 200

bgp 100
 peer R1-IP route-policy MAIN-EXIT import
 # R2的LOCAL_PREF保持默认100
 # 所有经过RR学习到的路由,来自R1的LP=200,来自R2的LP=100
 # 选路规则2:LOCAL_PREF越大越优,因此R1出口被优选

4.3 案例分析:利用 AS_PATH Prepending 影响选路

场景:在没有 LOCAL_PREF 配置权限的情况下(如多租户环境),通过 AS_PATH Prepending 使某条路径不被优选。

# 在出口路由器上配置AS_PATH Prepending
route-policy LOW-PRIORITY permit node 10
 apply as-path 100 100 100 additive

bgp 100
 peer 3.3.3.3 route-policy LOW-PRIORITY export

配置后,该路由的 AS_PATH 变为 100 100 100 100(增加了三个 AS 100),在规则 3(AS_PATH 长度)的比较中不占优势。

4.4 案例分析:MED 比较陷阱

故障现象:AS 100 从 AS 200 和 AS 300 分别学到路由,虽然 AS 300 设置了对 AS 100 更优的 MED 值,但 AS 100 仍然选择经过 AS 200 的路由。

排查: - AS 100 从 AS 200 学到的路由 MED=50 - AS 100 从 AS 300 学到的路由 MED=100 - MED 比较的前提:仅当多条路由来自同一相邻 AS 时才比较 MED - 这里两条路由来自不同 AS(200 和 300),MED 不参与比较

解决:

# 如果需要比较不同AS的MED值,需要配置compare-med-confederate
bgp 100
 compare-med-confederate    # 华为:比较来自不同AS的MED
 # 注意:此配置不符合标准,仅在特定场景下使用

五、总结

优先级 最常用规则 调优方式 典型场景
0 PrefVal 路由策略设置 华为设备强制优选
2 LOCAL_PREF 路由策略设置LOCAL_PREF 控制出口选择
3 AS_PATH长度 AS_PATH Prepending 降低某路径优先级
4 Origin network vs import-route 优先使用network宣告
5 MED 设置MED值 建议入口选择
7 IGP Cost 调整IGP Cost Next_Hop可达性优化

思考

  1. BGP 的选路规则为什么按特定顺序排列?如果改变规则顺序(如将 MED 放在 AS_PATH 之前比较),会对全网路由收敛产生什么影响?
  2. LOCAL_PREF 和 MED 都可以影响 BGP 选路,但它们的作用方向和传递范围完全不同。请用一句话概括两者的本质区别。
  3. 为什么 BGP 选路的第一条规则(规则0/1)不是比较度量值,而是比较 PrefVal 和路由类型?这与 IGP 的选路逻辑有何本质不同?

下篇预告:第86篇:BGP 同步规则(历史与现状)