VXLAN-EVPN

静态VXLAN的问题:

  • N台设备建立隧道,最高可达N(N-1)/2次头端列表配置
  • 只能通过ARP广播的方式学习远端MAC地址

也就是说:

  • 对于静态的VXLAN,该方案没有控制平面,所以只能通过数据平面的流量泛洪进行VTEP发现和主机信息(包括:MAC地址、IP地址、VNI、VTEP地址)的学习,这种方式导致VXLAN网络存在很多泛洪流量
  • 为了解决这一问题,VXLAN引入了BGP evpn作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等,从而避免了不必要的数据流量泛洪

EVPNEthernet Virtual Private Network,以太网虚拟专用网

  • RFC 7432,BGP MPLS-based Ethernet VPNs
  • 颠覆了传统L2VPN数据平面学习MAC地址的方式,引入控制平面学习MACIP指导数据转发,实现了转控分离
  • 随着技术发展,渐渐开始统一了各种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-3Inclusive Multicast Route,集成组播路由

  • 通告二层VNI和VTEP IP地址信息。
  • 实现VTEP的自动发现VXLAN隧道的动态建立

敲了这命令 就产生了Update报文,但前提要在bd里面把实例配了

三类不难啊 三类就长这样

Tpye 2类路由:RT-2MAC/IP Advertisement RouteMAC/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-5IP Prefix Advertisement RouteIP前缀路由

  • 通告主机IP地址,也可以携带网段地址。
  • 当携带主机IP地址时,主要用于分布式网关场景中的主机IP路由通告
  • 当携带网段地址时,可以实现VXLAN网络中的主机访问外部网络

说白了这个路由就是引入的操作,引入就能看到五类的,比如说现在VTEP左边的连了外部网络,他要把外部网络引入进来,因为中间是通过BGP交互的啊,就能通过五类的路由发送到对端了,就能学到网段的路由

### VXLAN EVPN集中式网关配置及工作原理 #### 配置概述 VXLAN (Virtual Extensible LAN) 技术通过封装原始以太帧来实现跨越三层网络的二层互联,而EVPN (Ethernet Virtual Private Network) 则提供了更高效的MAC地址管理和多租户支持机制。当两者结合形成VXLAN-EVPN架构时,在集中式网关模式下,所有的流量都会被引导至一个中心节点处理,该节点负责执行ARP解析以及跨子网通信等功能。 #### 工作流程描述 在VXLAN-EVPN环境中设置集中式网关意味着只有特定的一台或多台设备承担着作为默认网关的角色。这些设备不仅管理其直连接口所属广播域内的终端访问互联网或其他远程站点的能力,同时也充当不同VNI间转发路径上的关键环节。每当有来自内部客户端发往外界的数据包到达这里时,它会被解封并依据目的IP地址查找相应的下一跳信息;反之亦然,对于进入园区内并向某个具体位置传输的信息流,则需在此处完成必要的转换操作以便能够按照正确的隧道端点送达目标机器[^1]。 #### 主要组件说明 - **VTEP(VXLAN Tunnel End Point)**: 实现VXLAN报文的封装与解封装功能; - **BGP EVPN**: 使用扩展属性通告MAC/IP绑定关系、主机可达性和服务策略等信息给其它参与成员知晓; - **IRB(Integrated Routing and Bridging)** 接口 : 结合路由和桥接特性于一体,允许L2/L3混合型业务顺利开展。 #### 具体实施步骤 为了简化理解过程,下面给出一段Python伪代码用于模拟上述提到的部分核心逻辑: ```python def configure_vtep(device_name, vni_id, loopback_ip): """配置 VTEP 设备""" device_name.execute(f'interface nve1') device_name.execute(f'no shutdown') device_name.execute(f'source-interface {loopback_ip}') device_name.execute(f'member vni {vni_id}') def setup_bgp_evpn(neighbor_ips, as_number): """初始化 BGP-EVPN 协议实例并与对等体建立会话""" bgp_instance.start(as_num=as_number) for ip in neighbor_ips: bgp_instance.add_neighbor(ip) def create_irb_interfaces(vbdif_names, gateway_ips): """创建 IRB 类型接口供 ARP 解析使用""" for name, gw_ip in zip(vbdif_names, gateway_ips): interface.create(name=name, type='irb', address=gw_ip) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值