一、VXLAN简介
VXLAN(Virtual eXtensible Local Area Network)采用MAC in UDP(User Datagram Protocol)封装方式,是NVO3(Network Virtualization over Layer 3)中的一种网络虚拟化技术。
如图1所示,一台服务器可虚拟多台虚拟机,而一台虚拟机相当于一台主机。主机的数量发生了数量级的变化,这也为虚拟网络带来了如下问题:
虚拟机规模受网络规格限制
在传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发,而MAC地址表的容量限制了虚拟机的数量。
网络隔离能力限制
IEEE802.1Q中定义的VLAN Tag域只有12bit,仅能表示2的12次方约为4096个VLAN,无法满足大二层网络中标识大量租户或租户群的需求。
虚拟机迁移范围受网络架构限制
虚拟机启动后,可能由于服务器资源等问题(如CPU过高,内存不够等),需要将虚拟机迁移到新的服务器上。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址保持不变,这就要求业务网络是一个二层网络,且要求网络本身具备多路径的冗余备份和可靠性。
随着数据中心在物理网络基础设施上实施服务器虚拟化的快速发展,作为NVO3技术之一的VXLAN可以带来以下优势:
1)通过24比特的VNI可以支持多达16M的VXLAN段的网络隔离,对用户进行隔离和标识不再受到限制,可满足海量租户。
2)除VXLAN网络边缘设备,网络中的其他设备不需要识别虚拟机的MAC地址,减轻了设备的MAC地址学习压力,提升了设备性能。
3)通过采用MAC in UDP封装来延伸二层网络,实现了物理网络和虚拟网络解耦,租户可以规划自己的虚拟网络,不需要考虑物理网络IP地址和广播域的限制,大大降低了网络管理的难度。
二、VXLAN原理
1、VXLAN报文格式
VXLAN是MAC in UDP的网络虚拟化技术,所以其报文封装是在原始以太报文之前添加了一个UDP封装及VXLAN头封装。具体报文格式如图2所示。
2、VXLAN网关划分
和VLAN类似,不同VNI之间的VXLAN,及VXLAN和非VXLAN之间不能直接相互通信。为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,VXLAN引入了VXLAN网关。
VXLAN网关分为:
二层网关:用于解决租户接入VXLAN虚拟网络的问题,也可用于同一VXLAN虚拟网络的子网通信。
三层网关:用于VXLAN虚拟网络的跨子网通信以及外部网络的访问。
根据三层网关部署方式的不同,VXLAN三层网关又可以分为集中式网关和分布式网关。
集中式网关部署
如图3所示,集中式网关将三层网关集中部署在一台设备上,所有跨子网的流量都经过三层网关进行转发,实现流量的集中管理。
集中式网关的优点和缺点如下:
优点:对跨子网流量进行集中管理,网关的部署和管理比较简单。
缺点:
(1) 转发路径不是最优:同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关转发。
(2)ARP表项规格瓶颈:由于采用集中三层网关,通过三层网关转发的终端租户的ARP表项都需要在三层网关上生成,而三层网关上的ARP表项规格有限,这不利于数据中心网络的扩展。
分布式网关部署
通过部署分布式网关可以解决集中式网关部署的缺点。VXLAN分布式网关是指在典型的“Spine-Leaf”组网结构下,将Leaf节点作为VXLAN隧道端点VTEP,每个Leaf节点都可作为VXLAN三层网关,Spine节点不感知VXLAN隧道,只作为VXLAN报文的转发节点。如图4所示,Server1和Server2不在同一个网段,但是都连接到一个Leaf节点。Server1和Server2通信时,流量只需要在Leaf1节点进行转发,不再需要经过Spine节点。
Spine节点:关注于高速IP转发,强调的是设备的高速转发能力。
Leaf节点:
(1)作为VXLAN网络中的二层网关设备,与物理服务器或VM对接,用于解决终端租户接入VXLAN虚拟网络的问题。
(2)作为VXLAN网络中的三层网关设备,进行VXLAN报文封装/解封装,实现跨子网的终端租户通信,以及外部网络的访问。
分布式网关的特点
(1)同一个Leaf节点既可以做VXLAN二层网关,也可以做VXLAN三层网关,部署灵活。
(2)Leaf节点只需要学习自身连接服务器的ARP表项,而不必像集中三层网关一样,需要学习所有服务器的ARP表项,解决了集中式三层网关带来的ARP表项瓶颈问题,网络规模扩展能力强。
三、静态方式建立VXLAN过程(集中式网关)
在静态方式部署集中式网关的场景中,控制平面的流程包括VXLAN隧道建立、MAC地址动态学习;转发平面的流程包括同子网已知单播报文转发、同子网BUM报文转发、跨子网报文转发。
静态方式部署集中式网关,手工配置工作量大,灵活性较差,不适合大规模的组网场景,如果在VXLAN网络中采用集中式网关,推荐使用BGP EVPN方式建立的VXLAN(部署集中式网关)。
VXLAN隧道建立
VXLAN隧道由一对VTEP IP地址确定,静态VXLAN隧道的创建完全通过手工配置本端和远端的VNI、VTEP IP地址和头端复制列表来完成,只要VXLAN隧道的两端VTEP IP是三层路由可达的,VXLAN隧道就可以建立成功。
如图5所示,Leaf1上部署了Host1和Host3,Leaf2上部署了Host2,Spine上部署三层网关。
为了实现Host3和Host2之间的通信,需要分别在Leaf1和Leaf2上手动配置二层VNI,并在配置头端复制列表时指定对端VTEP IP地址。只要Leaf1和Leaf2上存在到对端VTEP IP地址的三层路由,就可以建立到对端的VXLAN隧道。
为了实现Host1和Host2之间的通信,需要分别在Leaf1和Spine、Spine和Leaf2上手动配置二层VNI,并在配置头端复制列表时指定对端VTEP IP地址。只要Leaf1和Spine上存在到对端VTEP IP地址的三层路由,就可以建立到对端的VXLAN隧道;同样的,只要Spine和Leaf2上存在到对端VTEP IP地址的三层路由,就可以建立到对端的VXLAN隧道。
注意:对于Host1和Host3之间的通信,虽然都属于Leaf1,但由于属于不同子网,需要经过三层网关Spine,因此也需要在Leaf1和Spine之间创建VXLAN隧道。
MAC地址动态学习
在VXLAN网络中,为了实现终端租户的互通,支持MAC地址动态学习,不需要网络管理员手工维护,大大减少了维护工作量。下面结合图6,详细介绍一下同子网主机互通时,MAC地址动态学习的过程:
a. Host3发送源MAC为MAC3、目的MAC为全F、源IP为IP3、目的IP为IP2的ARP请求报文,请求Host2的MAC地址。
b. Leaf1收到该ARP请求后,根据二层子接口上的配置判断该请求报文需进入VXLAN隧道,并确定报文所对应的VNI(20)。同时Leaf1学习到了Host3的MAC地址、BDID(二层广播域标识)和报文入接口(即二层子接口对应的物理接口Port1)的对应关系,并在本地MAC表中生成Host3的MAC表项,其出接口为Port1。
c. Leaf1对该ARP请求报文进行VXLAN封装,如图7所示,封装的VNI是绑定当前BD的VNI,封装的外层源IP地址为Leaf1的VTEP IP地址,外层目的IP地址为Leaf2的VTEP IP地址,外层源MAC地址为Leaf1的NVE1接口MAC地址,外层目的MAC地址为去往目的IP的网络下一跳的MAC地址。封装后的报文根据外层MAC和IP信息在IP网络中传输,送达Leaf2。
d. Leaf2收到报文后进行解封装,得到Host3发送的原始ARP请求报文,同时Leaf2学习到Host3的MAC地址、BDID和Leaf1上VTEP IP地址的对应关系,并在本地的MAC表中生成Host3的MAC表项,其出接口需根据下一跳(即Leaf1的VTEP IP地址)进行迭代,最终迭代结果是指向Leaf1的VXLAN隧道。
e. Leaf2在对应的二层域内广播ARP请求。Host2收到ARP请求后,比较报文中的目的IP是否为本机的IP地址,如果是,则将Host3的MAC地址保存到本地的MAC表中,并进行ARP应答。
由于此时Host2已经学习到了Host3的MAC地址,所以ARP应答报文为单播报文,后续的ARP应答报文发送过程与上述过程类似,这里不再赘述。Host3和Host2互相学习到对方的MAC地址之后,双方将采用单播通信。
注意:在跨子网主机互通时,只需在主机和三层网关之间进行MAC地址动态学习,与上述过程相同。
同子网已知单播报文转发
同子网已知单播报文转发只在VXLAN二层网关之间进行,三层网关无需感知。报文转发流程如图8所示。
a. Leaf1收到来自Host3的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,并在该二层广播域内查找MAC表获取出接口,查找VXLAN隧道表获取封装信息。
b. Leaf1上VTEP根据查找到的封装信息对数据报文进行VXLAN封装,然后根据查找到的出接口进行报文转发。
c. Leaf2上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层的二层报文。
d. Leaf2根据内层二层报文的目的MAC,从本地MAC表找到对应的出接口和封装信息,为报文添加VLAN Tag,转发给对应的主机Host2。
Host2向Host3发送报文的过程类似,这里不再赘述。
同子网BUM报文转发
同子网BUM报文转发只在VXLAN二层网关之间进行,三层网关无需感知。同子网BUM报文转发可以采用头端复制方式、集中复制方式或组播复制方式。
头端复制
头端复制是指,当BUM报文进入VXLAN隧道时,接入端VTEP根据头端复制列表进行报文的VXLAN封装,并将报文发送给头端复制列表中的所有出端口VTEP。BUM报文出VXLAN隧道时,出口端VTEP对报文解封装。BUM报文采用头端复制的转发流程如图9所示。
a. Leaf1收到来自终端A的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域。
b. Leaf1上VTEP根据对应的二层广播域获取对应VNI的头端复制隧道列表,依据获取的隧道列表进行报文复制,并进行VXLAN封装。然后将封装后的报文从出接口转发出去。
c. Leaf2/Leaf3上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。然后依据VNI获取对应的二层广播域,进行VXLAN解封装,获取内层二层报文。
d. Leaf2/Leaf3检查内层二层报文的目的MAC,发现是BUM MAC,在对应的二层广播域内的非VXLAN隧道侧进行广播处理,即:Leaf2/Leaf3分别从本地MAC表中找到非VXLAN隧道侧的所有出接口和封装信息,为报文添加VLAN Tag,转发给对应的终端B/C。
跨子网报文转发
跨子网报文转发需要通过三层网关实现。在集中式网关场景中,跨子网报文转发的流程如图10所示。
a. Leaf1收到来自Host1的报文,根据报文中接入的端口和VLAN信息获取对应的二层广播域,在对应的二层广播域内查找出接口和封装信息。
b. Leaf1上VTEP根据查找到的出接口和封装信息进行VXLAN封装,向Spine转发报文。
c. Spine收到VXLAN报文后进行解封装,发现内层报文中的目的MAC是三层网关接口VBDIF10的MAC地址MAC3,判断需要进行三层转发。
d. Spine剥除内层报文的以太封装,解析目的IP。根据目的IP查找路由表,找到目的IP的下一跳地址,再根据下一跳地址查找ARP表项,获取目的MAC、VXLAN隧道出接口及VNI等信息。
e. Spine重新封装VXLAN报文,向Leaf2转发。其中内层报文以太头中的源MAC是三层网关接口VBDIF20的MAC地址MAC4。
f. Leaf2上VTEP收到VXLAN报文后,根据UDP目的端口号、源/目的IP地址、VNI判断VXLAN报文的合法有效性。依据VNI获取对应的二层广播域,然后进行VXLAN解封装,获取内层二层报文,并在对应的二层广播域内查找出接口和封装信息。
g. Leaf2根据查找到的出接口和封装信息,为报文添加VLAN Tag,转发给对应的Host2。
Host2向Host1发送报文的过程类似,这里不再赘述。
说明:当只需要实现处于同一网段的主机互通时,可以不部署VXLAN三层网关;当需要实现处于不同网段的主机互通,或者主机都处于同一网段,但需要与外部网络互通时,需要部署VXLAN三层网关。
四、静态方式建立VXLAN配置(集中式网关)
如上图,某企业在不同的数据中心都拥有自己的VM,服务器1的VM1属于VLAN 10,服务器3的VM1属于VLAN 30,服务器2上的VM1属于VLAN 20。服务器1和服务器2位于不同网段,服务器3和服务器2位于相同网段。现需要通过VXLAN网关实现不同数据中心相同名称VM的互通。
注:本例中interface1、interface2、interface3分别代表100GE1/0/1、100GE1/0/2、100GE1/0/3。
配置思路
采用如下思路配置不同网段用户通过VXLAN三层网关通信:
1)分别在Device1、Device2和Device3上配置路由协议,保证网络三层互通。
2)分别在Device1和Device3上配置业务接入点实现区分业务流量。
3)分别在Device1、Device2和Device3上配置VXLAN隧道转发业务流量。
4)在Device2上配置VXLAN三层网关,实现不同网段用户通过VXLAN三层网关互通。
操作步骤
1)配置路由协议
#配置Device1。Device2和Device3的配置与Device1类似,这里不再赘述。配置OSPF时,注意需要发布设备的32位Loopback接口地址。
<HUAWEI> system-view
[~HUAWEI] sysname Device1
[*HUAWEI] commit
[~Device1] interface loopback 1
[*Device1-LoopBack1] ip address 2.2.2.2 32
[*Device1-LoopBack1] quit
[*Device1] interface 100ge 1/0/1
[*Device1-100GE1/0/1] undo portswitch
[*Device1-100GE1/0/1] ip address 192.168.1.1 24
[*Device1-100GE1/0/1] quit
[*Device1] ospf
[*Device1-ospf-1] area 0
[*Device1-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
[*Device1-ospf-1-area-0.0.0.0] network 192.168.1.0 0.0.0.255
[*Device1-ospf-1-area-0.0.0.0] quit
[*Device1-ospf-1] quit
[*Device1] commit
# OSPF成功配置后,Device之间可通过OSPF协议发现对方的Loopback接口的IP地址,并能互相ping通。以Device1 ping Device3的显示为例。
[~Device1] ping 4.4.4.4
PING 4.4.4.4: 56 data bytes, press CTRL_C to break
Reply from 4.4.4.4: bytes=56 Sequence=1 ttl=253 time=5 ms
Reply from 4.4.4.4: bytes=56 Sequence=2 ttl=253 time=2 ms
Reply from 4.4.4.4: bytes=56 Sequence=3 ttl=253 time=2 ms
Reply from 4.4.4.4: bytes=56 Sequence=4 ttl=253 time=3 ms
Reply from 4.4.4.4: bytes=56 Sequence=5 ttl=253 time=3 ms
--- 4.4.4.4 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 2/3/5 ms
2)分别在Device1、Device3上配置业务接入点
# 配置Device1。Device3的配置与Device1类似,这里不再赘述。
[~Device1] bridge-domain 10
[*Device1-bd10] quit
[*Device1] interface 100ge 1/0/2.1 mode l2
[*Device1-100GE1/0/2.1] encapsulation dot1q vid 10
[*Device1-100GE1/0/2.1] bridge-domain 10
[*Device1-100GE1/0/2.1] quit
[*Device1] bridge-domain 20
[*Device1-bd20] quit
[*Device1] interface 100ge 1/0/3.1 mode l2
[*Device1-100GE1/0/3.1] encapsulation dot1q vid 30
[*Device1-100GE1/0/3.1] bridge-domain 20
[*Device1-100GE1/0/3.1] quit
[*Device1] commit
3)分别在Device1、Device2、Device3上配置VXLAN隧道
# 配置Device1。
[~Device1] bridge-domain 10
[~Device1-bd10] vxlan vni 5010
[*Device1-bd10] quit
[*Device1] interface nve 1
[*Device1-Nve1] source 2.2.2.2
[*Device1-Nve1] vni 5010 head-end peer-list 3.3.3.3
[*Device1-Nve1] quit
[*Device1] bridge-domain 20
[*Device1-bd20] vxlan vni 5020
[*Device1-bd20] quit
[*Device1] interface nve 1
[*Device1-Nve1] vni 5020 head-end peer-list 3.3.3.3
[*Device1-Nve1] vni 5020 head-end peer-list 4.4.4.4
[*Device1-Nve1] quit
[*Device1] commit
# 配置Device2。
[~Device2] bridge-domain 10
[*Device2-bd10] vxlan vni 5010
[*Device2-bd10] quit
[*Device2] interface nve 1
[*Device2-Nve1] source 3.3.3.3
[*Device2-Nve1] vni 5010 head-end peer-list 2.2.2.2
[*Device2-Nve1] quit
[*Device2] bridge-domain 20
[*Device2-bd20] vxlan vni 5020
[*Device2-bd20] quit
[*Device2] interface nve 1
[*Device2-Nve1] source 3.3.3.3
[*Device2-Nve1] vni 5020 head-end peer-list 2.2.2.2
[*Device2-Nve1] vni 5020 head-end peer-list 4.4.4.4
[*Device2-Nve1] quit
[*Device2] commit
# 配置Device3。
[~Device3] bridge-domain 20
[~Device3-bd20] vxlan vni 5020
[*Device3-bd20] quit
[*Device3] interface nve 1
[*Device3-Nve1] source 4.4.4.4
[*Device3-Nve1] vni 5020 head-end peer-list 3.3.3.3
[*Device3-Nve1] vni 5020 head-end peer-list 2.2.2.2
[*Device3-Nve1] quit
[*Device3] commit
4)在Device2上配置VXLAN三层网关
[~Device2] interface vbdif 10
[*Device2-Vbdif10] ip address 192.168.10.10 24
[*Device2-Vbdif10] quit
[*Device2] interface vbdif 20
[*Device2-Vbdif20] ip address 192.168.20.10 24
[*Device2-Vbdif20] quit
[*Device2] commit
检查配置结果
上述配置成功后,在Device1、Device2、Device3上执行display vxlan tunnel命令可查看到VXLAN隧道的信息;执行display vxlan vni命令可查看到VNI的状态是Up。以Device2显示为例。
[~Device2] display vxlan tunnel
Number of vxlan tunnel : 2
Tunnel ID Source Destination State Type Uptime
-----------------------------------------------------------------------------------
4026531841 3.3.3.3 2.2.2.2 up static 0035h21m
4026531842 3.3.3.3 4.4.4.4 up static 0036h21m
[~Device2] display vxlan vni
Number of vxlan vni : 2
VNI BD-ID State
---------------------------------------
5010 10 up
5020 20 up
配置完成后,不同服务器中的VM1可以相互通信。
下章节将介绍EVPN VXLAN原理和分布式网关配置