通过上一个实验,我们已经知道EVPN是一种二层VPN技术,控制平面采用MP-BGP通告EVPN路由信息,数据平面采用VXLAN封装方式转发报文。当租户的物理站点分散在不同位置时,EVPN可以基于已有的服务提供商或企业IP网络,为同一租户的相同子网提供二层互联;通过EVPN网关为同一租户的不同子网提供三层互联,并为其提供与外部网络的三层互联。
EVPN不仅继承了MP-BGP和VXLAN的优势,还提供了新的功能。EVPN具有如下特点:
简化配置:通过MP-BGP实现VTEP自动发现、VXLAN隧道自动建立、VXLAN隧道与VXLAN自动关联,无需用户手工配置,降低网络部署难度。
分离控制平面与数据平面:控制平面负责发布路由信息,数据平面负责转发报文,分工明确,易于管理。
支持对称IRB(Integrated Routing and Bridging,集成的路由和桥接):MP-BGP同时发布二层MAC地址和三层路由信息,VTEP既可以进行二层转发,也可以进行三层路由。这样,不仅可以保证流量采用最优路径转发,还可以减少广播流量。
在上个实验中,EVPN采用了Spine(核心)—Leaf(分支)的分层结构。Leaf层的设备作为VTEP对报文进行EVPN相关处理;Spine层为核心设备,根据报文的目的IP地址转发报文。EVPN网络中的设备属于同一个AS(Autonomous System,自治系统),为了避免在所有VTEP之间建立IBGP对等体,将核心设备配置为了RR(Route Reflector,路由反射器)。此时,RR通过发布、接收EVPN路由,实现了全网互通;同时不需要封装、解封装VXLAN报文,保证性能。
和VXLAN IP网关类似,EVPN网关也可以分为两种:
集中式EVPN网关:配置简单,但不同VXLAN之间的流量以及VXLAN访问外界网络的流量全部由集中式EVPN网关处理,网关压力较大。
分布式EVPN网关:配置比较复杂,但每台VTEP设备都可以作为EVPN网关,对本地站点的流量进行三层转发,缓解了网关的压力。
今天来看一下分布式EVPN网关配置实验。
组网需求
VSR1、VSR3为与服务器连接的VTEP设备,VSR2为与广域网连接的集中式EVPN网关设备,ISP-VFW为广域网内的三层设备,VSR-RR为RR,负责在路由器之间反射BGP路由。
虚拟机VM1和VM3同属于VXLAN10,VM2和VM4同属于VXLAN 20。相同VXLAN之间可以二层互通,确保虚拟机在站点之间进行迁移时用户的访问流量不会中断;不同VXLAN之间通过分布式EVPN网关实现三层互通;VXLAN与广域网之间通过边界网关实现三层互通。
实验环境
VMWare ESXi 6.7.0(ProLiant DL360 Gen9,48核心,128G内存)
H3C VSR1000(Version 7.1.064, Release 0621P18,4核心,8G内存)
H3C VFW1000(Version 7.1.064, ESS 1171P13,4核心,8G内存)
Windows 7旗舰版(测试用虚拟机,8核心,16G内存)
组网图
分布式EVPN网关配置组网图,和集中式EVPN网关组网图一样。
M地址指远程管理的带外管理口地址。新建一个vSwitch,所有线路均使用该vSwitch中端口组实现,建议将不同链路隔离进不同的VLAN,避免广播风暴。
配置步骤
1、配置IP地址和单播路由协议
调通底层网络,配置各接口的IP地址和子网掩码,并在IP核心网络内配置OSPF协议,和之前的实验配置基本相同。
将VM1和VM3的网关地址指定为192.168.2.1,将VM2和VM4的网关地址指定为192.168.10.1。
2、配置VSR1
开启L2VPN能力,并关闭远端MAC地址和远端ARP自动学习功能。配置BGP发布EVPN路由。配置接入服务器的接口GigabitEthernet3/0与VSI实例vpna关联,接入服务器的接口GigabitEthernet1/0/2与VSI实例vpnb关联。这几部分的配置和上个实验相同,不再占用篇幅。
跟上个实验相比,VSI实例下不再配置arp suppression enable,因为分布式网关可能需要泛洪相关ARP请求,所以不再进行抑制。
在VSI实例vpna下创建EVPN实例,并配置自动生成EVPN实例的RD和RT。同时创建VXLAN 10。
#
vsi vpna
vxlan 10
evpn encapsulation vxlan
route-distinguisher auto
vpn-target auto export-extcommunity
vpn-target auto import-extcommunity
在VSI实例vpnb下创建EVPN实例,并配置自动生成EVPN实例的RD和RT。同时创建VXLAN 20。
#
vsi vpnb
vxlan 20
evpn encapsulation vxlan
route-distinguisher auto
vpn-target auto export-extcommunity
vpn-target auto import-extcommunity
配置L3VNI的RD和RT。
#
ip vpn-instance vpna
route-distinguisher 1:1
#
address-family ipv4
vpn-target 2:2 import-extcommunity
vpn-target 2:2 export-extcommunity
#
address-family evpn
vpn-target 1:1 import-extcommunity
vpn-target 1:1 export-extcommunity
配置VSI虚接口VSI-interface1和VSI-interface2。
#
interface Vsi-interface1
ip binding vpn-instance vpna
ip address 192.168.2.1 255.255.255.0
mac-address 0001-0001-0001
local-proxy-arp enable
distributed-gateway local
#
interface Vsi-interface2
ip binding vpn-instance vpna
ip address 192.168.10.1 255.255.255.0
mac-address 0002-0002-0002
local-proxy-arp enable
distributed-gateway local
创建VSI虚接口VSI-interface3,在该接口上配置VPN实例vpna对应的L3VNI为1000。
#
interface Vsi-interface3
ip binding vpn-instance vpna
l3-vni 1000
配置VXLAN 10所在的VSI实例和接口VSI-interface1关联,配置VXLAN 20所在的VSI实例和接口VSI-interface2关联。
#
vsi vpna
gateway vsi-interface 1
#
vsi vpnb
gateway vsi-interface 2
3、配置VSR2
开启L2VPN能力,并关闭远端MAC地址和远端ARP自动学习功能。删除VSI虚接口VSI-interface1和VSI-interface2,移除VSI实例vpna和vpnb相关配置。
配置L3 VNI的RD和RT。
#
ip vpn-instance vpna
route-distinguisher 1:1
#
address-family ipv4
vpn-target 2:2 import-extcommunity
vpn-target 2:2 export-extcommunity
#
address-family evpn
vpn-target 1:1 import-extcommunity
vpn-target 1:1 export-extcommunity
创建VSI虚接口VSI-interface3,在该接口上配置VPN实例vpna对应的L3VNI为1000。
#
interface Vsi-interface3
ip binding vpn-instance vpna
l3-vni 1000
配置连接广域网的接口GigabitEthernet3/0与VPN实例vpna关联。
#
interface GigabitEthernet3/0
ip binding vpn-instance vpna
ip address 22.1.1.1 255.255.255.0
nat outbound
配置缺省路由,下一跳为广域网中某台设备的IP地址22.1.1.2。
#
ip route-static vpn-instance vpna 0.0.0.0 0 22.1.1.2
配置BGP发布EVPN路由,并将缺省路由引入到VPN实例vpna的BGP IPv4单播路由表中。
#
bgp 1234
peer 4.4.4.4 as-number 1234
peer 4.4.4.4 connect-interface LoopBack0
#
address-family l2vpn evpn
peer 4.4.4.4 enable
#
ip vpn-instance vpna
#
address-family ipv4 unicast
default-route imported
import-route static
4、配置VSR3
VSR3和VSR1的配置大抵相同,直接上配置。
#
ip vpn-instance vpna
route-distinguisher 1:1
#
address-family ipv4
vpn-target 2:2 import-extcommunity
vpn-target 2:2 export-extcommunity
#
address-family evpn
vpn-target 1:1 import-extcommunity
vpn-target 1:1 export-extcommunity
#
l2vpn enable
#
vsi vpna
gateway vsi-interface 1
vxlan 10
evpn encapsulation vxlan
route-distinguisher auto
vpn-target auto export-extcommunity
vpn-target auto import-extcommunity
#
vsi vpnb
gateway vsi-interface 2
vxlan 20
evpn encapsulation vxlan
route-distinguisher auto
vpn-target auto export-extcommunity
vpn-target auto import-extcommunity
#
interface GigabitEthernet3/0
xconnect vsi vpna
#
interface GigabitEthernet4/0
xconnect vsi vpnb
#
interface Vsi-interface1
ip binding vpn-instance vpna
ip address 192.168.2.1 255.255.255.0
mac-address 0001-0001-0001
local-proxy-arp enable
distributed-gateway local
#
interface Vsi-interface2
ip binding vpn-instance vpna
ip address 192.168.10.1 255.255.255.0
mac-address 0002-0002-0002
local-proxy-arp enable
distributed-gateway local
#
interface Vsi-interface3
ip binding vpn-instance vpna
l3-vni 1000
#
bgp 1234
peer 4.4.4.4 as-number 1234
peer 4.4.4.4 connect-interface LoopBack0
#
address-family l2vpn evpn
peer 4.4.4.4 enable
5、配置VSR4
配置VSR-RR作为RR路由反射器与其他路由器建立BGP连接, 配置发布EVPN路由,并关闭BGP EVPN路由的VPN-Target过滤功能。无需调整配置。
验证配置
1、验证分布式EVPN网关设备VSR1
查看EVPN自动发现的邻居信息,包含各VSI的IMET路由和MAC/IP路由。
display evpn auto-discovery imet
dis evpn auto-discovery macip-prefix
查看EVPN的ARP信息和MAC地址信息。
dis evpn route arp
dis evpn route mac
这个地方我有点慌,因为和官网介绍的结果不一样,不过我感觉应该是官网整理的时候出问题了,VSI1接口下面怎么会有VSI2接口的ARP信息呢?应该分开写才对啊!
查看EVPN路由表信息,因为绑定了VPN实例,所以记得带实例查看。
display evpn routing-table vpn-instance vpna
查看Tunnel接口信息,可以看到VXLAN模式的Tunnel接口处于UP状态。
display interface tunnel
查看VSI虚接口信息,可以看到VSI虚接口处于UP状态。
display interface vsi-interface
查看VSI的详细信息,可以看到VSI内创建的VXLAN、与VXLAN关联的VXLAN隧道、与VSI关联的VSI虚接口等信息。多了一个自动创建的VSI接口。
display l2vpn vsi verbose
查看VSI的MAC地址表项信息,可以看到已学习到的MAC地址信息。
对比组网拓扑可知:000c-29cb-2b41和000c-2949-0032为VSR1连接的虚拟机,Link ID为0,表示是本地直连的;对应的VSI name表示从哪个VSI上来的,此处分别对应vpna和vpnb。000c-2999-235a和000c-290b-6ea7为VSR3连接的虚拟机,Link ID为Tunnel1,结合tunnel接口信息,可以知道是从VSR3学习到的;对应的VSI name表示从哪个VSI上来的,此处分别对应vpna和vpnb。
对比看一下ARP表项信息,可以看到关键信息大抵相同。很遗憾,看不到另外的主机,也ping不通。
查看BGP l2vpn对等体信息。
display bgp l2vpn evpn
VSR1设备上的VPN实例vpna的路由信息如下:
查看FIB表项信息,可以看到已学习到了虚拟机的转发表项信息,都要加VPN实例了。
2、验证主机
对比组网拓扑,在VM4这台主机(192.168.10.188)上ping测VM1(192.168.2.160)和VM2(192.168.10.110),结果如下:
对比上个集中式EVPN网关实验,看一下tracert路径效果,是不是很神奇,10网段互访,中间出现了另一个网关的IP地址。
ping网关和ISP-VFW公网设备测试。
可以看到,四台虚拟机之间可以互访,并且都可以访问到网关;但是,网关之外的ISP-VFW设备访问异常。
debug测试,VFW-ISP收发报文正常。
而VSR2上就不正常了,他竟然把我的报文给丢了。这是不是BUG,我就说不清楚了,报文出去的时候好好的,回不去了。
总结
1、为了避免广播发送的ARP请求报文过多占用核心网络带宽,VTEP从本地站点、VXLAN隧道接收到ARP请求和ARP应答报文后,根据该报文在本地建立ARP泛洪抑制表项。后续当VTEP收到本站点内虚拟机请求其它虚拟机MAC地址的ARP请求时,优先根据ARP泛洪抑制表项进行代答。如果没有对应的表项,则将ARP请求泛洪到核心网。ARP泛洪抑制功能可以大大减少ARP泛洪的次数。
2、同网段的两台主机进行tracert,路径中间出现了另一个网关的IP地址,不过应该不是问题,只是显示一个IP,设备确实是经过了。
3、RT是一种BGP扩展团体属性,用于控制EVPN路由的发布与接收。也就是说, RT决定了本端的EVPN路由可以被哪些对端所接收,以及本端是否接收对端发来的EVPN路由。RT分为ERT(Export RT,本端发送EVPN路由时,携带的RT属性设置为ERT)和IRT(Import RT,本端设置接收的对端的EVPN路由属性)。本端在收到对端的EVPN路由时,将路由中携带的ERT与本端的IRT进行比较,只有两者相等时才接收该路由,否则丢弃该路由。