VLAN的扩展技术VxLAN,是用来解决什么问题的?
VxLAN如何实现跨三层广播报文传递的?
VxLAN相关的各种新概念都是什么意思?
VxLAN具体该怎么配置?
ps:最后有惊喜~
一、vxlan技术背景
vxlan是vlan技术的扩展,那vxlan用在什么场景,在这些场景下,传统vlan存在哪些问题?
vxlan主要用在云数据中心,虚拟机跨三层迁移的场景,首先了解下什么叫虚拟机迁移。
虚拟机迁移,是指在一台物理服务器(server)上运行的虚拟机(vm),因为负载均衡或日常维护等原因,移动到另一台物理机,通俗点理解就是虚拟机搬家,如下图:
虚拟机迁移前

虚拟机迁移后

为了保证虚拟机在迁移的过程中,不中断业务,那就要保持IP地址不变,网关不变,TCP连接不变。这就限制了虚拟机迁移的范围,一定是在一个二层网络内,也就是在一个vlan内,如图:

为了保证网络的稳定性,一个vlan也就是一个广播域往往不会划的很大,这就极大的限制了虚拟机的迁移范围。
在上图中,如果vm迁移范围1的所有服务器都满载了,而vm迁移范围2的物理服务器还有很多空闲算力,就不能合理的利用迁移范围2的算力。
这时就需要跨三层迁移技术,让虚拟机从迁移范围1,到迁移范围2,依然保持IP地址、网关、传输层连接等信息不变。
跨三层迁移技术,就是我们常说的大二层技术,而vxlan是使用最广的跨三层迁移技术,成为事实上的大二层技术标准。
二、Vxlan实现原理
Vxlan技术的原理,本质上是在一个三层互连的网络中,构建一个逻辑上的二层网络,这样就可以实现虚拟机的跨三层,甚至跨数据中心、跨地域的迁移。
如图,应用vxlan后,现在这些物理服务器,表面上是连接在不同的三层网络里,逻辑上是连接在一个相同的大二层交换机上。

那这个“大二层交换机”,是如何构建出来的呢?
三、Vxlan工作过程

如上图,怎么实现server1和server2两台服务器,连接在一个逻辑上的“大二层交换机”上,先看一个真正的二层网络,是如何转发数据的。

如图,10.1访问10.2,会用广播发送一个请求10.2 mac地址的arp报文,收到回应后完成arp解析,进而封装数据建立通信。
但是,在跨三层网络中,发出的广播arp会被三层设备隔离,无法到达目标主机。而vxlan解决这个问题的方案是隧道技术。
所谓的隧道技术,就是在原始的报文上,加一个新报头,靠新报头把数据包送到目的地。如下图:
当NVE设备收到了server1发出的arp广播报文,会给这个广播报文加上新的头部,新头部的源IP是10.1.1.2,目标IP是10.2.2.2,这样就把广播变成了单播,然后就可以正常的送到对面的NVE设备。
对面的NVE设备收到报文后,拆除新头部,露出原始的ARP报文,就可以转发到Server2 了。同样的方法Server2给server1回包,就完成了mac地址的解析。
后续server1和server2之间的所有报文,就可以通过这种隧道的方式,实现通信,逻辑上server1和server2就连接在了一个“大二层交换机”上了。
四、Vxlan报文格式及关键概念
VxLAN报文分装
关键概念如下
NVE(Network Virtualization Edge):网络虚拟化边缘,也就是普通网络和vxlan网络的边界设备。
VTEP(VxLAN Tunnel EndPoint):VXLAN隧道端点,NVE以VTEP进行标识。类似运行了ospf的设备用router id进行标识,运行了vxlan的设备使用vtep进行标识。Ospf的router id我们常常使用loopback地址,vxlan的vtep也是使用loopback地址。
BD(bridge domain):桥域,做了vxlan后逻辑上的广播域,在上图中,server1和server2处在一个相同的BD中
VNI(VXLAN Network Identifier): VNI是VXLAN网络标识。类似每个VLAN有VLAN ID,每个VxLAN也有VNI,用于不同用户之间的隔离。和vlan不同的是,vlan只有4096个,而vni有1600万个,可以支持大规模云数据中心大量租户间的隔离。
VBDIF接口:VxLAN网关接口。类似于vlanif可以作为网关,实现不同vlan间的通信,vbdif也是用来做不同vxlan网络的网关,实现不同vxlan间的通信。
五、Vxlan配置实战
实验拓扑

实验需求:
Server1和server2上均有vm,要实现vm在两台服务器上的平滑迁移,要求两台server使用vxlan技术部署在一个大二层网络中,相关信息如下
| 设备 | VXLAN隧道 | BD | VNI | Source IP | Peer IP |
| VTEP1 | VTEP1—>VTEP2 | 10 | 2010 | 10.1.1.2 | 10.2.2.2 |
| VTEP2 | VTEP2—>VTEP1 | 10 | 2010 | 10.2.2.2 | 10.1.1.2 |
配置步骤
- 分别在VTEP1、VTEP2、Switch1上配置路由协议,保证网络三层互通。
- 在Switch2、Switch3上配置VLAN。
- 分别在VTEP1、VTEP2上配置VXLAN接入业务,并打通VTEP1和VTEP2之间的VxLAN隧道
参考命令
1.配置路由协议
配置路由协议的目的是实现各个VTEP之间连通性,只有VTEP之间通信正常才能实现VxLAN数据报文的传递。
本实验中,路由协议使用OSPF,在VTEP1、VTEP2、Switch1上配置
# 以VTEP1配置为例,另外两台设备配置类似
<HUAWEI> system-view
[HUAWEI] sysname VTEP1
[VTEP1] interface loopback 1
[VTEP1-LoopBack1] ip address 10.1.1.2 32
[VTEP1-LoopBack1] quit
[VTEP1] interface gigabitethernet 1/0/1
[VTEP1-GigabitEthernet1/0/1] undo portswitch
[VTEP1-GigabitEthernet1/0/1] ip address 192.168.2.1 24
[VTEP1-GigabitEthernet1/0/1] quit
[VTEP1] ospf router-id 10.1.1.2
[VTEP1-ospf-1] area 0
[VTEP1-ospf-1-area-0.0.0.0] network 10.1.1.2 0.0.0.0
[VTEP1-ospf-1-area-0.0.0.0] network 192.168.2.0 0.0.0.255
[VTEP1-ospf-1-area-0.0.0.0] quit
[VTEP1-ospf-1] quit
2.配置vlan
常规vlan配置,本实验中在switch2和switch3上做vlan配置
<HUAWEI> system-view
[HUAWEI] sysname Switch2
[Switch2] vlan 10
[Switch2-vlan10] quit
[Switch2] interface gigabitethernet 1/0/2
[Switch2-GigabitEthernet1/0/2] port link-type access
[Switch2-GigabitEthernet1/0/2] port default vlan 10
[Switch2-GigabitEthernet1/0/2] quit
[Switch2] interface gigabitethernet 1/0/1
[Switch2-GigabitEthernet1/0/1] port link-type trunk
[Switch2-GigabitEthernet1/0/1] port trunk allow-pass vlan 10
[Switch2-GigabitEthernet1/0/1] quit
# 配置Switch3。
<HUAWEI> system-view
[HUAWEI] sysname Switch3
[Switch3] vlan 10
[Switch3-vlan10] quit
[Switch3] interface gigabitethernet 1/0/2
[Switch3-GigabitEthernet1/0/2] port link-type access
[Switch3-GigabitEthernet1/0/2] port default vlan 10
[Switch3-GigabitEthernet1/0/2] quit
[Switch3] interface gigabitethernet 1/0/1
[Switch3-GigabitEthernet1/0/1] port link-type trunk
[Switch3-GigabitEthernet1/0/1] port trunk allow-pass vlan 10
[Switch3-GigabitEthernet1/0/1] quit
3.配置vxlan接入
VTEP1和VTEP2作为VxLAN网络和和普通网络相连的设备,需要做VxLAN接入配置。详细步骤和说明如下
[VTEP1] bridge-domain 10 创建BD
[VTEP1-bd10] quit
[VTEP1] interface gigabitethernet 1/0/2
[VTEP1-GigabitEthernet1/0/2] port link-type trunk
[VTEP1-GigabitEthernet1/0/2] quit
[VTEP1] interface gigabitethernet 1/0/2.1 mode l2 创建子接口
[VTEP1-GigabitEthernet1/0/2.1] encapsulation dot1q vid 10 子接口和vlan 10关联
[VTEP1-GigabitEthernet1/0/2.1] bridge-domain 10 子接口和BD关联
[VTEP1-GigabitEthernet1/0/2.1] quit
含义,G1/0/2收到vlan 10的报文,则将报文关联到bd 10
# 配置VTEP2,操作类似。
[VTEP2] bridge-domain 10
[VTEP2-bd10] quit
[VTEP2] interface gigabitethernet 1/0/2
[VTEP2-GigabitEthernet1/0/2] port link-type trunk
[VTEP2-GigabitEthernet1/0/2] quit
[VTEP2] interface gigabitethernet 1/0/2.1 mode l2
[VTEP2-GigabitEthernet1/0/2.1] encapsulation dot1q vid 10
[VTEP2-GigabitEthernet1/0/2.1] bridge-domain 10
[VTEP2-GigabitEthernet1/0/2.1] quit
4.配置VXLAN隧道
# 配置VTEP1。
[VTEP1] bridge-domain 10 进入bd 10配置视图
[VTEP1-bd10] vxlan vni 2010 将bd 10和vni 2010进行关联
[VTEP1-bd10] quit
[VTEP1] interface nve 1 创建vxlan隧道,编号为1
[VTEP1-Nve1] source 10.1.1.2
[VTEP1-Nve1] vni 2010 head-end peer-list 10.2.2.2 隧道的源目标ip
[VTEP1-Nve1] quit
含义,属于bd 10的报文,将打上vni 2010的vxlan标识,并且封装上源地址为10.1.1.2目标地址为10.2.2.2的新ip头部,发到对端VTEP2
# 配置VTEP2。
[VTEP2] bridge-domain 10
[VTEP2-bd10] vxlan vni 2010
[VTEP2-bd10] quit
[VTEP2] interface nve 1
[VTEP2-Nve1] source 10.2.2.2
[VTEP2-Nve1] vni 2010 head-end peer-list 10.1.1.2
[VTEP2-Nve1] quit
5.结果验证
[VTEP1] display vxlan tunnel
Tunnel ID Source Destination State Type
4026531841 10.1.1.2 10.2.2.2 up
看到vxlan隧道状态up,代表vxlan配置成功
小思考:
在真正的生产环境中,vtep数量众多,vxlan数量也众多,而且处于频繁的变化中。
手动配置的话,好像工作量和人工成本太高昂了,有什么解决方法呢?
当然,如果你需要更多网工资料,可以私我哦~

