第九章 VXLAN技术
9.1背景:
VXLAN(虚拟扩展局域网),本质上是一个隧道技术,采用MAC in UDP的方式封装,用于数据中心,用于园区网的虚拟化(网络虚拟化)。
9.2 网络的新需求
为什么要使用VXLAN:
- 二层扩展:随着网络规模的扩大,物理服务器在不同的地理位置,服务器之间需要进行三层互联,但是服务器因为虚拟机迁移需要满足虚拟机在同一个广播域,所以需要使用到VXLAN的L2VPN的技术。网络规模的扩大,VLAN ID 资源有限,需要扩展广播域的数量,VXLAN通过VNI标识 广播域,VNI取值范围24bit
- 租户的隔离:传统网络使用VLAN不携带租户信息。VXLAN使用 VPN实例隔离租户。
9.3 VXLAN的应用
- 数据中心:采用spine-leafe的架构。
- Spine节点负责报文的路由
- Leaf节点负责VXLAN报文的封装和解封装
- 在园区网中的应用:使用VXLAN实现网络虚拟化,“一网多用”
- Underlay:物理设备组成的网络拓扑
- Overlay:在Underlay上配置VXLAN从而虚拟出来的网络的逻辑拓扑。园区网中可以通过在相同的Underlay中虚拟出多个不同功能的Overlay网络,从而实现“一网多用”。
9.4 VXLAN报文
原始报文=原始帧头+原始IP头部+载荷部分,是VXLAN两端PC之间互相访问产生的原始的报文:
- 原始帧头包含PC1和PC2的MAC地址
- 原始IP地址是PC1和PC2的IP地址
- 载荷部分是PC1与PC2互访的携带的信息
通过VXLAN网关形成,进行封装或者是解封装:
封装形成VXLAN报文:外层的帧头+外层的IP头部+UDP头部+VXLAN头部+原始报文
- VXLAN头部包含以下字段:
- VXLAN Flags:8bit,取值是00001000
- 保留字段:24bit,华为部分设备已利用,具体需要参考不同设备的产品文档。如果未利用,取值为0
- VNI:24bit,VXLAN网络标识符,类似VLAN ID,相同的VNI标识相同的广播域。
- 保留字段:8bit,保留字段,取值为0。
- UDP头部:
- 源端口号:由内层数据帧hash计算得来。
- 目的端口号:为4789
- 外层的IP头部,其中包含的IP地址如下:
- 源IP地址为隧道本端的IP地址,VTEP IP地址
- 目的IP地址为隧道对端的IP地址,VTEP IP地址
- 外层帧头:
- 目的MAC地址:根据目的 VTEP IP地址查找路由下一跳的MAC地址。
- 源MAC地址:本端VTEP IP地址的 MAC地址。
9.5 概念
NVE(Network Virtualization Edge,网络虚拟边缘):用于VXLAN报文的封装和解封装。
VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点):位于NVE中,用于VXLAN报文的封装和解封装,用IP地址标识,本端的VTEP地址是隧道的源地址,对端的VTEP是本端访问对端的目的VTEP IP地址。
VNI:可以用于租户隔离,一个租户可以有多个VNI,通信双方的VNI相同,则可以进行二层通信。分为二层VNI和三层VNI,二层VNI用于二层通信,三层VNI是用于不同子网的三层之间通信。
BD(桥域):在VXLAN网络中用于标识一个大二层网络中的广播域,VNI与BD是1:1的映射关系。BD概念本地有效。
VAP:虚拟接入点,IP报文接入到VXLAN网络的接口(点)
- 配置接口的子接口,与BD域绑定,流量进入到对应的子接口,则注入到对应的BD域中,进行相应的VXLAN封装,实现VXLAN接入。
- 配置VLAN与BD绑定,收到的数据报文带VLAN ID,注入对应的BD域中,并进行相应的VXLAN封装,实现VXLAN接入。
VBDIF:BD域对应的三层接口,类似VLANIF
Border和Edge设备:
- Border设备是连接外部网络的设备
- Edge VXLAN的边缘设备,负责将传统网络的报文进行VXLAN封装转发进入到VXLAN网络。
二层网关:VXLAN实现接入设备,同时不部署VBDIF接口(通过二层网关实现相同子网之间的通信)
三层网关:设备上部署VBDIF接口通过路由进行不同的BD广播域之间的通信(不同子网之间的通信)
VXLAN的封装过程:子接口收到报文,根据子接口绑定的BD域,查找BD绑定的对应的VNI,封装对应的VNI到VXLAN报文的头部,根据VNI查找NVE的对应的头端复制列表,进一步封装NVE中的原IP地址和目的IP地址,转给对端的VTEP。
9.6 VXLAN的接入
- 基于VLAN ID与BD域绑定
- 基于子接口与BD与绑定,子接口根据接收到的流量的不同,进行不同处理方式。
- 子接口的类型是dot1q类型:
- 封装:从终端接收到报文必须要携带VLAN ID,且VLAN ID必须与子接口指定的VLAN ID相同,进行VXLAN封装:先剥离掉报文中的VLAN ID(与子接口VLAN ID相同),如果是双层 VLAN ID,则剥离最外层的VLAN ID,然后进行VXLAN封装
- 解封装:从VXLAN网络侧收到一个VXLAN报文,根据该VXLAN报文中的VNI,查找该VNI绑定的对应的BD域,从对应的子接口进行转发(转发前,先要解封装,会还成原始的数据帧,并且添加该子接口指定的VLAN ID)
- 子接口的封装类型QinQ类型,必须收到指定的两层VLAN tag标签的报文。
- 封装VXLAN报文:收到指定两层报文,进行VXLAN报文的封装
- 配置了剥离标签,则剥离两层标签进行VXLAN封装
- 不配置剥离标签,则不剥离标签进行VXLAN封装
- 解封装VXLAN报文:
- 配置了剥离标签,解封装VXLAN报文的时候,在原报文中添加指定的两层标签。
- 不配置剥离标签,则解封装VLXAN报文的时候,不添加指定的两层标签。
- 子接口的封装类型untag类型
- 封装:必须收到的不带VLAN标签的报文,进行VXLAN的封装,不进行任何VXLAN Tag的添加。
- 解封装:收到VXLAN报文,解封装,移除最外层VLAN Tag发送。
- 子接口的封装类型default类型
- 封装:接受到任何报文,属于该子接口,不修改原始报文中的VLAN Tag
- 解封装:解封装VXLAN 报文,不修改报文中的任何VLAN Tag
- 注意:该子接口只能创建一个,不能在创建任何其他类型的子接口,同时主接口必须不能加入任何VLAN
9.7同子网之间的互访
直接通过隧道,实现相同VNI(相同广播域之间的终端互访),Mac地址表通过泛洪-学习的方式进行学习:
- 当VXLAN接入设备收到BUM帧的时候,向相同VNI对应的头端复制列表中的所有对端的VTEP地址复制一份BUM帧并进行VXLAN封装,泛洪进入VNI相同的所有对端VTEP IP地址。
- BUM帧的转发方式:
- 头端复制
- 集中复制
- 组播复制
- 当VXLAN接入设备收到已知单播帧,按照MAC地址表指定对端VTEP单播发送(封装VXLAN报文)。
9.8 EVPN在VXLAN的应用
9.8.1 BGP EVPN NLRI和扩展团体属性
通过扩展BGP协议,新增几个EVPN路由,使用NLRI携带。
NLRI中携带地址簇25,代表L2VPN
NLRI中携带子地址簇70,代表EVPN
VXLAN中也存在EVPN实例的概念,通过扩展团体属性,携带路由的RT值,MAC Mobility、EVPN Router’s MAC Extended Community。
9.8.2 BGP EVPN的3类路由
3类路由:用于VTEP IP地址的自动发现,携带二层VNI,以便自动构建VXLAN隧道。
BGP Update报文中路由的详细内容:
- NLRI:携带部分字段如下
- RD值字段,是本地EVPN配置的RD值
- 本端的VTEP IP地址
- IP地址的前缀长度
- PMSI:携带部分字段如下
- 隧道的类型字段:6,表示头端复制
- MPLS Label字段:二层VNI
9.8.3 EVPN 2类路由
2类路由MAC/IP路由,通告主机的MAC地址、ARP信息、IP路由条目(主机路由)。分类2类:VXLAN设备收到ARP报文(访问自己的ARP报文)产生2类路由。
- IRB路由:主机路由,分布式网关,只有该类型的路由携带三层VNI
- ARP路由:通告ARP信息、主机的MAC ,分布式网关,携带二层VNI
路由格式:携带了RD值(EVPN实例配置)、MAC地址、MAC地址长度、IP前缀、前缀长度、二层VNI、三层VNI
9.8不同子网之间的互访
9.8.1 通过集中式网关实现
将不同子网的网关放在一个设备上面,该设备作为Border设备与所有的其他的Edge节点,建立隧道。所有的Edge设备连接的终端设备通过隧道访问Border上的网关地址,并在Border设备上进行路由转发。
9.8.2 分布式网关路由交叉
将子网的网关部署在不同的Leaf设备上,设备相互之间通过EVPN路由通告ARP、IP主机路由等信息。
EVPN实例:需要设置ERT值和IRT
- 当接入设备(Leaf节点)从主机方向学习到对应的ARP表项,自动生成EVPN的2类路由,通告给所有的对等体:携带EVPN中的ERT值
- 对端接收到该EVPN路由,进行路由交叉,比较路由中携带的ERT值和本地EVPN实例中的IRT值,如果相同,则接受,放入到对应的EVPN实例路由表中。
IP VPN实例:接收2类路由形成32掩码主机路由需要配置IRT值,称eIRT值。
- 当接入设备收到从其他的EVPN对等体发来的2类EVPN路由,根据路由携带ERT值与本端配置IP VPN实例中的eIRT值进行比较,相同,则接受该路由,并加入到IP VPN实例的路由表中,形成主机路由条目。
- 如果2类EVPN路由中的ERT与本端的EVPN实例的IRT和IP VPN实例中eIRT值都不相同,则丢弃该路由不接受。
9.8.3 分布式网关的不同子网之间通信
- 非对称IRB转发:本端VTEP查找路由表,再查找MAC地址表,对端VTEP仅查找MAC表进行转发。
- 对称IRB转发:本端VTEP和对端VTEP都需要查找L3(路由表)。
9.9 VXLAN网络与外部网络互联
9.9.1 接入外部网络的方式:
1、将外部网络接入到VXLAN网络中,作为VXLAN网络的一部分(一个主机)
2、集中式网关中,集中式网关接受所有子网的报文,并进行解封装和路由,此时外部网络连接在集中式网关上,不需要其他配置,按照传统网络配置接口(IGP配置或者是静态路由配置)。
3、将外部路由引入到BGP IPv4地址簇 VPN实例视图下,形成5类EVPN路由(前缀路由),通告给其他的节点,其他节点收到按照IP VPN实例中的eIRT决定是否接受该路由。
参考命令:
Bgp 100 //进入BGP视图
ipv4-family -instance VPNA //进入VPN实例视图
import-route static //引入静态路由
advertise l2 e //向EVPN对等体通告EVPN路由(产生5类路由进行通告)
9.9.2 EVPN 5类路由
和其他路由一样,携带在BGP MP-reachable NLRI中,主要内容如下:
- 前缀和前缀长度:外部路由的前缀和前缀长度
- 网关地址:VTEP地址
- Label字段:携带的三层VNI
9.10 EVPN的应用功能
9.10.1 ARP抑制功能
VXLAN的接入设备开启使能分布式网关,开启ARP拟制功能后,从其他的VTEP收到的2类路由,形成ARP广播抑制表项。当接入设备收到终端发来的ARP广播请求报文。查看ARP的广播抑制表项:
- 如果存在对应的ARP表项,则修改ARP的目的地址从广播改为单播,从单一的VXLAN隧道进行转发。
- 如果不存在对应的ARP表项,仍然进行BUM帧转发(通过头端复制列表,对所有的VTEP进行转发。)
9.10.2 ARP代理
作用:减少VXLAN网络中的ARP广播报文泛洪
- 本端的VTEP进行ARP代理,将本地VBDIF接口(router MAC)发送给终端。
- 删除从网络侧学习到的ARP表项,通过路由表项确定下一跳。
9.10.3 MAC Mobility属性
作用:用于虚拟机迁移,通过BGP扩展团体属性承载
迁移后,向迁移后所属的VTEP发送免费ARP报文,VTEP收到报文之后产生对应的MAC/IP路由(新的),携带MAC Mobility属性(序列号1),发送给虚拟机原来所属的VTEP(也发送给其他的VTEP)。原来的VTEP收到该2类的MAC/IP路由,向原虚拟机接口发送探测报文,探测是否发生迁移,如无人回应,则认为虚拟机发生了迁移,从而产生一个路由撤销报文,用于撤销网络中原2类的MAC/IP路由。