第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 隧道关联

八、思考

  1. VXLAN 数据面学习(Flood-and-Learn)有哪些主要问题?为什么在大规模数据中心不可行?
  2. EVPN Type 2 路由包含哪些关键字段?收到一条 Type 2 路由后,接收方 VTEP 会做哪些处理?
  3. EVPN Type 3(IMET)路由的作用是什么?如何使用 Ingress Replication 替代 IP 组播?
  4. ARP 代理在 EVPN 中如何工作?VTEP 收到一个跨 Leaf 的 ARP 请求时,不需要泛洪即可回复的原理是什么?
  5. 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 机制。