VPP学习之配置VXLAN隧道
一、VXLAN技术
VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2 over L4)中,并在L3网络中传输。
主要特征和组成部分包括:
- Overlay Network: VXLAN创建了一个逻辑上的覆盖网络,允许在底层物理网络之上构建虚拟网络。这个覆盖网络通过虚拟网络标识符(VNI)来区分不同的虚拟网络。
- 封装: VXLAN使用UDP(User Datagram Protocol)封装来传输虚拟网络的数据包。每个VXLAN数据包都被封装在一个UDP包中,UDP的目的端口通常是4789。
- VXLAN头: VXLAN头部包含了VXLAN网络标识符(VNI),用于标识虚拟网络,以及其他一些字段。
- 扩展性: VXLAN通过使用24位的VNI提供了16,777,216(2^24)个虚拟网络标识符,从而支持大规模的虚拟网络。
- 多租户隔离: VXLAN允许在同一物理网络上创建多个虚拟网络,从而实现多租户隔离。每个虚拟网络都有独立的VNI,使其与其他虚拟网络相互隔离。
- 跨子网: VXLAN允许虚拟网络跨越物理子网,使得虚拟机能够在不同的物理子网上移动而无需修改其IP地址。
- 用途: VXLAN通常用于构建跨数据中心的云计算网络、实现虚拟机迁移、多租户环境隔离等场景。
1、VXLAN数据包格式
由上可以看出VXLAN将原始L2帧封装到L4 UDP报文中。
2、VXLAN协议原理
- VTEP(VXLAN Tunnel Endpoints,VXLAN 隧道端点):VXLAN 网络的边缘设备,用来进行 VXLAN 报文的处理(封包和解包)。VTEP 可以是网络设备(比如交换机),也可以是一台机器(比如虚拟化集群中的宿主机)。
- VNI(VXLAN Network Identifier,VXLAN 网络标识符):
VNI
是每个 VXLAN 段的标识,是个 24 位整数,一共有 2 24 = 16777216 2^{24} = 16777216 224=16777216(一千多万),一般每个VNI
对应一个租户,也就是说使用VXLAN
搭建的公有云可以理论上可以支撑千万级别的租户。 - Tunnel(VXLAN 隧道):隧道是一个逻辑上的概念,在 VXLAN 模型中并没有具体的物理实体向对应。隧道可以看做是一种虚拟通道,VXLAN 通信双方认为自己是在直接通信,并不知道底层网络的存在。从整体来说,每个 VXLAN 网络像是为通信的虚拟机搭建了一个单独的通信通道,也就是隧道。
上图所示为 VXLAN
的工作模型,它创建在原来的 IP 网络(L3层)上,只要是三层可达(能够通过 IP 相互通信)的网络就能部署 VXLAN
。在 VXLAN 网络的每个端点都有一个 VTEP
设备,负责 VXLAN 协议报文的解包和封包,也就是在虚拟报文上封装 VTEP
通信的报文头部。
物理网络上可以创建多个 VXLAN
网络,可以将这些 VXLAN
网络看成一个隧道,不同节点上的虚拟机/容器能够通过隧道直连。通过 VNI
标识不同的 VXLAN 网络,使得不同的 VXLAN 可以相互隔离。
总的来说,VXLAN 报文的转发过程就是:原始报文经过 VTEP
,被 Linux 内核添加上 VXLAN
头部以及外层的 UDP
头部,再发送出去,对端 VTEP
接收到 VXLAN 报文后拆除外层 UDP
头部,并根据 VXLAN 头部的 VNI
把原始报文发送到目的服务器。
3、VXLAN与VLAN的区别
VLAN作为传统的网络隔离技术,在标准定义中VLAN的数量只有4000个左右,无法满足大型数据中心的租户间隔离需求。另外,VLAN的二层范围一般较小且固定,无法支持虚拟机大范围的动态迁移。
VXLAN完美地弥补了VLAN的上述不足,一方面通过VXLAN中的24比特VNI字段,提供多达16M租户的标识能力,远大于VLAN的4000;另一方面,VXLAN本质上在两台交换机之间构建了一条穿越数据中心基础IP网络的虚拟隧道,将数据中心网络虚拟成一个巨型“二层交换机”,满足虚拟机大范围动态迁移的需求。
两者的具体区别如下:
- 封装机制:
- VXLAN: 使用UDP封装技术,通过在数据包上添加VXLAN头并使用UDP进行封装,从而在物理网络上创建一个虚拟网络。
- VLAN: 使用802.1Q标准,将VLAN标签插入以太网帧的头部,以区分不同的虚拟网络。
- 网络标识符:
- VXLAN: 使用24位的VXLAN网络标识符(VNI),允许创建多达16,777,216个虚拟网络。
- VLAN: 使用12位的VLAN标签,允许创建最多4096个VLAN。
- 扩展性:
- VXLAN: 提供更大的虚拟网络标识符空间,因此在大规模云计算环境中更具扩展性。
- VLAN: 在小到中型规模的网络中表现良好,但在大规模部署时可能受到限制。
- 隔离性:
- VXLAN: 具有更好的多租户隔离能力,每个虚拟网络都有独立的VNI,使其能够在物理网络上互相隔离。
- VLAN: 虽然可以提供隔离,但在大型部署中,VLAN的数量和范围受到一些限制。
- 跨子网:
- VXLAN: 允许虚拟网络跨越物理子网,因此虚拟机可以在不同的物理子网上移动而无需更改IP地址。
- VLAN: 通常限于单一子网,虚拟机在不同子网上移动时需要进行IP地址更改。
- 应用领域:
- VXLAN: 主要用于云计算环境,支持大规模虚拟网络的创建和管理。
- VLAN: 在传统企业网络中广泛应用,提供不同部门或功能之间的逻辑隔离。
二、VPP的VXLAN
通过使用VXLAN隧道在跨三层的underlay网络上构建二层overlay网络,可以实现二层桥接域(bridge domains,BD)跨越多个网络设备或公网。这使得在地理位置上分离的服务器也可以共同位于同一数据中心,只要它们可以通过底层的三层网络访问即可。
VPP中的VTEP(VXLAN Tunnel End Points,VXLAN隧道端点)设备就是VPP,VTEP是在创建VXLAN隧道时指定的,每个VXLAN隧道的源IP地址和目标IP地址就是本地服务器VTEP地址和目标服务器VTEP地址。
如下为两个VTEP设置之间负责对VXLAN流量进行封装和解封装操作过程,其中每个方框为VPP中的报文流量所经过的VPP节点。
在vppctl中创建VTEP1
# 将eth0口up
set interface state eth0 up
ip table add 100
# 创建eth0的qinq子接口eth0.100100,并up
create sub-interfaces eth0 100100 dot1q 100 inner-dot1q 100 exact-match
set interface state eth0.100100 up
# 创建vxlan接口eth0.10
create sub-interfaces eth0 10
set interface state eth0.10 up
set interface ip address eth0.10 192.168.8.8/24
# 创建Bridge Domain桥
create bridge-domain 11
# 创建BVI接口
bvi create instance 100
set interface state bvi100 up
create sub-interfaces bvi100 100100 dot1q 100 inner-dot1q 100 exact-match
set interface state bvi100.100100 up
set interface ip table bvi100.100100 100
set interface ip address bvi100.100100 192.168.9.9/24
# 配置vxlan隧道
create vxlan tunnel src 192.168.8.8 dst 192.168.7.7 vni 10 decap-next l2
set interface l2 bridge vxlan_tunnel0 11
set interface l2 bridge eth0.100100 11
set interface l2 bridge bvi11.100100 11 bvi
配置VTEP2:
set interface state eth0 up
set interface state eth1 up
create sub-interfaces eth0 200200 dot1q 200 inner-dot1q 200 exact-match
set interface state eth0.200200 up
create sub-interfaces eth0 10
set interface state eth0.10 up
set interface ip address eth0.10 192.168.7.7/24
create bridge-domain 21
create vxlan tunnel src 192.168.7.7 dst 192.168.8.8 vni 10 decap-next l2
set interface l2 bridge vxlan_tunnel0 21
set interface l2 bridge eth0.200200 21
set interface l2 tag-rewrite eth0.200200 translate 2-2 dot1q 100 100
组网示图如下: