十年前我第一次接触数据中心网络时,传统VLAN技术还能勉强应付需求。但随着云计算和虚拟化技术的普及,一个机柜里塞满几十台虚拟机成为常态,传统网络的局限性就暴露无遗。记得有次客户扩容云平台,当虚拟机数量突破4000时,核心交换机的MAC地址表直接溢出,导致整个网络瘫痪。这就是VXLAN技术诞生的背景。
VXLAN(Virtual eXtensible Local Area Network)本质上是一种网络虚拟化技术,它能在现有三层IP网络之上叠加出虚拟的二层网络。与VLAN仅有的4096个标识相比,VXLAN的24位VNI(VXLAN Network Identifier)支持1600多万个隔离网络,这个数量级完全能满足现代数据中心的需求。
在实际项目中,我发现VXLAN主要解决三大痛点:
刚开始配置VXLAN时,我被各种缩写搞得头晕。后来在华为CE12800交换机上反复实验,终于理清了这些关键组件的关系。下面用实际配置片段说明:
VTEP(VXLAN Tunnel Endpoint)是隧道的起点和终点,而NVE(Network Virtualization Edge)是执行封装解封装的实体。在华为设备上,我们首先需要创建NVE接口:
bash复制interface Nve1
source-address 192.168.100.1 # 使用Loopback地址
vni 5000 head-end peer-list 192.168.100.2
这里192.168.100.1就是本端VTEP地址。我习惯用Loopback地址,因为它永远在线。曾经有项目用物理接口地址做VTEP,结果链路切换导致隧道中断,这个坑希望大家避开。
VNI是虚拟网络标识,BD(Bridge Domain)则是本地转发实体。它们的绑定关系决定了报文如何转发:
bash复制bridge-domain 10
vxlan vni 5000
interface GigabitEthernet1/0/1.1 mode l2
encapsulation dot1q vid 10
bridge-domain 10
这个配置把VNI 5000、BD 10和物理接口关联起来。注意BD具有本地意义,两端设备可以用不同BD号,只要VNI一致就能通信。有次排查故障时发现两端BD号不同,其实不影响功能,白白浪费两小时。
去年给某电商部署VXLAN时,我们选择了集中式网关方案。这里分享具体配置步骤,包含很多容易出错的细节。
VXLAN依赖底层IP网络(Underlay),建议先部署OSPF或IS-IS:
bash复制router id 192.168.100.1
interface LoopBack0
ip address 192.168.100.1 255.255.255.255
ospf 1
area 0
network 192.168.100.1 0.0.0.0
network 10.1.1.0 0.0.0.255
关键点:确保所有VTEP的Loopback地址能互通。有次项目因ACL阻拦OSPF邻居建立,导致隧道无法联通,后来加了这条诊断命令:
bash复制display ospf peer # 检查邻居状态
以集中式网关为例,Spine设备作为三层网关:
bash复制# Leaf1配置
interface Nve1
source-address 192.168.100.1
vni 10000 head-end peer-list 192.168.100.3 # 指向Spine
# Spine配置
interface Nve1
source-address 192.168.100.3
vni 10000 head-end peer-list 192.168.100.1
vni 10000 head-end peer-list 192.168.100.2
bridge-domain 100
vxlan vni 10000
vbdif 100
ip address 10.1.1.254 24
特别注意:VBDIF接口相当于VLANIF,是实现跨子网通信的关键。某次故障因忘记配VBDIF,导致虚拟机只能同子网通信。
在华为ENSP模拟器上测试时,我整理了这些常见问题现象和解决方法:
症状:display vxlan tunnel显示状态为down
排查步骤:
bash复制ping -a 192.168.100.1 192.168.100.2
bash复制display current-configuration interface nve1
bash复制display vxlan peer
曾遇到MTU不匹配导致分片丢弃,解决方法:
bash复制interface GigabitEthernet1/0/1
jumboframe enable 9000
典型原因:三层网关未正确配置或路由缺失
诊断命令:
bash复制display vxlan vni # 检查VNI类型
display ip routing-table vpn-instance # 查看网关路由
有个经典案例:客户配置了二层VNI却想跨子网通信,其实需要额外配置三层VNI:
bash复制evpn
vni 10000
route-distinguisher 100:1
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
最后分享个真实排错经历:某次割接后部分虚拟机失联,最终发现是防火墙拦截了UDP 4789端口。所以部署时一定要检查所有安全策略,特别是跨安全域的情况。