第256篇:DC EVPN 实现 VXLAN 控制面
关键词
EVPN、MP-BGP、VXLAN 控制面、Type 路由、VTEP 发现、MAC/IP 分发、BUM 优化、数据面学习替代
一、VXLAN 控制面演进
1.1 数据面学习的局限
最早的 VXLAN 部署使用数据面学习(Flood-and-Learn)模式:
数据面学习的问题:
问题 1:泛洪依赖 VTEP 不知道远端 VM 的位置 第一个数据包必须泛洪到所有 VTEP
VTEP1 收到 VM A 发往 VM B 的帧 MAC B 不在表中 → 泛洪 将帧封装后发送到所有远端 VTEP 占用大量带宽(每个未知帧都泛洪)
问题 2:组播依赖 泛洪需要 IP 组播或 Head-End Replication 组播:需要网络支持 IGMP 和 PIM 组播在 WAN/DCI 场景经常不可用 Head-End Replication:CPU 开销大
问题 3:学习效率低 每台 VM 第一次通信都需要泛洪 大量 VM(10000+)的首次通信 → 泛洪风暴
问题 4:无策略控制 数据面学习无法应用路由策略 无法过滤/控制哪些 MAC 可以学习
1.2 EVPN 作为 VXLAN 控制面
EVPN(Ethernet VPN,RFC 7432) 使用 MP-BGP 作为 VXLAN 的控制面:
EVPN 控制面 vs 数据面学习:
| 功能 | 数据面学习 | EVPN 控制面 |
|---|---|---|
| VTEP 发现 MAC 学习 ARP 处理 组播处理 多租户 策略控制 收敛速度 扩展性 | 手工/组播 泛洪学习 ARP 广播 IGMP/PIM 手工对应 无 慢(泛洪) 差(泛洪风暴) | BGP 自动发现 BGP Type-2 路由 BGP Type-2 + ARP代理 BGP Type-3(IMET) RT 自动控制 Route-map/Filter 快(BGP 秒级收敛) 好(BGP 控制面) |
二、EVPN 路由类型详解
2.1 五种基本路由类型
EVPN NLRI(Network Layer Reachability Information)类型:
| 类型编号 | 路由名称 |
|---|---|
| Type 1 Type 2 Type 3 Type 4 Type 5 | Ethernet Auto-Discovery(AD)路由 MAC/IP Advertisement 路由 Inclusive Multicast Ethernet Tag(IMET) Ethernet Segment 路由 IP Prefix 路由 |
2.2 Type 1:Ethernet AD 路由
用途:快速故障收敛、冗余保护
Route Type 1:
Route Distinguisher (RD)
Ethernet Segment Identifier (ESI)
Ethernet Tag ID
VNI
使用场景:
1. 多归接入(Active-Active)的快速收敛
2. ESI 标签分配
3. Aliasing/Backup 路径通告
典型应用:
Leaf1 和 Leaf2 同时连接同一台服务器(MC-LAG)
ESI 标识这个共享的以太网段
一个 Leaf 故障 → 流量切换到另一 Leaf
2.3 Type 2:MAC/IP Advertisement 路由(最常用)
用途:通告 MAC 地址和(可选的)IP 地址
Route Type 2: Route Distinguisher (RD) Ethernet Tag ID MAC Address(6 字节) IP Address(0/4/16 字节,可选) MPLS Label(s) / VNI Next Hop = VTEP IP
示例:
Leaf1 发布 Type 2 路由:
RD: 10.1.1.1:10001 MAC: AA:AA:AA:AA:AA:01 IP: 192.168.1.10 VNI: 10001 Next-Hop: 10.1.1.1 Route-Target: 10001:10001
其他 Leaf 收到此路由后: 将 VM A(MAC AA:AA:AA:AA:AA:01)关联到 VTEP 10.1.1.1 收到目的 MAC 为 AA:AA:AA:AA:AA:01 的帧时 封装为 VXLAN 发送到 10.1.1.1 无需泛洪!
2.4 Type 3:IMET 路由
用途:BUM 流量控制,组播成员自动发现
Route Type 3:
Route Distinguisher (RD)
Ethernet Tag ID
VNI
IP Address(VTEP IP)
PMSI Tunnel Type(Ingress Replication / PIM-SM / PIM-SSM)
使用场景:
VTEP 加入某个 VNI 的 BUM 组
其他 VTEP 知道哪些 VTEP 需要接收 BUM 流量
示例:
Leaf1 发布 Type 3 路由:
VNI: 10001
VTEP: 10.1.1.1
Tunnel Type: Ingress Replication
Leaf2、Leaf3 收到:
知道 Leaf1 是 VNI 10001 的成员
要向 VNI 10001 发 BUM 帧时
Head-End Replication 到所有成员 VTEP
2.5 Type 5:IP Prefix 路由
用途:通告外部 IP 前缀(非 MAC 关联)
Route Type 5:
Route Distinguisher (RD)
Ethernet Tag ID
IP Prefix(192.168.0.0/16)
Gateway IP Address
VNI
使用场景:
1. 数据中心出口路由(默认路由通告)
2. 外部网络接入
3. L3VPN 互通
示例:
出口 Leaf 发布 Type 5 路由:
IP Prefix: 0.0.0.0/0
VNI: 0(默认 VNI)
Next-Hop: 10.0.0.1(出口路由器)
所有 Leaf 收到:
知道默认路由指向出口 Leaf
需要访问外网的流量 → 封装到出口 Leaf
三、EVPN 工作流程
3.1 VTEP 自动发现
EVPN VTEP 发现流程:
Leaf1 Spine Leaf2
(VTEP 10.1.1.1) (VTEP 10.1.1.2)
│ │
│ 1. BGP 邻居建立 │
│◄═══════════ iBGP/EBGP ═════════►│
│ │
│ 2. 发布 Type 3(IMET) │
│ ─── VNI 10001, VTEP 10.1.1.1 ──►│
│◄── VNI 10001, VTEP 10.1.1.2 ────│
│ │
│ 3. 双方知道对方是 VTEP 成员 │
│ │
│ 4. BUM 流量只发给成员 VTEP │
│ │
新增 Leaf3:
Leaf3 加入 → 建立 BGP 邻居 → 发布 Type 3
所有已有 VTEP 自动更新 BUM 组
无需手工配置隧道
3.2 MAC/IP 路由学习
VM A 启动后的路由学习流程:
Leaf1(VTEP 10.1.1.1)上 VM A 启动:
│
│ 1. VM A 发送免费 ARP(Gratuitous ARP)
│ 或 Leaf 数据面学习到 VM A 的 MAC
│
│ 2. Leaf1 触发 EVPN Type 2 更新
│
│ 3. Leaf1 封装 Type 2 路由:
│ RD: 10.1.1.1:10001
│ MAC: AA:AA:AA:AA:AA:01
│ IP: 192.168.1.10
│ VNI: 10001
│ Next-Hop: 10.1.1.1
│
│ 4. 通过 BGP 发送给所有邻居 Leaf
│
│ 5. 每个 Leaf 收到后:
│ - 安装 MAC:AA:AA:AA:AA:AA:01 → VTEP:10.1.1.1
│ - 安装 ARP:192.168.1.10 → MAC:AA:AA:AA:AA:AA:01
│ - 后续发往 VM A 的帧直接封装,无需泛洪
收敛时间:
本端学习:数据面直连学习(微秒级)
EVPN 发送:BGP 更新(毫秒级)
远端安装:BGP 收到后立即安装(毫秒级)
总时间:< 100ms
3.3 ARP 抑制
EVPN 的 ARP 代理功能:
场景:VM A(Leaf1)发送 ARP 请求查询 VM B 的 MAC
传统 VXLAN(无 EVPN):
┌─ Leaf1 收到 ARP 请求 ──────────────────────┐ 1. VTEP 查表:VM B 不在本地 2. 封装为 VXLAN 泛洪到所有远端 VTEP 3. 每个远端 VTEP 解封装 → 泛洪到所有 VM 4. VM B 回复 → 数据面学习 问题:全网泛洪,延迟大
EVPN 控制面:
┌─ Leaf1 收到 ARP 请求 ──────────────────────┐ 1. Leaf1 的 ARP 代理检查控制面表 2. 表中已有:192.168.1.20 → MAC BB:BB:... 3. Leaf1 直接代答 ARP 回复 4. VM A 收到 ARP 回复 无需泛洪!零延迟!
配置: # 开启 ARP 代理 bridge-domain 10001 arp-proxy inner-ip enable
四、EVPN 多协议扩展
4.1 MP-BGP 地址族
EVPN 使用 MP-BGP 的 EVPN 地址族:
address-family evpn
peer 10.1.0.1 enable
peer 10.1.0.1 advertise irb # 通告 IRB 路由
#
#
# 查看 EVPN 路由表
display bgp evpn all routing-table
BGP Local router ID: 10.1.1.1
Local AS number: 65001
Route Distinguisher: 10.1.1.1:10001
Total number of routes: 5
Network Nexthop VNI Label
*> Type2 MAC/IP 10.1.1.1 10001 0
*> Type3 IMET 10.1.1.1 10001 0
*i Type2 MAC/IP 10.1.1.2 10001 0
*i Type3 IMET 10.1.1.2 10001 0
4.2 RT/RD 规划
EVPN 的 RT/RD 与 VNI 映射:
RD(Route Distinguisher):
确保路由唯一性
格式:IP:VNI 或 ASN:VNI
每 VNI 每 VTEP 一个
RT(Route Target):
控制路由收发
Import RT:接收哪些路由
Export RT:发布哪些路由
规划示例:
VNI 10001(租户 A):
Leaf1: RD 10.1.1.1:10001, RT export 10001:10001
Leaf2: RD 10.1.1.2:10001, RT export 10001:10001
import: RT 10001:10001
映射关系:
VNI 10001 ←→ Route-Target 10001:10001 ←→ 租户A
多租户:
租户 B 的 VNI 20001 ←→ RT 20001:20001
租户 A 只收 RT 10001:10001
租户 B 只收 RT 20001:20001
自动隔离
五、EVPN 配置示例
5.1 华为 CloudEngine EVPN 配置
# 全局配置
#
bgp 65001
router-id 10.1.1.1
#
peer 10.1.0.1 as-number 65001 # iBGP 到 Spine(RR)
peer 10.1.0.1 connect-interface LoopBack0
#
l2vpn-family evpn # EVPN 地址族
peer 10.1.0.1 enable
peer 10.1.0.1 reflect-client # Spine 作为 RR
#
#
# VXLAN + EVPN 集成
#
bridge-domain 10001
vxlan vni 10001
evpn encapsulation vxlan # 使用 VXLAN 封装
arp-proxy inner-ip enable # ARP 代理
#
interface Nve1
source 10.1.1.1
vni 10001 head-end peer-list protocol bgp # EVPN 控制面
六、EVPN 的优势总结
EVPN 给 VXLAN 带来的核心能力:
1. 自动化——无需手工配置隧道
新增 Leaf → 自动发现
新增 VNI → 自动发布
2. 高效——消除泛洪
Type 2 替代数据面 MAC 学习
ARP 代理消除跨 VTEP 广播
3. 高性能——快速收敛
BGP 秒级收敛
Type 1 支持快速保护切换
4. 可扩展——大规模部署
BGP 路由反射器
RT 控制按需接收
水平扩展无上限
5. 策略化——丰富控制
Route-map 过滤路由
RT 隔离租户
路由优先级控制
七、总结
| 知识点 | 核心要点 |
|---|---|
| EVPN 角色 | VXLAN 的控制面,替代数据面泛洪学习 |
| 标准 | RFC 7432(EVPN),MP-BGP 承载 |
| Type 1 | 快速故障收敛,多归保护 |
| Type 2 | MAC/IP 路由,核心路由类型 |
| Type 3 | IMET,BUM 组播成员自动发现 |
| Type 5 | IP 前缀通告,外部路由 |
| ARP 抑制 | EVPN 控制面代答,零泛洪 |
| RT/RD | 路由唯一性(RD)和策略控制(RT) |
| 配置 | BGP EVPN 地址族 + VXLAN 隧道关联 |
八、思考
- VXLAN 数据面学习(Flood-and-Learn)有哪些主要问题?为什么在大规模数据中心不可行?
- EVPN Type 2 路由包含哪些关键字段?收到一条 Type 2 路由后,接收方 VTEP 会做哪些处理?
- EVPN Type 3(IMET)路由的作用是什么?如何使用 Ingress Replication 替代 IP 组播?
- ARP 代理在 EVPN 中如何工作?VTEP 收到一个跨 Leaf 的 ARP 请求时,不需要泛洪即可回复的原理是什么?
- RT(Route Target)在 EVPN 中如何实现多租户隔离?如果租户 A 的 VNI 是 10001,租户 B 的 VNI 是 20001,RT 应该如何规划?
下篇预告:第257篇《EVPN Type2/Type3 路由详解》——深入 Type 2 MAC/IP 路由的详细信息提取和 Type 3 BUM 路由的 Head-End Replication 机制。