建立VXLAN隧道示意图
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。
VXLAN隧道的建立分为静态方式和动态方式两种。
静态方式没有控制平面,用户通过手动指定VXLAN隧道的源IP为本端VTEP的IP、目的IP为对端VTEP的IP,建立VXLAN隧道。静态方式手工配置工作量大,灵活性较差,不适合大规模的组网场景。
动态方式的VXLAN隧道的建立借助VXLAN EVPN协议作为VXLAN的控制平面,在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用VXLAN EVPN路由实现VTEP的自动发现、主机信息相互通告等,从而实现动态建立VXLAN隧道。数据平面则依据控制平面建立的转发表项执行报文的转发。动态方式灵活性高,适合大规模的VXLAN组网场景。
如何确定报文属于哪个VXLAN隧道“大二层网络”就类似于传统网络中VLAN(虚拟局域网)的概念,在VXLAN网络中,不同的“大二层网络”用Bridge-Domain标识,简称BD,不同的BD通过VNI来区分的。在建立VXLAN隧道时,需要在VTEP设备上配置BD与VNI的映射关系,进入VTEP的报文根据BD与VNI的映射关系表确定报文在进行VXLAN封装时,该添加哪个VNI标识,即报文通过哪个VXLAN隧道转发。那么,报文根据什么来确定自己属于哪个BD呢?
当BUM(广播&未知单播&组播)报文进行VXLAN封装时,接入端VTEP采用头端复制方式进行报文的VXLAN封装,将报文发送给头端复制列表中的所有出端口VTEP。
如何确定报文属于哪个BDVTEP只是设备承担的一个角色而已,只是设备功能的一部分。也就是说,并非所有进入到设备的报文都会走VXLAN隧道(也可能报文就是走普通的二三层转发流程)。所以,在回答“如何确定报文属于哪个BD”之前,必须先要回答“哪些报文要进入VXLAN隧道”。
哪些报文要进入VXLAN隧道?
回答这个问题之前,不妨先回想一下VLAN技术中,设备对于接收和发送的报文是如何进行处理的。报文要进入设备进行下一步处理,首先得先过接口这一关,可以说接口掌控着对报文的“生*大权”。传统网络中定义了三种不同类型的接口:Access、Trunk、Hybrid。这三种类型的接口虽然应用场景不同,但它们的最终目的是一样的:一是根据配置来检查哪些报文是允许通过的;二是判断对检查通过的报文做怎样的处理。
在VXLAN网络中,VTEP上的接口也承担着类似的任务,只不过这里的接口不是物理接口,而是一个叫做“二层子接口”的逻辑接口。类似的,二层子接口主要做两件事:一是根据配置来检查哪些报文需要进入VXLAN隧道;二是判断对检查通过的报文做怎样的处理。在二层子接口上,为简化配置管理,根据业务定义了不同的流封装类型(类似于传统网络中不同的接口类型)。目前主要的流封装类型有dot1q、untag、qinq和default四种类型:
dot1q:对于带有一层VLAN Tag的报文,该类型子接口只接收与指定VLAN Tag匹配的报文;对于带有两层VLAN Tag的报文,该类型子接口只接收外层VLAN Tag与指定VLAN Tag匹配的报文。
untag:该类型子接口只接收不带VLAN Tag的报文。
qinq:该类型子接口只接收带有指定两层VLAN Tag的报文。
default:允许子接口接收所有报文,不区分报文中是否带VLAN Tag。不论是对原始报文进行VXLAN封装,还是解封装VXLAN报文,该类型子接口都不会对原始报文进行任何VLAN Tag处理,包括添加、替换或剥离。
除二层子接口外,还可以将VLAN作为业务接入点。将VLAN绑定到广播域BD后,加入该VLAN的接口即为VXLAN业务接入点,进入接口的报文由VXLAN隧道处理。
将二层子接口加入BD
现在再来回答“如何确定报文属于哪个BD”就非常简单了。其实,只要将二层子接口加入指定的BD,然后根据二层子接口上的配置,设备就可以确定报文属于哪个BD啦!
什么是VXLAN EVPN?EVPN(Ethernet Virtual Private Network)是一种用于二层网络互联的VPN技术。EVPN技术采用类似于BGP/MPLS IP VPN的机制,在BGP协议的基础上定义了一种新的NLRI(Network Layer Reachability Information,网络层可达信息)即EVPN NLRI,EVPN NLRI定义了几种新的BGP EVPN路由类型,用于处在二层网络的不同站点之间的MAC地址学习和发布。
最初的VXLAN方案(RFC7348)中没有定义控制平面,是手工配置VXLAN隧道,然后通过数据平面的流量泛洪的方式进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的。这种方式实现上较为简单,但是会导致网络中存在很多泛洪流量、网络扩展起来困难。
为了解决上述问题,在VXLAN中引入了EVPN作为VXLAN的控制平面,即通过VXLAN EVPN路由传递VTEP地址和主机信息,把原本依赖数据平面的VTEP发现和主机信息学习转移到控制平面。
将EVPN作为VXLAN的控制平面
采用EVPN作为VXLAN的控制平面具有以下优势:
可实现VTEP自动发现、VXLAN隧道自动建立,从而降低网络部署、扩展的难度。
EVPN可以同时发布二层MAC信息和三层路由信息。
可以减少网络中的泛洪流量。
VXLAN EVPN的路由类型有哪些?在EVPN NLRI中定义了如下几种应用于VXLAN控制平面的BGP EVPN路由类型:
Type2路由:又称MAC/IP路由,主要用于VTEP之间相互通告主机IP、MAC信息。
Type3路由:主要用于在VTEP之间相互通告二层VNI、VTEP IP信息,以建立头端复制列表,指导后续BUM报文的转发。
Type5路由:又称IP前缀路由,主要用于传递网段路由。
使用EVPN发布VTEP路由在主机同子网互通场景下,因为只需要在同一个二层广播域(BD)内互通,所以只要两端VTEP的IP地址路由可达,VXLAN隧道就可以建立,所以同子网VXLAN隧道的动态建立需要在两端VTEP之间建立BGP EVPN对等体,然后对等体之间通过交互Type3路由来互相传递VNI和VTEP IP地址信息,来实现动态建立VXLAN隧道。
使用EVPN发布主机路由在主机跨子网互通场景下,需要在不同二层广播域(BD)内互通,主机之间的互通需要知道对端主机的IP路由。Type2路由携带32位掩码的主机IP地址信息,VTEP之间通过EVPN Type2路由发布主机路由信息,从而使VTEP就学习到主机的路由信息,从而进行三层转发。
使用EVPN发布网段路由网段路由的发布流程与主机路由类似,区别在于网段路由是通过Type5路由发布的,Type2路由只能发布32/128位的主机路由。Type5路由也可以发布32/128位的主机路由,在发布32/128位的主机路由时,功能与Type2路由类似。
使用EVPN学习MAC地址在VXLAN网络中,为了减少网络管理员手工维护工作量和减少泛洪流量,需要支持MAC地址动态学习。跨子网互通需要进行三层转发,MAC地址学习只在本端主机和网关之间通过动态ARP报文实现,这里不再详述。在同子网主机互通场景下,使用EVPN作为VXLAN的控制平面,可以用EVPN来进行MAC学习。Type2路由不仅携带IP路由信息,还携带MAC地址信息,使用EVPN来进行MAC学习的过程,是通过在VTEP之间传递Type2路由路由完成的。
VXLAN网络中的报文是如何转发的?基本的二三层转发中,二层转发依赖的是MAC表,三层转发依赖的是FIB表。在VXLAN中,其实也是同样的道理。下面以集中式VXLAN网络(VXLAN隧道的建立)为例,分别介绍同子网内、跨子网间是如何进行通信的,帮助您理解VXLAN中的概念。
集中式VXLAN中同子网互通流程如下图所示,VM_A、VM_B和VM_C属于同网段。此时,VM_A想与VM_C进行通信,首次进行通信,报文进行如下处理:
- VM_A上没有VM_C的MAC地址,所以会发送ARP广播报文请求VM_C的MAC地址。
- VTEP_1收到ARP请求后,先进行VXLAN封装,然后将VXLAN报文复制多份分别发送给所有的对端VTEP。
- 报文到达VTEP_2和VTEP_3后,VTEP对报文进行解封装,得到VM_A发送的原始报文。VTEP_2和VTEP_3在对应的二层域内广播。
- 当VM_C收到该请求报文后,发现目的IP与本机IP相同,因此VM_C将进行ARP应答。而其他VM收到该请求报文会丢弃。
经过上述过程,VM_A和VM_C均已学习到了对方的MAC地址。之后,VM_A和VM_C将采用单播方式进行通信。
同子网VM互通组网图
跨子网报文转发需要通过三层网关实现。如下图所示,VM_A、VM_B属于不同网段。VM_A与VM_B进行通信的报文处理过程如下:
VM_A先将数据报文发送给VTEP_1。
VTEP_1收到后进行VXLAN封装,然后将VXLAN报文发送给对端VTEP_3。
VTEP_3收到VXLAN报文后进行解封装,发现目的MAC是三层网关接口BDIF的MAC地址MAC_10,而目的IP地址为IP_B(10.1.20.1),因此需要进行三层转发。
VTEP_3根据路由表查找到IP_B的下一跳,发现出接口为BDIF 20,VTEP_3将报文重新进行VXLAN封装,然后将VXLAN报文发送给对端VTEP_2。
报文到达VTEP_2后,VTEP_2对报文进行解封装,并将其发送给VM_B。
不同子网VM互通流程示意
BDIF接口的功能与VLANIF接口类似,是基于BD创建的三层逻辑接口,用以实现不同子网之间的通信,或VXLAN网络与非VXLAN网络之间的通信。
深度:什么是VxLAN?架构师技术联盟 2021-09-14 00:00