静态VXLAN的问题:
- N台设备建立隧道,最高可达N(N-1)/2次头端列表配置
- 只能通过ARP广播的方式学习远端MAC地址
也就是说:
- 对于静态的VXLAN,该方案没有控制平面,所以只能通过数据平面的流量泛洪进行VTEP发现和主机信息(包括:MAC地址、IP地址、VNI、VTEP地址)的学习,这种方式导致VXLAN网络存在很多泛洪流量
- 为了解决这一问题,VXLAN引入了BGP evpn作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等,从而避免了不必要的数据流量泛洪
EVPN:Ethernet Virtual Private Network,以太网虚拟专用网
- RFC 7432,BGP MPLS-based Ethernet VPNs
- 颠覆了传统L2VPN数据平面学习MAC地址的方式,引入控制平面学习MAC和IP指导数据转发,实现了转控分离。
- 随着技术发展,渐渐开始统一了各种L2VPN、L3VPN业务的控制平面,正朝着一统VPN江湖的方向大步前进,成为了新一代全业务承载的VPN技术。
- 目前广泛应用于数据中心网络、园区接入网络和广域网
EVPN VXLAN:
- RFC 8365
- 采用MP-BGP通告EVPN路由信息(控制平面)
- 采用VXLAN封装方式转发报文(数据平面)
BGP EVPN:
- 通过扩展BGP协议新定义了几种BGP EVPN路由(EVPN NLRI)
- 通过BGP EVPN路由通告,完成VXLAN控制平面的相关工作
- VXLAN隧道通过BGP EVPN自动建立,转发表项通过BGP EVPN动态刷新。
- 实际部署中,可以通过RR,进一步减少BGP EVPN对等体关系数量
EVPN NLRI:
这还只是最简单的MAC路由(2类),EVPN的路由有1~11,主要我们用的是235 2里面还有三种不同的,上图只有mac地址没有携带IP(下面IP地址是未包含),如果带了IP不就是ARP了嘛,所以你下面带了IP就是ARP路由,还有种路由IRB路由
主要就是看扩展团体属性和MP_REACH_NLRI
以前扩展团体属性里有RT,现在也有RT,但是下面写着呢 封装类型是VXLAN
以前NLRI是VPNv4路由,RD+路由还有MPLS标签,现在有什么,居然有了MAC地址
Extended Community:
- BGP EVPN与MPLS VPN类似,为了控制路由的发送、接收,BGP EVPN同样存在VPN实例的概念(EVPN实例),与传统的IP VPN实例相同,EVPN实例存在RD和RT值,传递路由时使用扩展团体属性携带EVPN实例RT值
所以你看到的路由是这样的,我左边有个VPN实例,右边也有个VPN实例,有实例就有RD嘛,你这边RT得和对面的RT匹配上啊,那将来还有IP实例,那EVPN实例和IP实例怎么一起用呢?这就是难点了
Type 3路由:RT-3,Inclusive Multicast Route,集成组播路由
- 通告二层VNI和VTEP IP地址信息。
- 实现VTEP的自动发现和VXLAN隧道的动态建立
敲了这命令 就产生了Update报文,但前提要在bd里面把实例配了
三类不难啊 三类就长这样
Tpye 2类路由:RT-2,MAC/IP Advertisement Route,MAC/IP通告路由
- 通告MAC地址、ARP信息、IP主机路由(/32或/128)
- 在不同场景下携带的内容并不一致:
主要用于相同子网,做二层通信的时候,要对方的mac地址,通过mac路由就能获取到对方的mac地址,学到对方的mac地址,只不过出接口是对端的VTEP地址
当我们PC发出一个帧,被我学习到后,正常情况下我就会发送mac路由给到对端NVE设备
ARP路由就要牵扯到三层了,我的交换机能收集到你的arp信息,我也得有个ip地址啊,ARP是要收集的,我没有三层口我怎么收集啊
Type2-MAC路由:
- 通告主机MAC地址信息
首先PC1发送了流量,别管什么流量,交换机嘛学习mac嘛,很简单的道理,我只要通过接口学到你的mac以后,那我们就会自动生成一个二类的MAC路由,首先看RT啊,能不能接收,然后看VNI,VNI就会找到BD,所以我就学到了这个mac地址,我通过这个地址这个BD学到的
我们就不需要数据层面的泛洪了,就可以学到对方的MAC,我把学到的MAC打包成一个二类的EVPN路由发到你那边。
Type2-ARP路由:
- 通告主机ARP信息:
我们要发送ARP信息,就和上面的MAC路由一样,首先要学到他的MAC地址,MAC地址表学到MAC地址然后再生成MAC路由,一个道理。你ARP路由也肯定要在ARP表里面学到他的ARP信息,然后生成二类的ARP路由啊,无非就是MAC地址加一个ARP地址嘛
我要学到他的ARP信息我也得有一个三层口啊,他是BD10,我不就得建一个VBDIF10嘛,ARP是三层的啊,不走三层哪有什么ARP表啊。
如果要宣告ARP路由的话要配置如下命令
配完后他就可以通过ARP表,产生二类的ARP路由
我都发了 怎么路由表里还没有ARP路由啊,我们还需要做一件事,要去收集主机ARP信息
上图,上面是没有IP信息的,这两个不矛盾啊,都是二类的路由,上面就是MAC路由,下面就是ARP路由
ARP作用在哪里呢?
ARP路由应用场景:
ARP广播抑制:
- 减少ARP广播在VXLAN网络中的泛洪,从而降低网络资源占用
- 有两种方式:ARP广播变单播(需要VBDIF口,用VBDIF收集)、ARP二层代答(不需要VBDIF口,ARP信息收集就需要BD收集了)
ARP广播变单播:
上图,SW1通过ARP路由已经学到了PC2的ARP信息,PC1要找PC2,PC1发送ARP报文,SW1收到广播的ARP请求报文后将请求报文的目的MAC改成PC2的MAC,不用泛洪到其他的对端设备了,直接单播传递到对端
需要有三层口的,有三层口,学到发来的ARP路由以后,才能生成抑制表
ARP二层代答:
上图,SW1通过ARP路由已经学到了PC2的ARP信息,PC1要找PC2,PC1发送广播ARP请求,SW2就直接告诉PC1PC2的MAC地址了,不用泛洪到对端设备了
做代答的话就不需要三层口了,可以通过BD层面去收集ARP信息,然后去生成抑制表
网关场景下的虚拟机迁移:
- 当一台虚拟机从当前网关迁移到另一个网关下之后,新网关学习到该虚拟机的ARP(一般通过虚拟机发送免费ARP实现),并生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP路由将主机信息发送给虚拟机的原网关。
- 原网关收到后,感知到虚拟机的位置发生变化,触发ARP探测,当探测不到原位置的虚拟机时,撤销原位置虚拟机的ARP和主机路由
分布式网关下的跨子网通信:
- 分布式网关组网中VTEP设备即是L2网关,又是L3网关
重点在于两边要经过隧道,经过隧道互访的,你又是分布式的,问题来了,我这边有三层网关,你那边也有三层网关,VBDIF口,如果两边是一个网段,一边网关是254,一边网关是253,如果虚拟机迁移了,你还要去把网关地址给改一下啊。我们的目标是得让他俩边网关的地址不冲突。
你需要在网关下敲这个命令:
启用分布式网关,两边你都要敲
没开这功能之前 路由表很乱的,开了之后,我只发我这边的信息,他只发他那边的信息。
那我要不要把他俩的MAC地址改为同一个呢?首先不改的话启用分布式网关也没事,对面检测不到IP冲突,但是,如果虚拟机迁移到了对面,他的ARP缓存表里还是原先网关的MAC地址啊,所以我发送出去还是要找老的网关啊,所以啊也需要把mac配相同
- 所以在该组网下跨子网通信的实现方式并不唯一
- 根据接收报文的VTEP(入VTPE,Ingress VTEP)处理方式不同,可以为划分为(根据入接点的处理方式不同,分为非对称和对称,整体来讲取决于我们的入节点):
IRB叫集成路由桥接,其实就是集成二层和三层的处理转发查表,到底是对称还是非对称
非对称就是做二层三层查表,而出节点只做二层,对称就是入和出都做三层查表
这边有VBDIF10和20,我们现在2.1要访问1.2,对于2.1来讲,他要发给网关VBDIF20,VBDIF20收到,我解封装发现你要去的是1.2,那我查路由表啊,应该从VBDIF10中发出去(因为VBDIF10有1.0网段的直连路由)。就是我们的入接点做了一个三层查表,三层表发现从VBDIF发出去,然后再做二层(查MAC地址啊)这就是三层查表和二层查表,这和传统的VLANIF没什么区别,接下来我就从VBDIF10封装的VNI100,然后把包发出去,直接发到的是VTEP2上的BD10,因为我收到的包是VNI100,所以我知道了要交给BD10处理,这是二层查表。
对称就是我们直接发,都做三层查标。(要注意啊这个转发的前提条件是,我们要有IRB路由的,IRB里就会有三层的VNI,所以就会有这样的查表)。PC1发的报文,VTEP收到后,他会发现在VBDIF20里面就有对端的1.2的路由(IRB是主机路由,因为我们有IRB路由,对面发过来以后,我们是通过三层的实例里面去匹配的路由,接下来会出现两种实例,两种实例里面都会有RD和RT,然后还要看路由里面是如何进行导入的,也就是说之前我们就已经做好工作了,1.2的路由早就已经通过IRB发过去了)我查路由表发现,这有个主机路由嘛(1.2/32),VBDIF20直接在IP VPN实例中路由表中查找,这个实例就是用来区分三层租户的隔离的。发现里面有个1.2/32的路由,下一跳为对端的VTEP,关键在于我还得封装新的二层,因为你走三层了啊,源目MAC地址得变啊,头部里封装的是VNI1000,1000才会被这个实例处理啊,VTEP2收到以后发现1000对应的是VPN实例1的路由表啊,这时候查路由,要从VBDIF10直连出去,然后在做二层查表传到PC2。
关键在于我们这边都做三层。因为VBDIF接口和VPN实例绑定了,租户之间怎么隔离三层网络啊,还得靠VPN实例啊,不然怎么隔离啊
PS:华为实现方式为对称IRB转发。
PS:相比较于非对称IRB转发,新增了一个IP VPN实例以及其所绑定的L3 VNI概念,VBDIF接口需要绑定IP VPN实例,此时该VBDIF接口的路由学习、数据转发都被限制在该IP VPN实例中,与MPLS VPN类似。
IRB路由:EVPN RT&IP VPN RT
新增IP VPN实例之后,Type 2路由携带的RT值依旧是EVPN RT值,只是对端收到路由之后的处理行为存在区别:
也就是说IP VPN实例的RT在发的时候(出RT/ERT)是不携带的,你这个不配都可以,但是入(入RT/IRT)要配啊
上图,VTEP1配了EVPN的RT,当然他也有IP VPN实例,IP VPN的实例的ERT就没有什么用了,配不配的无所谓,他发的时候依然是EVPN RT的实例,到对端VTEP2收到以后,他的处理就分两步走了,首先啊,VTEP2也有EVPN实例和IP实例,我们跟两个实例分别做对比啊,如果和EVPN实例的IRT相同,就进入EVPN的路由表,如果和IP实例的IRT相同才会进这个路由表,因为过来的是/32的路由,一定要进这个路由表的
PS:只有当携带的RT值与EVPN IRT、IP VPN IRT都不同时,该路由才会被丢弃。
其他都好理解,就L3 VNI不懂,这是干什么的,不得三层隔离嘛,你俩个租户都是10网段都是有网关怎么隔离啊。他配的时候都叫VNI啊
右边PC2被三层网关学到了他的ARP表项了,生成IRB路由传递到对端
MAC Mobility扩展团体属性:
- 用于当VM从一个VTEP迁移到另外一个VTEP之下时,对外宣告该VM的位置移动
Type 5路由:RT-5,IP Prefix Advertisement Route,IP前缀路由
- 通告主机IP地址,也可以携带网段地址。
- 当携带主机IP地址时,主要用于分布式网关场景中的主机IP路由通告
- 当携带网段地址时,可以实现VXLAN网络中的主机访问外部网络
说白了这个路由就是引入的操作,引入就能看到五类的,比如说现在VTEP左边的连了外部网络,他要把外部网络引入进来,因为中间是通过BGP交互的啊,就能通过五类的路由发送到对端了,就能学到网段的路由