一 VXLAN的原理
VXLAN(Virtual eXtensible LAN 可扩展虚拟局域网络)是一种网络虚拟化技术,底层基于IP网络,采用"Mac In UDP"封装形式的二层以太网交换技术。相对于VLAN,VXLAN具有以下优势:
1) 应用灵活部署: 通过VXLAN封装后的2层以太网帧可以跨3层网络边界,让组网以及应用部署变得更加灵活,同时解决多租户网络环境中IP地址冲突问题。
2) 更好的扩展性: 传统 VLANID字段为12-bit,VLAN数量为4096;VXLAN使用24-bit VNID (VXLAN network identifier),支持 16,000,000 逻辑网络,解决了传统二层网络VLAN资源不足的问题。
3) 提高网络利用率: 传统以太网使用 STP预防环路, STP导致网络冗余路径处于阻塞状态, VXLAN报文基于 3层 IP报头传输,能有效利用网络路径,支持 ECMP(equal-cost multipath )和链路聚合协议。
VXLAN的网络模型如图所示:
VXLAN技术将已有的三层物理网络作为Underlay网络,在其上构建虚拟的二层网络,即Overlay网络。Overlay网络通过封装技术,利用Underlay网络提供的三层转发路径,实现租户二层报文跨越三层网络在不同站点之间传递。对于租户来说,Underlay网络是透明的,同一租户的不同站点就像工作在同一局域网中。
VXLAN的网络模型包括以下几个部分:
1) 用户终端: 可以是PC机、无线设备、服务器上创建的VM等
2) VTEP(VXLAN Tunel End Point): VXLAN的边缘设备,VXLAN的相关处理都在VTEP上进行,例如识别以太网数据帧所属的VXLAN,报文的封装与解封等
3) VXLAN隧道: 两个VTEP设备之间的点到点逻辑隧道,用于传输VXLAN报文
4) 核心设备: 底层IP网络中的设备,不参与VXLAN处理,仅根据VXLAN报文的目的地址进行三层转发
5) VSI(Virtual Switch Instance 虚拟交换实例): VTEP上为一个VXLAN提供二层交换服务的虚拟交换实例,可以看成是VTEP上一个基于VXLAN进行二层转发的虚拟交换机
6) AC(Attachment Circuit 接入电路): VTEP上连接本地站点的物理电路或者虚拟电路,与VSI关联的三层接口称为AC。
二 VXLAN网关
和VLAN类似,不同VNI之间的VXLAN,及VXLAN和非VXLAN之间不能直接相互通信。为了使VXLAN之间,以及VXLAN和非VXLAN之间能够进行通信,VXLAN引入了VXLAN网关。
VXLAN网关分为:
1) 二层网关:用于解决租户接入VXLAN虚拟网络的问题,也可用于同一VXLAN虚拟网络的子网通信。
2) 三层网关:用于VXLAN虚拟网络的跨子网通信以及外部网络的访问。
根据三层网关部署方式的不同,VXLAN三层网关又可以分为集中式网关和分布式网关
集中式网关是指将三层网关集中部署在一台设备上,所有跨子网的流量都经过三层网关进行转发,实现流量的集中管理,如图所示:
集中式网关部署简单,但不同VXLAN的流量均由单一网关处理,使得其负载压力较大。在分布式网关中,每台VTEP设备均可以作为网关,缓解了网关的压力,如图所示:
分布式网关中,Spine节点不感知VXLAN隧道,只作为报文转发的中间节点。
三、HCL搭建VXLAN示例
下面在HCL环境中搭建一个VXLAN的示例,加深对以上概念的理解。
如图所示,RouterA与RouterB作为VTEP设备,同时也作为分布式网关设备。RouterC作为路由反射器,负责在集群中反射BGP路由,这里我们通过BGP路由完成RouterA与RouterB之间VXLAN隧道的建立,并使得客户端之间可以彼此互通。
1) 在RouterA、RouterB、RouterC之间配置OSPF,使得彼此之间路由可达。注意这里我们配置RouterA的Loopback0地址为1.1.1.1作为其vtep地址,配置RouterB的Loopback0地址为2.2.2.2作为其vtep地址。
查看RouterA的OSPF路由表:
2) 创建三层交换实例,配置其RD和RT
3) 创建VSI接口,并配置网关地址:
这里我们在该接口中配置了2个分布式网关,并且绑定了第二步创建的三层交换实例,同时为了保证网关之间的三层互通,指定了l3-vni。
4) 创建VSI实例,并且关联第三步创建的VSI接口
在该VSI实例中创建VXLAN通道。
5) 在RouterA的2/0/2接口上关联第四步创建的VSI实例
以上完成了RouterA的配置,RouterB与RouterA的配置步骤相同。
到目前为止,RouterA与RouterB之间的VXLAN隧道还没有建立,我们需要配置BGP路由完成VXLAN隧道的自动创建。
6) 在配置BGP时,为了避免BGP对等体之间建立full-mesh连接,将RouterC作为路由反射器,RouterA与RouterB只与RouterC建立BGP连接即可
RouterA配置如下:
RouterB与RouterA配置相同
RouterC配置如下:
等RouterA、RouterB与RouterC之间的对等体建立好之后,查看BGP路由:
其中下发了二类、三类路由;二类路由是主机IP/MAC路由、三类路由是VTEP路由
查看VXLAN隧道,已经自动生成:
验证下流量是否通,10.1.1.1 ping 20.1.1.2:
可见,不同网段的主机流量已经互通,下面来抓包验证一下:
抓取10.1.1.1设备的1/0/1口、RouterA的2/0/1口、20.1.1.2的1/0/1口:
下图是10.1.1.1设备1/0/1口的报文,封装的ICMP报文中,src ip是10.1.1.1,dst ip 是20.1.1.2,src mac是虚机自身的mac,由于是跨网段互通,故dst mac是RouterA网关的mac
下图是RouterA 2/0/1口的报文,可以看见,VTEP在ICMP报文外层又封装了一层VXLAN,且src ip是1.1.1.1,即RouterA的VTEP ip,dst ip是2.2.2.2,即RouterB的VTEP ip,vxlan id是1000,即VSI中指定的l3-vni
下图是20.1.1.2设备1/0/1口的报文,可见,RouterB对VXLAN报文进行了解封,此时报文中的src mac为RouterB的网关mac,dst mac为20.1.1.2设备的mac
通过以上的步骤,我们完成了搭建VXLAN的示例。