数据中心一直使用VXLAN当做隧道协议,但是VXLAN没有自己的控制面协议,EVPN本来就可以传递MAC信息,IP信息,也可以传递VNI。就将EVPN做了改造(只把标签改了VNI)。
为什么二层一定需要一个控制面?
1.N个节点需要创建N*(N-1)/2条隧道,配置工作量大。
2.VXLAN设备收到BUM流量会给所有隧道泛洪,泛洪流量大
BGP EVPN使用BGP传递路由,路由的类型是EVPN(EVPN是一种地址族,可以传递的路由类型特别多,可以传递IPV4形成的路由,VPNV4形成的路由,甚至可以传递MAC地址形成的路由)。是一个控制面协议,但是不是只能给VXLAN当做控制面协议,也可以给其他的协议当做控制面协议使用。控制层面可以控制泛洪流量,也可以控制建立隧道
RT决定了是否传递路由,是控制平面;VNI决定了是否建立隧道是转发平面。
跨子网通信都是要先找自己的网关,找到自己网关之前都是二层通信,不管中间经过了几台设备。找到网关之后查路由表,要经过三层转发(不管经过了多少跳),找到对方网关之后再进行二层转发。
BGP EVPN通过扩展 BGP协议新定义了几种BGP EVPN路由(在MP_REACH_NLRI属性中新定义了几种NLRI,称为EVPN NLRI)。
这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此BGP EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。
不会出现二层环路,因为封装到了IP(且BGP有水平分割原则)
TYPE 2路由(MAC/IP路由):用于主机MAC地址/ARP/IP路由通告,主机路由不是凭空来的,是有PC触发流量产生的路由
TYPE 3路由(Inclusive Multicast路由):用于传递二层VNI和VTEP IP地址信息,实现VTEP的自动发现和VXLAN隧道的动态建立,实现BUM报文转发
如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制列表,用于后续BUM报文转发。
TYPE 5路由(IP前缀路由):用于主机MAC地址/ARP/IP路由通告,外部网络路由通告
主机MAC地址通告
L2网关将学习到的MAC地址加工后(加工RD,RT等信息),通过BGP传递

主机ARP通告


以上过程,在左边一部分进行的是三层转发,而数据到了右边部分进行的是二层转发,这就是非对称IRB转发。
缺点:需要建立多余的BD
两边都执行三层转发
缺点:中间要有一个互联的IP地址(稍后会把这个省略,因为互联地址主要是为了下一跳解析到的MAC,而这个MAC地址会由IRB路由携带)

三层 IP VPN-instance 路由表
二层 EVPN VPN-instance MAC表

此时VTEP之间传递IRB路由(多了L3 VNI),VTEP1的BD20、VTEP2的BD10 之间的IRB路由学习由路由携带RT值控制。
两边BD的VNI不相同,无法直接二层互通,但是建立三层VNI(三层VNI相同),因此可以三层互通
EVPN RT、IP VPN RT(1)
新增IP VPN实例之后,BGP EVPN在传递TYPE 2路由时携带的RT值依旧是EVPN RT值,只是对端收到路由之后的处理行为存在区别:


通过EVPN Router's MAC Extended Community这一扩展团体属性子属性,BGP EPVN传递VTER自身的Router MAC,该MAC地址为NVE接口的MAC地址。

广播变成单播
因为VTEP已经通过路由获得了PC2的MAC地址,所以VTEP可以直接向VTEP2单播发送。
VTEP1首先能学习到PC2的MAC地址形成ARP广播抑制表才可以进行ARP广播抑制

ARP广播抑制功能的实现依赖于ARP广播抑制表,而该表项的形成依赖于BGP EVPN携带的TYPE 2路由(IRB路由,主机ARP路由)
默认情况下L3网关不会由本地的ARP信息生成BGP EVPN路由,需要手动使能BGP EVPN主机信息收集功能。之后VTEP会依据ARP信息生成IRB路由。

全网开启BGP EVPN主机信息收集功能之后,L3网关上将学习到全部主机的32位路由,这使得L3网关在转发属于同一个BD之间的流量时完全可以依赖主机路由进行三层IRB对称转发。
为此可以在L3网关的VBDIF接口上开启本地ARP代理,VBDIF 接口会相应下连主机对同网段IP地址的ARP请求,之后对该同网段IP的访问可以由L3网关进行三层转发完成。


MAC地址迁移后,会使用序列号最大的路由

- 1.开启over支持evpn的功能
- 2.建立EVPN BGP对等体关系
- 3.创建BD,绑定VNI与EVPN实例
- 4.进入接口,绑定BD
- 5.进入隧道接口,配置源与头部复制列表
-
- CE2
- evpn-overlay enable //开启支持evpn overlay的功能
- bgp 123
- peer 3.3.3.3 as-number 123
- peer 3.3.3.3 connect-interface l0
- #
- l2vpn-family evpn //建立EVPN邻居
- policy vpn-target
- peer 3.3.3.3 enable
- #
- bridge-domain 1030 //创建BD
- vxlan vni 1030
- evpn //创建EVPN实例,绑定到BD里面
- route-distinguisher 1030:2
- vpn-target 1030:1030 export-extcommunity
- vpn-target 1030:1030 import-extcommunity
- #
- bridge-domain 2040
- vxlan vni 2040
- evpn
- route-distinguisher 2040:2
- vpn-target 2040:2040 export-extcommunity
- vpn-target 2040:2040 import-extcommunity
- #
- interface G1/0/9.10 mode l2
- encapsulation dot1q vid 10
- bridge-domain 1030
- #
- interface G1/0/9.20 mode l2
- encapsulation dot1q vid 20
- bridge-domain 2040
- #
- int Nve 1 //进入到VNI里面
- source 2.2.2.2
- vni 1030 head-end peer-list protocol bgp //1030隧道根据BGP来建立
- vni 2040 head-end peer-list protocol bgp
- CE1:
- 1.开启over支持evpn的功能
- 2.建立BGP EVPN对等体关系,且配置反射客户端与通告ARP路由功能
- 3.创建BD,绑定VNI与EVPN实例
- 4.配置VBDIF地址及arp collect host enable
- 5.进入隧道接口,配置源地址与头部复制列表
- CE2:
- 1.开启over支持evpn的功能
- 2.建立EVPN BGP对等体关系,并通告arp路由功能
- 3.创建BD,绑定VNI与EVPN实例
- 4.进入接口,绑定BD
- 5.进入隧道接口,配置源与头部复制列表
-
- CE1
- evpn-overlay enable
- bridge-domain 1030
- vxlan vni 1030
- evpn
- route-distingusisher 1030:1
- vpn-target 1030:1030 export-extocommunity
- vpn-target 1030:1030 import-extcommunity
- #
- bridge-domain 2040
- vxlan vni 2040
- evpn route-distinguisher 2040:1
- vpn-target 2040:2040 export-extcommunity
- vpn-tartge 2040:2040 import-extcommunity
- #
- interface vbdif1030
- ip add 192.168.1.1 24
- interface vbdif 2040
- ip add 192.168.2.1 24
- #
- bgp 123
- peer 2.2.2.2 as-number 123
- peer 2.2.2.2 connect-interface l0
- peer 3.3.3.3 as-number 123
- peer 3.3.3.3 connect-interface l0
- #
- l2vpn-family evpn
- policy vpn-target
- peer 2.2.2.2 enable
- peer 2.2.2.2 relect0clinet
- peer 2.2.2.2 advertise arp
- peer 3.3.3.3 enable
- peer 3.3.3.3 relect-client
- peer 3.3.3.3 advertise arp
- #
- interface Nve1
- source 1.1.1.1
- vni 1030 head-end peer-list protocol bgp
- vni 2040 head-end peer-list protocol bgp
-
- CE2
- evpn-overlay enable
- bridge-domain 1030
- vxlan vni 1030
- evpn
- route-distinguisher 1030:2
- vpn-target 1030:1030 export-extcommunity
- vpn-target 1030:1030 import-extcommunity
- #
- interface G1/0/9.10 mode l2
- encapsulation dot1q vid 10
- bridge-domain 1030
- #
- bgp 123
- peer 1.1.1.1 as-number 123
- peer 1.1.1.1 connect-interface l0
- l2vpn-family evpn
- policy vpn-target
- peer 1.1.1.1 enable
- peer 1.1.1.1 advertise arp
- interface Nve 1
- source 2.2.2.2
- vni 1030 head-end peer-list protocol bgp
-
- CE3
- evpn-overlay enable
- bridge-domain 2040
- vxlan vni 2040
- evpn route-distinguisher 2040:3
- vpn-target 2040:2040 export-extcommunity
- vpn-target 2040:2040 import-extommunity
- #
- interface G1/0/9.10 mode l2
- encapsulation dot1q vid 40
- bridge-domain 2040
- #
- bgp 123
- peer 1.1.1.1 as-number 123
- peer 1.1.1.1 connect-interface l0
- l2vpn-family evpn
- policy vpn-target
- peer 1.1.1.1 enable
- peer 1.1.1.1 advertise arp
- #
- interface Nve 1
- sorece 3.3.3.3
- vni 2040 head-end peer-list protocol bgp
-
- CE1
- interface vbdif1030
- arp collect host enable //主机收集功能
- CE2
- evpn-overlay enable
-
- bridge-domain 1030
- vxlan vni 1030
- evpn
- route-distinguisher 1030:1030
- vpn-target 1030:1030 export-extcommunity
- vpn-target 1234:1234 export-extcommunity
- vpn-target 1030:1030 import-extcommunity
- #
- bridge-domain 2040
- vxlan vni 2040
- evpn
- route-distinguisher 2040:2040
- vpn-target 2040:2040 export-extcommunity
- vpn-target 1234:1234 export-extcommunity
- vpn-target 2040:2040 import-extcommunity
- ###
- ip vpn-instance vpn1
- route-distinguisher 1234:1234
- vpn-target 1234:1234 export-extcommunity evpn
- vpn-target 1234:1234 import-extcommunity evpn
- vxlan vni 1234
- #
- interface GE1/0/9
- undo shutdown
- #
- interface GE1/0/9.30 mode l2
- encapsulation dot1q vid 10
- bridge-domain 1030
- #
- interface GE1/0/9.40 mode l2
- encapsulation dot1q vid 20
- bridge-domain 2040
- #
- interface Vbdif1030
- ip binding vpn-instance vpn1
- ip address 192.168.1.1 255.255.255.0
- mac-address 0000-5e00-1030
- vxlan anycast-gateway enable
- arp collect host enable
- #
- interface Vbdif2040
- ip binding vpn-instance vpn1
- ip address 192.168.2.1 255.255.255.0
- mac-address 0000-5e00-2040
- vxlan anycast-gateway enable //对外界声明是一个分布式网关
- arp collect host enable //通过arp提取出IP MAC地址等信息放到对应的表项里面
- #
- bgp 123
- peer 3.3.3.3 as-number 123
- peer 3.3.3.3 connect-interface LoopBack0
- ipv4-family unicast
- peer 3.3.3.3 enable
- l2vpn-family evpn
- policy vpn-target
- peer 3.3.3.3 enable
- Y
- peer 3.3.3.3 advertise irb
- #
- interface Nve1
- source 2.2.2.2
- vni 1030 head-end peer-list protocol bgp
- vni 2040 head-end peer-list protocol bgp
- CE3
- evpn-overlay enable
- bridge-domain 1030
- vxlan vni 1030
- evpn
- route-distinguisher 1030:1030
- vpn-target 1030:1030 export-extcommunity
- vpn-target 1234:1234 export-extcommunity
- vpn-target 1030:1030 import-extcommunity
- #
- bridge-domain 2040
- vxlan vni 2040
- evpn
- route-distinguisher 2040:2040
- vpn-target 2040:2040 export-extcommunity
- vpn-target 1234:1234 export-extcommunity
- vpn-target 2040:2040 import-extcommunity
- #
- ip vpn-instance vpn1
- ipv4-family
- route-distinguisher 1234:1234
- vpn-target 1234:1234 export-extcommunity evpn
- vpn-target 1234:1234 import-extcommunity evpn
- vxlan vni 1234
- #
- interface GE1/0/9
- undo shutdown
- #
- interface GE1/0/9.30 mode l2
- encapsulation dot1q vid 30
- bridge-domain 1030
- #
- interface GE1/0/9.40 mode l2
- encapsulation dot1q vid 40
- bridge-domain 2040
- #
- interface Vbdif1030
- ip binding vpn-instance vpn1
- ip address 192.168.1.1 255.255.255.0
- mac-address 0000-5e00-1030
- vxlan anycast-gateway enable
- arp collect host enable
- #
- interface Vbdif2040
- ip binding vpn-instance vpn1
- ip address 192.168.2.1 255.255.255.0
- mac-address 0000-5e00-2040
- vxlan anycast-gateway enable
- arp collect host enable
- #
- bgp 123
- peer 2.2.2.2 as-number 123
- peer 2.2.2.2 connect-interface LoopBack0
- ipv4-family unicast
- peer 2.2.2.2 enable
- l2vpn-family evpn
- policy vpn-target
- peer 2.2.2.2 enable
- Y
- peer 2.2.2.2 advertise irb
- #
- interface Nve1
- source 3.3.3.3
- vni 1030 head-end peer-list protocol bgp
- vni 2040 head-end peer-list protocol bgp