VPN(Virtual Private Network):也称VRF(Virtual Route Forwarding,虚拟路由及转发) ,目的是解决不同企业私网地址段相同,为了防止冲突,采用将相同私网地址放到不同的VRF表中。
一台设备由于可能同时连接了多个用户,这些用户(的路由)彼此之间需要相互隔离,那么这时候就用到了VRF,设备上每一个用户都对应一个VRF。设备除了维护全局IP路由表之外,还为每个VRF维护一张独立的IP路由表,这张路由表称为VRF路由表。要注意的是全局IP路由表,以及每一个VRF路由表都是相互独立或者说相互隔离的。
对于每一个VRF表,都具有路由区分符(Route Distinguisher:RD)和路由目标(Route Target:RT)两大属性。
RD(Route-Distinguisher,路由区分符):RD用来区分本地VRF,该属性仅本地有效。8个字节的RD+4个字节的IPv4地址组成96位VPNv4路由,使不唯一的IPv4地址转化为唯一的VPN-IPv4地址,该VPNv4路由在ISP域内传递(区分),RD给某VRF里面的路由打上标签,进而实现地址的复用而不产生冲突。
RT(Route Tagert):是BGP的扩展团体属性,它分成Import RT和Export RT,分别用于路由的导入、导出策略。
通过配置import和export RT,来控制收发路由。
EVPN(Ethernet Virtual Private Network)是一种用于二层网络互联的VPN技术,在VXLAN网络中引入EVPN作为VXLAN的控制平面。对于每一个EVPN,都具有路由区分符(Route Distinguisher:RD)和路由目标(Route Target:RT)两大属性,这些属性用于控制在VTEP之间发送或接收EVPN路由。
如下图所示,某企业在不同的数据中心中都拥有自己的VM,服务器1上的VM1属于VLAN 30,服务器2上的VM1属于VLAN 20,服务器1和服务器2位于相同网段。现需要配置通过VXLAN实现相同网段用户通信。
相同网段用户通信时,EVPN需要发布Type2和Type3路由,并只使用二层VNI,本端和对端的二层VNI需要一致。
(1)VTEP之间通过发布Type3路由,用于在VTEP之间相互通告二层VNI、VTEP IP信息,通过建立头端复制列表,实现VTEP设备的自动发现和VXLAN隧道的动态建立。
(2)VTEP之间通过发布Type2路由,实现两端VTEP相互学习主机MAC。
RD值,只在本地有效,不同的EVPN实例使用不同的RD值,在本地不能冲突。
相同网段用户通信时,发布EVPN路由时,发送端VTEP会携带本地EVPN实例出方向VPN-Target属性列表中的所有VPN-Target属性。当接收端VTEP收到的EVPN路由携带的VPN-Target属性,与自己在EVPN实例的入方向VPN-Target属性列表有相同条目时,才允许接收该EVPN路由。所以本地EVPN实例出方向VPN-Target属性值(ERT)需要与对端的EVPN实例入方向VPN-Target属性值(IRT)有相同的值。
如下仅描述在VXLAN的Overlay网络中的关键配置要求以及NVE设备的具体配置样例:
定义广播域BD为20,BD作为VXLAN网络的实体,通过BD转发流量。相同网段用户通信时,对端的BD需要与本端一致。
Device1的配置文件:
#
bridge-domain 20
Device3的配置文件:
#
bridge-domain 20
定义二层VNI为5020,VNI将以1:1方式映射到广播域BD 20。相同网段用户通信时,本端和对端的二层VNI需要一致。
Device1的配置文件:
vxlan vni 5020
Device3的配置文件:
vxlan vni 5020
在BD下创建EVPN实例,并配置该EVPN实例的RD值、本地EVPN实例出方向和入方向的VPN-Target属性。相同网段用户通信时,本端设备会发送携带MAC信息的Type2路由至对端,该Type2路由会携带BD下的ERT,对端相同BD需要接收该Type2路由中的MAC信息才能进行二层互通,所以本地EVPN实例出方向VPN-Target属性值需要与对端的EVPN实例入方向VPN-Target属性值相同。
Device1的配置文件:
evpn
route-distinguisher 10:1
vpn-target 100:5010 export-extcommunity
vpn-target 100:5020 import-extcommunity
Device3的配置文件:
evpn
route-distinguisher 10:3
vpn-target 100:5020 export-extcommunity
vpn-target 100:5010 import-extcommunity
配置服务器接入到VXLAN网络,需要配置接入侧接口工作在二层。
VM1所属的VLAN ID为VLAN 30,所以设置允许通过的VLAN为VLAN 30,并以1:1方式映射到广播域BD 20。
VM2所属的VLAN ID为VLAN 20,所以设置允许通过的VLAN为VLAN 20,并以1:1方式映射到广播域BD 20。
Device1的配置文件:
#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 30
bridge-domain 20
Device3的配置文件:
#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 20
bridge-domain 20
创建环回口地址,该地址将作为NVE设备的IP地址。
Device1的配置文件:
#
interface LoopBack1
ip address 2.2.2.2 255.255.255.255
Device3的配置文件:
#
interface LoopBack1
ip address 4.4.4.4 255.255.255.255
创建VTEP IP并配置VNI(即二层VNI)的头端复制列表。
Device1的配置文件:
#
interface Nve1
source 2.2.2.2
vni 5020 head-end peer-list protocol bgp
Device3的配置文件:
#
interface Nve1
source 4.4.4.4
vni 5020 head-end peer-list protocol bgp
如下图所示,某用户在不同的数据中心NVE设备下都拥有自己的VM,其中服务器1上的VM1属于VLAN 10,服务器2上的VM1属于VLAN 20,且位于不同网段;服务器1通过Device2接入VXLAN网络,服务器2通过Device3接入VXLAN网络。现需要通过VXLAN分布式网关实现不同网段中VM的互通。
跨网段用户通信,需要发布Type2(或者Type5)路由。通过Type2发布主机路由时,需要用到二层VNI和三层VNI。通过Type5发布网段路由时,只需要用到三层VNI。
使用Type5路由时,有如下限制:
(1)网关设备下连接的网段在整个网络中唯一。
(2)在配置发布IP前缀类型的路由之后,需执行arp direct-route enable命令将主机IP地址发布为直连路由,此时虚拟机的迁移会受到限制。
RD值,只在本地有效,不同的EVPN实例使用不同的RD,在本地不能冲突。
RT值的配置需要满足如下要求:
RD值,只在本地有效,不同的L3VPN实例使用不同的RD,在本地不能冲突。
RT值的配置需要满足如下要求:
如下仅描述在VXLAN的Overlay网络中的关键配置要求以及NVE设备的具体配置样例:
分别定义广播域BD,BD作为VXLAN网络的实体,通过BD转发流量。跨网段用户通信时,对端的BD与本端不一致。
Device2的配置文件:
#
bridge-domain 10
Device3的配置文件:
#
bridge-domain 20
分别定义二层VNI,VNI将以1:1方式映射到广播域BD。跨网段用户通信时,对端的二层VNI与本端不一致。
Device2的配置文件:
vxlan vni 10
Device3的配置文件:
vxlan vni 20
在BD下创建EVPN实例,并配置该EVPN实例的RD值、本地EVPN实例出方向VPN-Target属性 。
跨网段用户通信发布Type2路由时,因为需要对端的L3VPN路由表学到本地的主机路由,又由于本地的Type2路由会携带本端BD下的ERT,所以本地EVPN实例出方向VPN-Target属性值需要与对端的L3VPN实例入方向VPN-Target属性值有相同的值。
Device2的配置文件:
evpn
route-distinguisher 10:2
vpn-target 100:5020 export-extcommunity
Device3的配置文件:
evpn
route-distinguisher 10:3
vpn-target 100:5030 export-extcommunity
创建用户的L3VPN实例,如vpn1。
Device2的配置文件:
#
ip vpn-instance vpn1
Device3的配置文件:
#
ip vpn-instance vpn1
在vpn1下定义RD值、用于EVPN的出方向和入方向的VPN-Target属性。
跨网段用户通信发布Type2路由时,本地L3VPN实例入方向VPN-Target属性值(eIRT)需要与对端的EVPN实例出方向VPN-Target属性值(ERT)有相同的值。
Device2的配置文件:
ipv4-family
route-distinguisher 20:2
vpn-target 100:5030 import-extcommunity evpn
Device3的配置文件:
ipv4-family
route-distinguisher 20:2
vpn-target 100:5020 import-extcommunity evpn
在vpn1中定义三层VNI5010,三层VNI用来标识L3VPN,因为与对端在同一个VPN中,对端的三层VNI与本端一致。
Device2的配置文件:
vxlan vni 5010
Device3的配置文件:
vxlan vni 5010
跨网段用户通信,所以创建Vbdif接口。
使能该接口为VXLAN分布式网关。并将该接口加入到vpn1中。
Device2的配置文件:
#
interface Vbdif10
ip binding vpn-instance vpn1
ip address 10.1.1.1 255.255.255.0
mac-address 0000-5e00-0102
vxlan anycast-gateway enable
arp collect host enable
Device3的配置文件:
#
interface Vbdif20
ip binding vpn-instance vpn1
ip address 20.1.1.1 255.255.255.0
vxlan anycast-gateway enable
arp collect host enable
配置服务器接入到VXLAN网络,需要配置接入侧接口工作在二层。VM1所属的VLAN ID为VLAN 10,所以设置允许通过的VLAN为VLAN 10,将以1:1方式映射到广播域BD 10,同理配置VM2 的接入。
Device2的配置文件:
#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 10
bridge-domain 10
Device3的配置文件:
#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 20
bridge-domain 20
创建环回口地址,该地址将作为NVE设备的IP地址。
Device2的配置文件:
#
interface LoopBack1
ip address 2.2.2.210 255.255.255.255
Device3的配置文件:
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
创建VTEP IP并配置VNI(即二层VNI)的头端复制列表。
Device2的配置文件:
#
interface Nve1
source 2.2.2.210
vni 10 head-end peer-list protocol bgp
Device3的配置文件:
#
interface Nve1
source 3.3.3.3
vni 20 head-end peer-list protocol bgp
配置BGP EVPN邻居,并将EVPN的发布路由类型设置为Type2(即irb)。
Device2的配置文件:
#
bgp 100 instance evpn1
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
#
ipv4-family vpn-instance vpn1
import-route direct
advertise l2vpn evpn
#
l2vpn-family evpn
policy vpn-target
peer 1.1.1.1 enable
peer 1.1.1.1 advertise irb
Device3的配置文件:
#
bgp 100 instance evpn1
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
#
ipv4-family vpn-instance vpn1
import-route direct
advertise l2vpn evpn
#
l2vpn-family evpn
policy vpn-target
peer 1.1.1.1 enable
peer 1.1.1.1 advertise irb