Part 01
简介
作为目前传统数据中心网络的面临着如下几个痛点:
❗ 交换机MAC表限制
虚拟化技术的应用,使目前数据中心的服务器上都运行着大量的虚拟机,每个虚拟机都包含至少一个MAC地址,我们知道二层转发需要交换机学习MAC地址,这会导致ToR交换机需要学习的MAC表数量指数级增长,一旦MAC表溢出,就会造成交换机泛洪,影响转发效率[1];
❗ 租户数量的限制
传统的数据中心内是通过VLAN进行租户隔离,不同的租户会被划分到不同的VLAN中,而VLAN报文中用来表示用户标识的VID的长度为12位,也就说最多可以容纳212-2=4094个租户(通常0和4095作为保留值),而对于大型的数据中心来说,这个数量的租户远远不够用,会让网络扩展受到限制;
❗ 虚拟机迁移的限制
数据中心会出现服务器的硬件扩容或者机房迁移的情况,此时虚拟机需要被迁移到其他的服务器上来避免对业务的影响,虚拟机的MAC和IP地址需要保持不变,因此迁移只能发生在二层网络内,对业务的灵活性产生了极大的限制【2】;
为了解决以上数据中心的问题,RFC 7348提出了虚拟可扩展局域网的概念,即VXLAN(Virtual eXtensible Local Area Network),将原始的二层报文通过VXLAN隧道头封装在IP报文中,使原始报文可以跨二层网络进行传输。
图1 VXLAN报文结构
上图为一个标准的VXLAN格式报文,其可以分为三个部分:
1、最外层为VXLAN隧道的底层网络封装,用来在VTEP之间传输;
2、中间为VXLAN隧道头部,基于UDP协议承载;
3、最内层为想要传输的原始报文内容,包括以太头、IP头以及报文数据,即虚拟机网卡发送出来的报文;
其中VXLAN头部长8个字节,包括以下内容:
VXLAN Flag(8位):固定取值为00001000;
VNI(24位):网络标识符,用来定义不同的租户;
保留字段:有两处,分别为24位和8位;
图2 VXLAN抓包
上图为VXLAN的抓包,其VNI值为100,基于UDP协议传输,源端口随机生成,目的端口为4789。
从以上的VXLAN报文格式中可以看出VXLAN隧道是如何解决数据中心面临的3个主要问题的:
1、VXLAN使用UDP进行封装,UDP外层的MAC为VTEP物理出口的MAC地址,通常一个物理机会对应一个VTEP被该台机器上所有的虚拟机使用, 这样对于ToR交换机来说,一台服务器只需要记录一条MAC表即可,避免了MAC表暴涨的问题[1];
2、VNI24位的长度可支持超过1600万数量的租户,网络中租户隔离的数量不会再受到限制,后续网络的拓展也变得极其灵活;
3、VXLAN采用MAC in UDP的方式来进行封装传输,对二层网络进行了延伸,不同地域间的数据中心也可通过UNDERLAY三层网络实现大二层的连接,实现了物理网络和虚拟网络的解耦。网络规划不再受物理网络的限制,可实现虚拟机无损迁移,即IP和MAC地址保持不变[2]。
Part 02
VXLAN隧道在云网关中的应用
图3 云网关方案架构图
目前中国移动正在大力推进云网关的研发和落地,其中一种方案为将云网关作为BRAS后一个网元部署在省侧或者地市机房。如图三所示,该网络架构使用VXLAN隧道对用户报文进行接入和终结,即每个白盒网关(ONU)会和云网关之间创建一条VXLAN隧道,分配到唯一的VNI标识,终端的报文在ONU被封装上VXLAN隧道并转发到云网关,云网关对报文解封装获取到内层原始报文,根据报文的类型进行不同的处理,该云网关架构把传统家庭网关大部分控制面的功能以及增值业务都上移到了BRAS之后的云网关系统进行统一处理。
简单来说,在云网关场景下用户上网过程为:1、白盒网关发起PPPOE拨号,从BRAS获取到可上网的IP;
2、以PPPOE拨号获取的IP作为local IP,以及预先分配好的VNI值,和云网关之间创建VXLAN隧道;
3、用户终端(如手机、PC等)发起DHCP请求,在白盒网关封装上VXLAN隧道转发到云网关,VXLAN报文在云网关被解封装并将原始报文透传到云网关控制面,DHCP服务器分配一个内网地址给终端,同时将网关、DNS信息等一并发送回终端;
4、用户发起对网关的ARP请求,报文同步骤三一样被透传到控制面,网关回应ARP REPLY;
5、终端用户正常上网(包括DNS),报文到达云网关,通过策略判断是否订购了增值业务:
(5.1)非增值业务用户,使用公网IP做NAT,进行公网卸载转发;
(5.2)增值业务用户,发送到业务服务器,根据具体订购的业务进行后续处理,对报文进行丢弃、加速或者回注等操作;
该方案使用VXLAN隧道进行用户接入,白盒网关作为VTEP,对上行的原始报文进行VXLAN隧道的封装,使其可以顺利穿越三层网络到达云网关并解掉封装进行后续处理。有如下优点:
1、VXLAN隧道天然支持租户隔离,不同宽带用户可以使用VNI进行区分,而且24位的VNI足够使用;
2、VXLAN作为二层隧道,相比于如GRE、IPIP等三层隧道,可以将原始的用户信息完整地上送到云网关,设备的源MAC信息可以用来做增值业务,如对具体的设备做管控、限速等操作。
Part 03
VXLAN隧道穿越NAT
VXLAN隧道不是传统C/S模型,VTEP两端都是监听UDP4789目的端口,而源端口为随机生成。图四简单说明了从用户白盒网关发出的VXLAN报文经过BRAS设备的NAT处理后的五元组变化情况,如图所示,假设家庭网关上行报文封装的VXLAN源端口为随机的1234,经过BRAS做SNAT之后变成5678,因为目的端口仍然为4789,云网关可以正常收到并处理;当报文下行时会被封装上目的4789端口,相应地BRAS需要对其做DNAT,但是BRAS上只存在1234->5678的NAT会话映射,而此时报文的目的端口为4789无法找到正确的NAT会话,因此报文会在BRAS被丢弃,无法支持穿越NAT。
图4 VXLAN报文经过NAT设备流程
云网关系统的VXLAN隧道进行了如下改造:
1)白盒网关封装VXLAN报文时源端口和目的端口均固定为4789;
2)云网关记录上行报文的VNI和源端口的映射关系,在下行报文封装VXLAN时将记录的源端口作为目的端口进行封装。
经过上述改造后,家庭网关封装VXLAN时将外层UDP的源和目的端口都填充为4789,上行经过BRAS时源端口被SNAT成Y,目的端口保持4789,报文被云网关正常接收和解封装,此时记录VNI和源端口信息;报文下行时根据VNI查询到源端口信息Y,将其封装到VXLAN隧道的外层UDP目的端口,经过BRAS时可以找到对应的4789->Y的NAT会话,目的端口被还原成4789,家庭网关可以顺利收到并解封装VXLAN报文。
Part 04
总结
VXLAN隧道作为一个广泛使用的大二层隧道技术,将物理网络和虚拟网络解耦,具有传统局域网络不可比的扩展性和灵活性,24位长度的VNI也能完全满足大量租户隔离的需求。目前,中国移动智慧家庭运营中心已经完成基于VXLAN隧道架构的云网关自研,并在多省完成试点部署,形成了完整的端到端解决方案。