第255篇:VXLAN 在数据中心的应用场景

关键词:VXLAN、VTEP、VNI、虚拟机迁移、多租户隔离、VXLAN头、UDP 4789、华为CloudEngine


一、引言

第254篇中,我们深入分析了传统VLAN在数量、扩展性和控制面方面的局限性,并指出Overlay网络是突破这些限制的方向。在所有Overlay技术中,VXLAN(Virtual Extensible LAN)以其简单的设计哲学和强大的功能集合,成为数据中心Overlay网络的事实标准。

VXLAN由VMware主导设计,于2013年以IETF RFC 7348的形式标准化。其核心思想极其简单:将原始二层以太网帧封装在UDP报文中,通过IP网络传输。这种"隧道中套隧道"的设计使得Overlay网络完全独立于Underlay网络的拓扑和协议,实现了逻辑与物理的彻底解耦。

本文将深入剖析VXLAN的技术细节,包括报文封装格式、VTEP的工作机制、VNI的分配策略,并结合华为CloudEngine设备给出典型应用场景的配置示例和故障案例。

二、VXLAN 报文封装格式

2.1 封装结构

VXLAN封装在原始以太网帧的外侧包裹了三层包头:外层以太网头、外层IP头和VXLAN头,并通过UDP协议在Underlay网络上传输。

VXLAN封装在原始以太网帧的外侧包裹了多层包头,按从外到内的顺序依次为:

层次(从外到内) 头部名称 大小 关键字段
1(最外层) Outer Ethernet Header 14字节 目的MAC=远端VTEP, 源MAC=本地VTEP
2 Outer IPv4 Header / IPv6 Header 20字节(IPv4) / 40字节(IPv6) 目的IP=远端VTEP Lo, 源IP=本地VTEP Lo, Proto=UDP(17)
3 UDP Header 8字节 目的端口=4789, 源端口=随机
4 VXLAN Header 8字节 Flags(I位=1), VNI(24bit)
5(最内层) Inner Ethernet Frame ≤1450字节 原始二层帧(含VM的MAC/IP)

2.2 VXLAN 头部字段详解

VXLAN头部为8字节(64比特),其结构如下:

比特位 字段名 说明
0~7 Flags 第24位(I位)为1表示VNI字段有效
8~23 Reserved 保留字段,必须为0
24~47 VNI VXLAN Network Identifier,24比特,支持16777215个逻辑网络
48~63 Reserved 保留字段,必须为0

VNI是VXLAN的租户标识符,等价于VLAN ID但范围大得多。VNI为24比特,可分配16777215个唯一的逻辑网络(2^24 - 1)。

2.3 关键设计选择解析

为什么选择UDP而非其他传输协议?

VXLAN选择UDP作为传输协议,基于以下考量: - 无需连接建立和拆除的开销,适合大规模短生命周期隧道 - 不触发TCP的流量控制和拥塞控制,避免与应用层的TCP产生冲突 - 大多数防火墙对UDP 4789端口放行,NAT设备也能正确转发UDP报文 - 支持组播(Multicast),便于广播/组播报文的泛洪

为什么选择4789端口?

IETF正式分配UDP 4789作为VXLAN的标准端口。选择此端口而非其他端口的原因是:4789是一个高位端口(>49152以下为IANA注册端口范围),不会被操作系统动态分配给本地进程,同时也避开了常用服务端口。

三、VTEP 工作原理

3.1 VTEP 的角色

VTEP(VXLAN Tunnel Endpoint)是VXLAN网络的终结点,负责Overlay报文和Underlay报文之间的封装与解封装。在Spine-Leaf架构中,VTEP通常部署在Leaf交换机上。

VTEP 的角色 - 图示

3.2 VTEP 的数据面流程

封装流程(Encapsulation): 1. Leaf收到来自VM的原始以太网帧 2. 根据目的MAC地址查询本地MAC↔VTEP映射表 3. 如果目的MAC对应的VTEP是本Leaf(本地交付),直接转发到下联端口 4. 如果目的MAC对应的VTEP是远端Leaf,进行VXLAN封装: - 外层目的IP = 远端VTEP的Loopback IP - 外层源IP = 本VTEP的Loopback IP - 外层目的UDP端口 = 4789 - VXLAN头中的VNI = 源端口所属的VNI 5. 将封装后的报文通过Underlay IP网络发送

解封装流程(Decapsulation): 1. Leaf收到目的端口为4789的UDP报文 2. 解析VXLAN头,提取VNI 3. 查找VNI对应的逻辑网络(VRF或VLAN) 4. 剥离外层包头,得到原始以太网帧 5. 根据原始帧的目的MAC地址进行二层转发

3.3 VTEP 地址的选择

VTEP的Loopback接口地址作为VXLAN隧道的端点IP,具有以下优势: - 冗余性:即使某个物理链路故障,Loopback地址仍然可达 - ECMP:通过BGP或IGP将Loopback地址发布到所有Spine,形成多路径路由 - 稳定性:不依赖任何物理接口的UP/DOWN状态

四、VXLAN 典型应用场景

4.1 场景一:虚拟机热迁移(Live Migration)

需求:虚拟机从一台物理服务器迁移到另一台物理服务器时,保持IP地址和MAC地址不变。

在传统VLAN架构中,虚拟机迁移后如果跨Leaf,需要通过VLAN跨Leaf扩展(如M-LAG),扩展范围有限。在VXLAN架构中,虚拟机只需保持在同一个VNI中,无论迁移到哪个Leaf下,其通信不受影响。

# ============================================
# 场景:虚拟机热迁移后的 VXLAN 通信
# VM从 Leaf-01 迁移到 Leaf-03
# ============================================

# Leaf-01 (迁移前的 VTEP)
vxlan vtep 10.255.254.1
 ip vpn-instance VRF-TenantA
  vxlan vni 10001
   destination-ip 10.255.254.2
   destination-ip 10.255.254.3
   destination-ip 10.255.254.4

# Leaf-03 (迁移后的 VTEP)
# 虚拟机迁移后,BGP EVPN 自动学习新的 MAC↔VTEP 映射
# 旧 VTEP (Leaf-01) 上的 MAC 表项自动老化删除
# 新 VTEP (Leaf-03) 上学习到该 VM 的 MAC 地址

4.2 场景二:多租户网络隔离

需求:在共享的物理基础设施上,为不同租户提供完全隔离的网络环境。

VXLAN通过VNI实现租户隔离。每个租户分配独立的VNI,不同VNI之间的报文互不可达(除非通过路由泄露或NAT)。即使两个租户使用相同的IP地址段(如192.168.1.0/24),只要VNI不同,就不会发生地址冲突。

# ============================================
# 多租户 VXLAN 隔离配置
# ============================================

# 租户 A - VNI 10001
ip vpn-instance TENANT-A
 vpn-instance-mode general
 ipv4-family
vxlan vtep 10.255.254.1
 ip vpn-instance TENANT-A
  vxlan vni 10001

# 租户 B - VNI 10002 (使用相同 IP 网段也不会冲突)
ip vpn-instance TENANT-B
 vpn-instance-mode general
 ipv4-family
vxlan vtep 10.255.254.1
 ip vpn-instance TENANT-B
  vxlan vni 10002

4.3 场景三:跨数据中心二层延伸

需求:将同一VLAN延伸至另一个地理分散的数据中心,实现跨DC的虚拟机通信。

VXLAN隧道的Underlay传输距离不受限制。只要两个DC之间的Underlay网络具备IP可达性(通过WAN或DCI链路),VXLAN隧道就能跨越任意地理距离建立。

# DC1 Leaf-01 VTEP
vxlan vtep 10.255.254.1
 ip vpn-instance VRF-DC-Ext
  vxlan vni 20001
   destination-ip 203.0.113.10  # DC2 VTEP 的公网/专线地址

# DC2 Leaf-01 VTEP
vxlan vtep 203.0.113.10
 ip vpn-instance VRF-DC-Ext
  vxlan vni 20001
   destination-ip 10.255.254.1  # DC1 VTEP 地址

4.4 场景四:容器网络 Overlay

需求:Kubernetes集群中,Pod跨Node通信时需要Overlay网络。

虽然容器网络更多使用Calico(BGP直连)、Flannel(VXLAN或host-gw)或Cilium(eBPF)等专用方案,但其底层隧道技术很多也基于VXLAN或类似的Overlay封装。

五、VXLAN 的广播/组播/未知单播处理

5.1 问题描述

在二层网络中,广播报文(FF:FF:FF:FF:FF:FF)、组播报文和未知单播报文(目的MAC不在本地MAC表中)需要泛洪到所有同属一个逻辑网络的其他VTEP。但VXLAN隧道是点到点的,如何在点到点的隧道上实现泛洪?

5.2 解决方案对比

方案 机制 优点 缺点
IP组播(Multicast) Underlay配置PIM,VTEP加入VNI对应的组播组 扩展性好,自动发现 Underlay需部署PIM,配置复杂
头端复制(Head-end Replication) 源VTEP逐个向所有远端VTEP发送复制报文 简单,无需组播 浪费带宽,VTEP数多时效果差
BGP EVPN(Inclusive Multicast) 通过EVPN Type2/Type3路由自动学习VTEP列表 无需组播,自动发现 需要BGP EVPN控制面
静态VTEP配置 手动在每个VTEP上配置远端VTEP IP 最简单 不自动,扩展性差

5.3 BGP EVPN Inclusive Multicast 机制

BGP EVPN通过Type3路由(Inclusive Multicast Ethertag Route)实现VTEP自动发现。每个VTEP为每个VNI发布一条Type3路由,其他VTEP通过BGP学习到同一VNI的所有VTEP列表。当需要泛洪时,源VTEP根据VTEP列表进行头端复制。

# BGP EVPN 自动泛洪 - 无需手动配置远端 VTEP
bgp 65100
 #
 address-family evpn
  # 使能 EVPN Inclusive Multicast
  evpn inclusive-multicast

六、故障案例:VXLAN隧道建立成功但虚拟机无法跨Leaf通信

6.1 故障现象

某企业数据中心部署了4Spine×8Leaf的Spine-Leaf架构,使用静态VXLAN方案。Leaf之间VXLAN隧道状态显示正常(UDP 4789端口可达),但跨Leaf的虚拟机无法互相ping通。同Leaf内的虚拟机通信正常。

6.2 排查过程

第一步:检查VXLAN隧道状态

# 在 Leaf-01 上检查 VXLAN 隧道
Leaf-01> display vxlan vni 10001 peer
  VNI      Peer IP           Tunnel Status
  10001    10.255.254.2      Up
  10001    10.255.254.3      Up
  10001    10.255.254.4      Up

隧道状态均为Up。

第二步:检查MAC地址表

# 在 Leaf-01 上查看 MAC 地址表
Leaf-01> display mac-address vlan 100
  Mac Address       VLAN   Port                Type
  00:50:56:xx:xx:01  100   10GE1/0/5           Dynamic
  00:50:56:xx:xx:02  100   10GE1/0/6           Dynamic
# 注意:没有远端 VM 的 MAC 地址

# 在 Leaf-02 上查看 MAC 地址表
Leaf-02> display mac-address vlan 100
  Mac Address       VLAN   Port                Type
  00:50:56:xx:xx:10  100   10GE1/0/3           Dynamic
  00:50:56:xx:xx:11  100   10GE1/0/4           Dynamic

问题定位:各Leaf只学到了本地VM的MAC地址,没有学到远端VM的MAC。这意味着VXLAN的MAC学习没有正常工作。

第三步:分析根因

在静态VXLAN方案中,MAC地址的学习依赖两种机制: 1. 主动学习:远端VM发送报文时,源VTEP在解封装后学习目的VTEP的MAC地址 2. ARP泛洪:VM发送ARP请求时,VTEP将ARP报文封装在VXLAN中泛洪到所有远端VTEP

检查发现,Underlay网络中的ACL策略阻止了UDP 4789端口以外的所有组播和广播流量。虽然VXLAN封装后的单播报文(UDP 4789)可以通过,但ARP泛洪报文被Underlay的ACL丢弃了。

6.3 解决方案

# 方案1:在 Underlay 的 Spine 上放行 VXLAN 泛洪流量
# 如果使用 IP 组播方式泛洪,需确保 PIM 组播路由正常
# 如果使用头端复制,需确保单播 VXLAN 报文正常转发

# 检查 Spine 上的 ACL
Spine-01> display acl all
# 发现 ACL 3000 阻止了非 UDP 4789 的流量
# 修正 ACL,放行 VXLAN 流量
acl 3000
 rule 5 permit udp destination-port eq 4789
 rule 10 permit ip  # 放行其他 IP 流量
 rule 100 deny ip

# 方案2:迁移到 BGP EVPN VXLAN(推荐)
# BGP EVPN 通过单播 BGP 分发 MAC 信息,不依赖泛洪

七、总结

应用维度 VXLAN解决方案 核心价值
虚拟机热迁移 VNI跟随VM,IP/MAC不变 迁移零中断
多租户隔离 VNI隔离,支持IP地址重叠 安全隔离,地址复用
跨DC二层延伸 隧道跨越WAN/DCI 统一网络管理
容器网络 CNI插件集成VXLAN 动态网络编排
大二层扩展 突破VLAN 4094限制 灵活扩展

思考

  1. VXLAN使用UDP 4789端口传输,而UDP是不可靠传输协议。如果Underlay网络出现报文丢失,对VXLAN承载的TCP业务有什么影响?VXLAN本身是否需要可靠性保障?
  2. 在大规模VXLAN部署中,VTEP数量可能达到数百个。头端复制(Head-end Replication)方式的广播泛洪会产生O(N²)的报文复制开销。如何解决这一问题?
  3. VXLAN的封装开销为50字节(IPv4),如果Underlay网络使用IPv6,封装开销将增加20字节达到70字节。这对MTU有什么影响?

下篇预告:第256篇:DC EVPN 实现 VXLAN 控制面