第164篇:MP-BGP 在 L3VPN 中的角色
关键词
MP-BGP、VPNv4、地址族、下一跳、标签分配、BGP 扩展属性、路由反射器
一、MP-BGP 为什么是 L3VPN 的核心
1.1 传统 BGP 的局限
普通 BGP(BGP-4)只能传递 IPv4 单播路由,无法解决 L3VPN 的核心需求:
| 需求 | 传统 BGP 是否支持 | 问题 |
|---|---|---|
| 传递 VPNv4(RD+IPv4)地址 | ❌ | BGP 只识别 IPv4 地址 |
| 携带 MPLS 标签 | ❌ | BGP 没有标签字段 |
| 携带 VPN 属性(RT) | ❌ | BGP 标准属性中无 RT |
| 区分多个地址族 | ❌ | 只有一个 IPv4 单播地址族 |
1.2 MP-BGP 的扩展
MP-BGP(Multiprotocol BGP) 通过 RFC 4760(Multi-Protocol Extensions)扩展了 BGP,使其能够:
- 支持多种地址族——通过 AFI/SAFI 字段
- 传递 VPNv4 路由——AFI=1, SAFI=128
- 携带 MPLS 标签——通过 MP_REACH_NLRI 中的标签
- 携带扩展团体属性——RT 是扩展团体属性的一种
BGP Update 报文(MP-BGP for VPNv4):
┌──────────────────────────────────────────────┐
│ MP_REACH_NLRI(0x0E) │
│ ├─ AFI=1(IPv4) │
│ ├─ SAFI=128(MPLS Labeled VPN) │
│ ├─ Next Hop(PE 的 Loopback 地址) │
│ └─ NLRI = [Label: VPN 标签][RD][IPv4 Prefix]│
│ │
│ Extended Communities(RT) │
│ └─ RT: 100:1 │
│ │
│ Other BGP Attributes:AS Path, Local Pref... │
└──────────────────────────────────────────────┘
二、VPNv4 地址族
2.1 AFI/SAFI 组合
| AFI | SAFI | 说明 |
|---|---|---|
| 1(IPv4) | 1(Unicast) | 传统 IPv4 单播 |
| 1(IPv4) | 128(MPLS VPN) | VPNv4(L3VPN 使用) |
| 2(IPv6) | 128(MPLS VPN) | VPNv6 |
| 25(L2VPN) | 70(EVPN) | EVPN |
2.2 华为设备上的 VPNv4 配置
# 在 PE 之间建立 VPNv4 对等体
bgp 100
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
#
ipv4-family vpnv4 # 进入 VPNv4 地址族
peer 2.2.2.2 enable # 使能 VPNv4 邻居
peer 2.2.2.2 label-route-capability # 携带 MPLS 标签
peer 2.2.2.2 route-reflector-client # RR 客户端(可选)
2.3 验证 VPNv4 邻居
<PE1> display bgp vpnv4 all peer
BGP local router ID : 1.1.1.1
Local AS number : 100
Total number of peers : 1
Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State
2.2.2.2 4 100 123 145 0 00:12:34 Established
三、MP-BGP 中的标签分配
3.1 标签分配机制
在 L3VPN 中,MP-BGP 为每条 VPNv4 路由分配一个VPN 标签(内层标签):
PE1 生成 VPNv4 路由:
VPNv4 路由:100:1:10.0.0.0/24
内层标签:15392(PE1 本地分配的 VPN 标签)
RT:100:1
下一跳:1.1.1.1(PE1 的 Loopback)
PE1 通过 MP-BGP Update 发送给 PE2
3.2 双层标签转发
数据包从 CE1 到 CE2:
CE1 → PE1(普通 IP 包)
│
PE1(Ingress PE):
│ 查 VRF-A 路由 → 下一跳 PE2
│ 查找 PE2 的 VPN 标签 → 15392(内层标签)
│ 查找 PE2 的 LDP 标签 → 300(外层标签)
│ Push 标签栈:{300(LDP), 15392(VPN)}
│
P(核心路由器):
│ 只交换外层 LDP 标签
│ 内层 VPN 标签完全透明
│
PE2(Egress PE):
│ PHP 弹出外层标签 → 看到内层标签 15392
│ 查标签 → 对应 VRF-A
│ 弹出 VPN 标签 → 恢复 IP 包
│ 查 VRF-A 路由 → 转发到 CE2
│
CE2(普通 IP 包)
3.3 标签分配 vs LDP
| 对比 | LDP | MP-BGP(VPN 标签) |
|---|---|---|
| 标签用途 | 外层隧道标签 | 内层 VPN 标识标签 |
| 分发范围 | 所有 LSR | PE 之间 |
| 对应 FEC | IGP 路由 | VPNv4 路由 |
| 标签空间 | 平台/接口标签空间 | VRF 标签空间 |
四、下一跳处理
4.1 下一跳属性
L3VPN 中,MP-BGP 的下一跳属性设置为发布该路由的 PE 的 Loopback 地址:
PE1 发布的 VPNv4 路由:
RD:100:1:10.0.0.0/24
Next Hop: 1.1.1.1(PE1 Loopback) ← 不是 CE 的 IP
Label: 15392
PE2 收到后:
- 下一跳是 1.1.1.1(PE1)
- 需要一条到 1.1.1.1 的 LDP LSP
- LDP LSP 提供外层标签
4.2 为什么下一跳必须是 PE 的 Loopback
原因 1:MPLS 转发需要
PE2 → PE1 的流量需要走 MPLS LSP
Loopback 地址是 LSR ID,关联 LDP 标签
原因 2:避免 BGP 路由黑洞
如果下一跳是 CE 的接口 IP
P 路由器可能没有到该 IP 的路由
→ 黑洞
原因 3:高可用
Loopback 地址不受单个接口故障影响
即使 PE1 的某个接口 Down,Loopback 依然可达
五、路由反射器(RR)在 L3VPN 中的应用
5.1 为什么需要 RR
在全网状 MP-BGP 环境中,N 个 PE 之间需要建立 N(N-1)/2 个 IBGP 会话:
4 个 PE:需要 6 个 IBGP 会话
10 个 PE:需要 45 个 IBGP 会话
50 个 PE:需要 1225 个 IBGP 会话 → 不可扩展!
使用 路由反射器(RR) 解决:
┌─────────┐
│ RR │
└────┬────┘
/ | | \
/ | | \
| PE1 | PE2 | PE3 | PE4 | |||
|---|---|---|---|---|---|---|
每个 PE 只与 RR 建立一个 IBGP 会话 RR 负责将路由反射给所有客户端
5.2 RR 配置示例
# RR 配置
bgp 100
peer 1.1.1.1 as-number 100
peer 2.2.2.2 as-number 100
peer 3.3.3.3 as-number 100
peer 4.4.4.4 as-number 100
#
ipv4-family vpnv4
peer 1.1.1.1 enable
peer 1.1.1.1 route-reflector-client # 标记为 RR 客户端
peer 2.2.2.2 enable
peer 2.2.2.2 route-reflector-client
peer 3.3.3.3 enable
peer 3.3.3.3 route-reflector-client
peer 4.4.4.4 enable
peer 4.4.4.4 route-reflector-client
5.3 RR 的防环机制
RR 通过 Originator ID 和 Cluster List 属性防环:
┌─────────┐
│ RR(Cluster 1) │
└────┬────┘
│
┌────┴────┐
│ PE1 │
└────┬────┘
│ Originator ID = PE1
│
┌────┴────┐
│ RR │
│ (Cluster 2) │
└─────────┘
RR 收到路由后:
检查 Cluster List 是否包含自己的 Cluster ID
包含 → 丢弃(防环)
不包含 → 添加自己的 Cluster ID → 转发
六、MP-BGP 的属性在 L3VPN 中的应用
6.1 标准 BGP 属性
| 属性 | 在 L3VPN 中的用途 |
|---|---|
| AS_Path | 防环 + 选路 |
| Local Preference | VPN 站点路由优先级 |
| MED | 多出口选择 |
| Community | 路由标记(配合 RT 使用) |
| Next Hop | PE 的 Loopback 地址 |
6.2 L3VPN 特有的扩展属性
| 属性 | 含义 | 作用 |
|---|---|---|
| Route Target | VPN 导入/导出策略 | 控制路由分发 |
| Site of Origin | 路由起源标识 | 防环(站点级) |
| Label | MPLS VPN 标签 | 标识 VPN |
| Source AS | CE 侧 AS | 多 AS 场景防环 |
七、MP-BGP L3VPN 的选路过程
PE2 从两个 PE 收到同一 VPNv4 路由:
PE1 ────── 10M 链路 ────── PE3
│ │
│ 路由: 100:1:10.0.0.0/24│
│ AS Path: 65001 │
│ Local Pref: 100 │
│ MED: 100 │
│ │
│ 路由: 100:1:10.0.0.0/24│
│ AS Path: 65001 │
│ Local Pref: 200 │ ★ 更高 Local Pref → 选 PE3
│ MED: 50 │
│ │
└──────────────────────────┘
PE2 选路:
1. 忽略不可达的下一跳
2. 比较 Local Preference(越大越优):200 > 100 → 选 PE3
3. 如果 Local Pref 相同 → 比较 AS Path 长度
4. 如果仍相同 → 比较 MED(越小越优)
八、总结
| 知识点 | 核心要点 |
|---|---|
| MP-BGP | 支持多地址族,通过 AFI/SAFI 标识路由类型 |
| VPNv4 SAFI | SAFI=128,用于 MPLS L3VPN |
| VPN 标签 | MP-BGP 为每条 VPNv4 路由分配的标签 |
| 下一跳 | PE 的 Loopback 地址,关联 LDP LSP |
| 双层标签 | 外层 LDP + 内层 VPN,P 节点只交换外层 |
| RR | 路由反射器,减少 IBGP 会话数量 |
| 扩展属性 | RT、SoO、Label 等,L3VPN 特有属性 |
九、思考
- MP-BGP 与普通 BGP 的核心区别是什么?AFI 和 SAFI 的作用是什么?
- VPNv4 地址族对应的 AFI/SAFI 值是多少?
- MP-BGP 为什么需要为 VPNv4 路由分配标签?这个标签在转发中起什么作用?
- 为什么 MP-BGP 的下一跳要设置为 PE 的 Loopback 地址?
- 路由反射器(RR)在 L3VPN 中解决了什么问题?它的防环机制是什么?
下篇预告:第165篇《PE-CE 路由协议选择:静态/OSPF/BGP》——PE 和 CE 之间如何交换路由?各种路由协议的适用场景和优缺点分析。