Chapter 1 - VXLAN简介
随着网络技术的发展,云计算凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新趋势。而服务器虚拟化作为云计算的核心技术之一,得到了越来越多的应用.
服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时,为了实现业务的灵活变更,虚拟机VM(Virtual Machine)需要能够在网络中不受限迁移,这给传统的“二层+三层”数据中心网络带来了新的挑战:
1. 虚拟机规模受网络设备表项规格的限制
- 在传统二层网络环境下,数据报文是通过查询MAC地址表进行二层转发。服务器虚拟化后,VM的数量比原有的物理机发生了数量级的增长,伴随而来的便是VM网卡MAC地址数量的空前增加。而接入侧二层设备的MAC地址表规格较小,无法满足快速增长的VM数量.
2. 网络隔离能力有限
- VLAN作为当前主流的网络隔离技术,在标准定义中只有12bit,因此可用的VLAN数量仅4096个。对于公有云或其它大型虚拟化云计算服务这种动辄上万甚至更多租户的场景而言,VLAN的隔离能力无法满足.
3. 虚拟机迁移范围受限
- 由于服务器资源等问题(如CPU过高,内存不够等),虚拟机迁移已经成为了一个常态性业务。虚拟机迁移是指将虚拟机从一个物理机迁移到另一个物理机。为了保证虚拟机迁移过程中业务不中断,则需要保证虚拟机的IP地址、MAC地址等参数保持不变,这就要求虚拟机迁移必须发生在一个二层网络中。而传统的二层网络,将虚拟机迁移限制在了一个较小的局部范围内.
为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生,其能够很好的解决上述问题。
1. 虚拟机规模受网络设备表项规格的限制
- VXLAN将管理员规划的同一区域内的VM发出的原始报文封装成新的UDP报文,并使用物理网络的IP和MAC地址作为外层头,这样报文对网络中的其他设备只表现为封装后的参数。因此,极大降低了大二层网络对MAC地址规格的需求。
2. 网络隔离能力有限
- VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI(VXLAN Network Identifier),由24bit组成,支持多达16M的VXLAN段,有效得解决了云计算中海量租户隔离的问题。
3. 虚拟机迁移范围受限
- VXLAN将VM发出的原始报文进行封装后通过VXLAN隧道进行传输,隧道两端的VM不需感知传输网络的物理架构。这样,对于具有同一网段IP地址的VM而言,即使其物理位置不在同一个二层网络中,但从逻辑上看,相当于处于同一个二层域。即VXLAN技术在三层网络之上,构建出了一个虚拟的大二层网络,只要虚拟
机路由可达,就可以将其规划到同一个大二层网络中。这就解决了虚拟机迁移范围受限问题.
Chapter 2 - VXLAN原理介绍
一. VXLAN网络架构
VXLAN是NVO3中的一种网络虚拟化技术,通过将原主机发出的数据包封装在UDP中,并使用物理网络的IP、MAC作为外层头进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标主机。
通过VXLAN,虚拟网络可接入大量租户,且租户可以规划自己的虚拟网络,不需要考虑物理网络IP地址和广播域的限制,降低了网络管理的难度。
类似于传统的VLAN网络,VXLAN网络也有VXLAN网络内互访和VXLAN网络间互访。
1. VXLAN 网络内互访
通过VXLAN技术可以实现在已有三层网络上构建虚拟二层网络,实现主机之间的二层互通。
如下图,所示:
VXLAN网络内互访中涉及的概念如下:
网络标识VNI(VXLAN Network Identifier)
类似于传统网络中的VLAN ID,用于区分VXLAN段,不同VXLAN段的租户不能直接进行二层通信。一个租户可以有一个或多个VNI,VNI由24比特组成,支持多达16M的租户。VXLAN隧道端点VTEP(VXLAN Tunnel Endpoints)
VTEP可以对VXLAN报文进行封装和解封装。VXLAN报文中源IP地址为源端VTEP的IP地址,目的IP地址为目的端VTEP的IP地址。一对VTEP地址就对应着一条VXLAN隧道。在源端封装报文后通过隧道向目的端VTEP发送封装报文,目的端VTEP对接收到的封装报文进行解封装虚拟接入点VAP(Virtual Access Point)
VXLAN业务接入点,可以基于VLAN或报文流封装类型接入业务:
基于VLAN接入业务:
在VTEP上建立VLAN与VNI的映射。这样,当VTEP收到业务侧报文后,根据VLAN与VNI的映射关系,实现报文在隧道内进行转发。
基于报文流封装类型接入业务:
在VTEP连接下行业务的物理接口上创建二层子接口,并配置不同的流封装类型,使得不同的接口接入不同的数据报文。同时,将二层子接口与VNI进行一一映射。这样业务侧报文到达VTEP后,即会进入指定的二层子接口。即根据二层子接口与VNI的映射关系,实现报文在隧道内进行转发。
- L2 Gateway
类似传统网络的二层接入设备,在VXLAN网络中通过二层网关解决租户接入VXLAN虚拟网络,也可用于同一VXLAN虚拟网络的子网通信.
2. VXLAN间网络间互访
不同VXLAN之间的主机不能直接进行二层通信,需要通过VXLAN Gateway实现主机的三层通信(vxlan与vxlan之间的互访和vxlan与vlan之间的互访,需要注意的是,vlan与vxlan的访问需要通过vxlan网关进行映射的翻译。).
如下图所示:
VXLAN网络间互访中涉及的概念如下:
- 三层 VXLAN Gateway
类似传统网络中不同VLAN的用户间不能直接进行二层互访,不同VNI之间的VXLAN及VXLAN和非VXLAN之间也不能直接相互通信。为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,引入了VXLAN三层网关的概念。三层网关用于VXLAN虚拟网络的跨子网通信以及外部网络的访问。
二. VXLAN报文封装格式
- 通过将mac地址封装在UDP中的结构,使用UDP 4789端口进行数据转发,数据报文。
如下图,所示:
三. VXLAN运行机制
1. VTEP发现和地址学习过程。
如下图,所示:
主机A向主机B发出ARP Request,Src MAC为MAC-A,Dst MAC为全f;
ARP Request报文到达vtep-1后,vtep-1对其封装VXLAN包头,其中外层的Src MAC为vtep-1的MAC-1,Dst MAC为组播mac地址, Src IP为vtep-1的IP-1,Dst IP为组播IP地址,并且打上了VXLAN VNID:10。由于vtep之间是三层网络互联的,广播包无法穿越三层网络,所以只能借助组播来实现arp报文的泛洪。通常情况下一个组播地址对应一个VNID,同时可能会对应一个租户或者对应一个vrf网络,通过VNID进行租户之间的隔离。
打了VXLAN头的报文转发到了其他的vtep上,进行VXLAN头解封装,原始的ARP Request报文被转发给了vtep下面的主机,并且在vtep上生成一条MAC-A(主机A的mac)、VXLAN ID、IP-1(vtep-1的IP)的对应表项;
主机B收到ARP请求,回复ARP Response,Src MAC:MAC-B、Dst MAC:MAC-A;
ARP Response报文到达vtep-2后,被打上VXLAN的包头,此时外层的源目mac和IP以及VXLAN ID是根据之前在vtep-2上的MAC-A、VXLAN ID、IP-1对应表项来封装的,所以ARP Response是以单播的方式回复给主机A;
打了VXLAN头的报文转发到vtep-1后,进行VXLAN头的解封装,原始的ARP Response报文被转发给了主机A;
主机A收到主机B返回的ARP Response报文,整个ARP请求完成。
2. VXLAN单播数据流转发过程。
如下图,所示:
host-A将原始报文上送到vtep;
根据目的mac和VNI的号(这里的VNI获取是vlan和vxlan的mapping查询出的结果),查找到外层的目的IP是vtep-2 IP,然后将外层的源目IP分别封装为vtep-1 IP和vtep-2 IP,源目mac为下一段链路的源目mac;
数据包穿越IP网络;
根据VNI、外层的源目IP,进行解封装,通过VNI和目的mac查表,得目标IP为IP-B.
host-B接受此原始报文,并回复host-A,回复过程同上一致。
3. 多目的流量处理
由于目前信令下而已尚未实现,多目的流量(Broadcast,Multicast,Unkonwn)利用底层IP网络提供的组播服务实现,即借助数据转发平台实现。
如下图,所示:
当BUM报文进入VXLAN隧道,源端VTEP依据获取的隧道列表对报文进行复制,并分别进行封装。BUM报文出VXLAN隧道,目的端VTEP对报文解封装。
Chapter 3 - VXLAN隧道建立方式
组播方式:通过组播发送,发现网络中的VTEP设备,建立VXLAN隧道。
静态方式:通过管理员手工指定VTEP设备,建立隧道。(具体配置方法请关注武汉中继者,数据中心课程)
BGP EVPN方式:是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGPEVPN路由来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。(具体配置方法请关注武汉中继者,数据中心课程)
Chapter 4 - 在Cisco ASA部署VXLAN实验
1. 实验拓扑
2. 实验需求
ASA1为路由模式,ASA2为透明模式。
ASA1 为L3 Gateway设备,ASA2为L2 gateway设备。
ASA1和ASA2间通过组播的方式建立隧道,实现PC1到PC2的互通
3. 设备 IP地址规划如下表所示
设备 | 接口 | IP地址 |
---|---|---|
ASA1 | GigabitEthernet0/0 | 200.0.0.1/24 |
ASA1 | VXLAN | 200.0.1.1/24 |
ASA1 | GigabitEthernet0/1 | 100.0.0.1/24 |
ASA2 | GigabitEthernet0/0 | 200.0.0.2/24 |
ASA2 | BVI | 200.0.1.2/24 |
PC1 | - | 100.0.0.10/24 |
PC2 | - | 200.0.1.10/24 |
4. 实验配置
- PC1 IP地址配置
IP :100.0.0.10/24
Gateway:100.0.0.1
- PC2 IP地址配置
IP:200.0.1.10/24
Gateway:200.0.1.2
- ASA1 接口及IP地址配置
interface GigabitEthernet0/0
nameif inside
security-level 100
ip address 200.0.0.1 255.255.255.0
interface GigabitEthernet0/1
nameif outside
security-level 0
ip address 100.0.0.1 255.255.255.0
- ASA1 VXLAN相关配置,(开启组播路由,封装VXLAN,配置vni,ACL方向测试流量)
multicast-routing
nve 1
encapsulation vxlan
source-interface inside
default-mcast-group 239.0.0.1
interface vni1
segment-id 6000
nameif VXLAN
security-level 50
ip address 200.0.1.1 255.255.255.0
vtep-nve 1
access-list out extended permit ip any any
access-group out in interface outside
- ASA2 接口及IP地址配置(为BVI接口配置IP地址)
interface GigabitEthernet0/1
nameif inside
bridge-group 1
security-level 100
interface BVI1
ip address 200.0.1.2 255.255.255.0
- ASA2 VXLAN相关配置(封装VXLAN,配置vni,ACL方向测试流量)
interface GigabitEthernet0/0
nve-only
nameif outside
security-level 0
ip address 200.0.0.2 255.255.255.0
nve 1
encapsulation vxlan
source-interface outside
interface vni1
segment-id 6000
nameif VXLAN
bridge-group 1
security-level 50
vtep-nve 1
mcast-group 239.0.0.1
access-list in extended permit ip any any
access-group in in interface VXLAN
- 测试PC1与PC2的连通性
PC2> ping 100.0.0.10
84 bytes from 100.0.0.10 icmp_seq=1 ttl=64 time=13.662 ms
84 bytes from 100.0.0.10 icmp_seq=2 ttl=64 time=5.751 ms
84 bytes from 100.0.0.10 icmp_seq=3 ttl=64 time=5.354 ms
84 bytes from 100.0.0.10 icmp_seq=4 ttl=64 time=4.188 ms
84 bytes from 100.0.0.10 icmp_seq=5 ttl=64 time=3.687 ms
- 检测VTEP邻居状态
ASA1# show nve 1
nve 1, source-interface "inside" is up
IP address 200.0.0.1, subnet mask 255.255.255.0
Encapsulation: vxlan
Encapsulated traffic statistics:
154 packets input, 7726 bytes
723 packets output, 74666 bytes
0 packets dropped
Number of configured static peer VTEPs: 0
Number of discovered peer VTEPs: 1
Discovered peer VTEPs:
IP address 200.0.0.2
Default multicast group: 239.0.0.1
Number of VNIs attached to nve 1: 1
VNIs attached:
vni 1: segment-id 6000, mcast-group none
-
抓包查看ASA1与ASA2之间数据包封装