Vxlan的控制平面就是EVPN,EVPN帮助Vxlan建立控制平面,单独的vxlan只有转发(数据)平面,没有控制平面
EVPN其实就是BGP的扩展
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实现方案没有控制平面,是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的,这种方式导致数据中心网络存在很多泛洪流量(BUM)。为了解决这一问题,VXLAN引入了EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等特性,从而避免了不必要的数据流量泛洪。(EVPN帮助VXLAN在控制平面上建立vxlan隧道和mac地址的学习)
综上所述,EVPN通过扩展BGP协议新定义了几种BGP EVPN路由,这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。(也就是说之前讲的建立Vxlan隧道是通过数据平面的流量泛洪建立的,现在是通过EVPN的控制平面建立Vxlan隧道)
BGP EVPN路由:
在EVPN NLRI中定义了如下几种应用于VXLAN控制平面的BGP EVPN路由类型:
- Type2路由——MAC/IP路由
- Type3路由——Inclusive Multicast路由
- Type5路由——IP前缀路由
这些定义的路由类型都是存在于BGP的update报文中,是update报文中的一段信息
Type2路由——MAC/IP路由
字段解释:
Route Distinguisher:类似于MPLS中的RD值,路由区分符
Ethernet Segment Identifier:用于防环,比如MPLS中的PE设备与CE设备相连,标识是随机生成的
MAC Address Length:表示虚拟主机的MAC地址长度
MAC Address:虚拟主机的MAC地址信息,用于二层通信
IP Address Length:虚拟主机的IP掩码长度
IP Address:虚拟主机的IP地址,三层通信
MPLS Label1:用于二层通信,人工配置,不会自己生成(静态Vxlan集中式网关同子网和跨子网、EVPN集中式网关同子网和跨子网、BGP EVPN分布式网关同子网会用到二层VNI)
MPLS Label2:用于三层通信,人工配置,不会自己生成(EVPN分布式网关跨子网会用到三层VNI)
该类型路由(type-2路由)在VXLAN控制平面中的作用包括:
- 主机MAC地址通告
要实现同子网主机的二层互访,两端VTEP需要相互学习主机MAC。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机MAC。其中,MAC Address Length和MAC Address字段为主机MAC地址。(两端VTEP之间通过Type2路由学习到对端下游的主机MAC/IP路由) - 主机ARP通告
MAC/IP路由可以同时携带主机MAC地址+主机IP地址,因此该路由可以用来在VTEP之间传递主机ARP表项,实现主机ARP通告。其中,MAC Address和MAC Address Length字段为主机MAC地址,IP Address和IP Address Length字段为主机IP地址。此时的MAC/IP路由也称为ARP类型路由(也是VTEP之间通过Type2路由传递的)。主机ARP通告主要用于以下两种场景:
(1) ARP广播抑制
当三层网关学习到其子网下的主机ARP时(通过云平台学习到的,如果网络中不存在云平台,这时三层网关通过ARP广播学习到主机信息),生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。(就是说二层网关将主机发送的ARP请求中的目的MAC从全为f的广播改为一个单播MAC地址传递,三层网关是通过ARP广播收集到主机的信息,后续当主机上的MAC地址表失效之后,由三层网关重新将对应关系下发到二层网关)
(2) 分布式网关场景下的虚拟机迁移
当一台虚拟机从当前网关迁移到另一个网关下之后,新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现),并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由(type2路由)将主机信息发送给虚拟机的原网关(通过Type2路由发送)。原网关收到后,感知到虚拟机的位置发生变化,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由。 - 主机IP路由通告
在分布式网关场景中,要实现跨子网主机的三层互访,两端VTEP(作为三层网关)需要互相学习主机IP路由。作为BGP EVPN对等体的VTEP之间通过交换MAC/IP路由,可以相互通告已经获取到的主机IP路由。其中,IP Address Length和IP Address字段为主机IP路由的目的地址,同时MPLS Label2字段必须携带三层VNI。此时的MAC/IP路由也称为IRB(Integrated Routing and Bridge)类型路由。(也就是说此时spine设备仅仅作为转发设备即可,因为leaf设备此时可以作为三层网关设备)
说明:
ARP类型路由携带的有效信息有:主机MAC地址+主机IP地址+二层VNI;IRB类型路由携带的有效信息有:主机MAC地址+主机IP地址+二层VNI+三层VNI。因此,IRB类型路由包含着ARP类型路由,不仅可以用于主机IP路由通告,也能用于主机ARP通告。
(即ARP只能用于二层通告,IRB既可以用于二层,也可以用于三层)
Type3路由——Inclusive Multicast路由
主要作用是在Vxlan控制平面中用于VTEP自动发现和Vxlan隧道自动建立
该类型路由是由前缀和PMSI属性组成,报文格式如下图所示:
字段解释:
Route Distinguisher:类似于MPLS中的RD值,路由区分符
Ethernet Tag ID:该字段为当前设备上的VLAN ID ,Type3路由中全为0
Originating Router’s IP Address:隧道起点的VTEP IP地址
Type3路由在VXLAN控制平面中主要用于VTEP的自动发现和VXLAN隧道的动态建立。作为BGP EVPN对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。其中,Originating Router’s IP Address字段为本端VTEP IP地址,MPLS Label字段为二层VNI。如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
Type5路由——IP前缀路由(在EVPN的分布式网关里可以看到type5路由)
可以实现VXLAN网络中的主机访问外部网络(类似于ospf中5类LSA)
只有在分布式网关里能看到Type5路由
该类型路由的报文格式如下图所示:
字段解释:
该类型路由的IP Prefix Length和IP Prefix字段既可以携带主机IP地址,也可以携带网段地址:
当携带主机IP地址时(掩码长度为32位),该类型路由在VXLAN控制平面中的作用与IRB类型路由是一样的,主要用于分布式网关场景中的主机IP路由通告。(Vxlan内部虚拟机的通信)
当携带网段地址时,通过传递该类型路由,可以实现VXLAN网络中的主机访问外部网络。(Vxlan内部和非Vxlan的通信)
BGP EVPN方式部署VXLAN集中式网关:
在BGP EVPN方式部署集中式网关的场景中,控制平面的流程包括VXLAN隧道建立、MAC地址动态学习(通过转发平面的泛洪来进行隧道建立和MAC地址动态学习);转发平面的流程包括同子网已知单播报文转发、同子网BUM(Broadcast&Unknown-unicast&Multicast)报文转发、跨子网报文转发。该方式通过部署EVPN协议实现VTEP自动发现和VXLAN隧道的动态创建,灵活性高,适合大规模的VXLAN组网场景,如果在VXLAN网络中采用集中式网关,推荐使用该方式。这时控制平面由EVPN建立,不是由泛洪的流量来实现Vxlan隧道建立和MAC地址动态学习
EVPN集中式网关和静态方式部署vxlan集中式网关的不同之处在于:控制平面的实现
1.静态方式部署是依靠流量的泛洪来实现vxlan隧道的建立和mac地址动态学习
2.EVPN方式是依靠EVPN协议来实现VXLAN隧道的建立和mac地址动态学习
VXLAN隧道建立:
VXLAN隧道由一对VTEP IP地址确定,创建VXLAN隧道实际上是两端VTEP获取对端VTEP IP地址的过程,只要对端VTEP IP地址是三层路由可达的,VXLAN隧道就可以建立成功。通过BGP EVPN方式动态建立VXLAN隧道,就是在两端VTEP之间建立BGP EVPN对等体,然后对等体之间利用BGP EVPN路由(Type3)来互相传递VNI和VTEP IP地址信息,从而实现动态建立VXLAN隧道。
如图1所示,Leaf1上部署了两个Host,Leaf2上部署了一个Host,Spine上部署三层网关。为了实现Host3和Host2之间的通信,需要在Leaf1和Leaf2之间创建VXLAN隧道;为了实现Host1和Host2之间的通信,需要在Leaf1和Spine之间以及Spine和Leaf2之间创建VXLAN隧道。对于Host1和Host3之间的通信,虽然都属于Leaf1,但由于属于不同子网,需要经过三层网关Spine,因此也需要在Leaf1和Spine之间创建VXLAN隧道。
隧道建立过程:
- 首先在Leaf1和Leaf2之间建立BGP EVPN对等体。然后,在Leaf1和Leaf2上分别创建二层广播域,并在二层广播域(BD域)下配置关联的VNI。接下来在二层广播域下创建EVPN实例,配置本端EVPN实例的RD、出方向VPN-Target(ERT)、入方向VPN-Target(IRT)。在配置完本端VTEP IP地址后,Leaf1和Leaf2会生成BGP EVPN路由并发送给对端(Type3路由),该路由携带本端EVPN实例的出方向VPN-Target和BGP EVPN协议新定义的Type3路由即Inclusive Multicast路由。其中,Inclusive Multicast路由如图3所示,由前缀和PMSI属性组成,VTEP IP地址存放在前缀的Originating Router’s IP Address字段中,VNI存放在PMSI属性的MPLS Label字段中。
- Leaf1和Leaf2在收到对端发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,Leaf1和Leaf2将获取其中携带的对端VTEP IP地址和VNI,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道;同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。
Leaf1和Spine之间、Leaf2和Spine之间通过BGP EVPN方式动态建立VXLAN隧道的过程与上述相同,这里不再赘述。
说明:
VPN-Target是一种BGP扩展团体属性,一个EVPN实例可以配置出方向和入方向两类VPN-Target,两端EVPN实例的VPN-Target要相互匹配(即本端EVPN实例配置的出方向VPN-target值需要与对端EVPN实例配置的入方向VPN-target值相等),才能相互交换EVPN路由,否则VXLAN隧道无法建立成功。如果仅有一端匹配成功可以接收路由,则此端设备上可以建立通往另一端设备的隧道,但是无法传输数据报文,因为另一端设备在收到报文后,将会检查本端是否有通往对端的VXLAN隧道,如果没有的话,将会丢弃报文。(单通风险)
MAC地址动态学习:
在VXLAN网络中,为了实现终端租户的互通,支持MAC地址动态学习,不需要网络管理员手工维护,大大减少了维护工作量。下面结合图4,详细介绍一下同子网主机互通时,MAC地址动态学习的过程:
3. Host3首次与Leaf1通信时,通过动态ARP报文,Leaf1学习到Host3的MAC地址、BDID(二层广播域标识)和报文入接口(即二层子接口对应的物理接口Port1)的对应关系,并在本地MAC表中生成Host3的MAC表项,其出接口为Port1。同时,Leaf1根据Host3的ARP表项生成BGP EVPN路由并发送给对等体Leaf2,该路由携带本端EVPN实例的出方向VPN-Target、路由下一跳属性以及BGP EVPN协议新定义的Type2路由即MAC/IP路由。其中,路由下一跳属性携带的是本端VTEP IP地址;MAC/IP路由如图5所示,Host3的MAC地址存放在MAC Address Length和MAC Address字段中,二层VNI存放在MPLS Label1字段中。
2.Leaf2收到Leaf1发来的BGP EVPN路由后,首先检查该路由携带的EVPN实例的出方向VPN-Target,如果与本端EVPN实例的入方向VPN-Target相等,则接收该路由,否则丢弃该路由。在接收该路由后,Leaf2获得Host3的MAC地址、BDID和Leaf1上VTEP IP地址(下一跳属性)的对应关系,并在本地的MAC表中生成Host3的MAC表项,其出接口需根据下一跳进行迭代,最终迭代结果是指向Leaf1的VXLAN隧道。
集中式网关实验:
实验目的:同子网的pc1和pc2可以互通,不同子网的pc3和pc1/pc2可以互通
拓扑图: