VPN
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
RD(Route-Distinguisher,路由区分符):RD用来区分本地VRF,该属性仅本地有效。8个字节的RD 4个字节的IPv4地址组成96位VPNv4路由,使不唯一的IPv4地址转化为唯一的VPN-IPv4地址,该VPNv4路由在ISP域内传递(区分),RD给某VRF里面的路由打上标签,进而实现地址的复用而不产生冲突。
RT
RT(Route Tagert):是BGP的扩展团体属性,它分成Import RT和Export RT,分别用于路由的导入、导出策略。
通过配置import和export RT,来控制收发路由。
- 当从VRF表中导出路由时,要用export RT对VRF路由进行标记。
- 当往VRF表中导入路由时,只有所带RT标记与该VRF表中任意一个import RT相符的路由才会被导入到VRF表中。
EVPN
EVPN(Ethernet Virtual Private Network)是一种用于二层网络互联的VPN技术,在VXLAN网络中引入EVPN作为VXLAN的控制平面。对于每一个EVPN,都具有路由区分符(Route Distinguisher:RD)和路由目标(Route Target:RT)两大属性,这些属性用于控制在VTEP之间发送或接收EVPN路由。
相同网段互通场景下,如何配置RD、RT?
组网需求
如下图所示,某企业在不同的数据中心中都拥有自己的VM,服务器1上的VM1属于VLAN 30,服务器2上的VM1属于VLAN 20,服务器1和服务器2位于相同网段。现需要配置通过VXLAN实现相同网段用户通信。
配置通过VXLAN实现相同网段用户通信组网图
配置关键点分析
1、关于VNI,配置有哪些要求?
相同网段用户通信时,EVPN需要发布Type2和Type3路由,并只使用二层VNI,本端和对端的二层VNI需要一致。
(1)VTEP之间通过发布Type3路由,用于在VTEP之间相互通告二层VNI、VTEP IP信息,通过建立头端复制列表,实现VTEP设备的自动发现和VXLAN隧道的动态建立。
(2)VTEP之间通过发布Type2路由,实现两端VTEP相互学习主机MAC。
2、 关于EVPN实例的RD和RT值,配置有哪些要求?
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设备的具体配置样例:
Overlay网络中关键配置要求及举例
定义广播域BD为20,BD作为VXLAN网络的实体,通过BD转发流量。相同网段用户通信时,对端的BD需要与本端一致。
Device1的配置文件:
代码语言:javascript复制#
bridge-domain 20
Device3的配置文件:
代码语言:javascript复制#
bridge-domain 20
定义二层VNI为5020,VNI将以1:1方式映射到广播域BD 20。相同网段用户通信时,本端和对端的二层VNI需要一致。
Device1的配置文件:
代码语言:javascript复制vxlan vni 5020
Device3的配置文件:
代码语言:javascript复制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的配置文件:
代码语言:javascript复制evpn
route-distinguisher 10:1
vpn-target 100:5010 export-extcommunity
vpn-target 100:5020 import-extcommunity
Device3的配置文件:
代码语言:javascript复制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的配置文件:
代码语言:javascript复制#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 30
bridge-domain 20
Device3的配置文件:
代码语言:javascript复制#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 20
bridge-domain 20
创建环回口地址,该地址将作为NVE设备的IP地址。
Device1的配置文件:
代码语言:javascript复制#
interface LoopBack1
ip address 2.2.2.2 255.255.255.255
Device3的配置文件:
代码语言:javascript复制#
interface LoopBack1
ip address 4.4.4.4 255.255.255.255
创建VTEP IP并配置VNI(即二层VNI)的头端复制列表。
Device1的配置文件:
代码语言:javascript复制#
interface Nve1
source 2.2.2.2
vni 5020 head-end peer-list protocol bgp
Device3的配置文件:
代码语言:javascript复制#
interface Nve1
source 4.4.4.4
vni 5020 head-end peer-list protocol bgp
跨网段互通场景下,如何配置RD、RT?
组网需求
如下图所示,某用户在不同的数据中心NVE设备下都拥有自己的VM,其中服务器1上的VM1属于VLAN 10,服务器2上的VM1属于VLAN 20,且位于不同网段;服务器1通过Device2接入VXLAN网络,服务器2通过Device3接入VXLAN网络。现需要通过VXLAN分布式网关实现不同网段中VM的互通。
配置通过VXLAN实现跨网段用户通信组网图
配置关键点分析
1、关于VNI,配置有哪些要求?
跨网段用户通信,需要发布Type2(或者Type5)路由。通过Type2发布主机路由时,需要用到二层VNI和三层VNI。通过Type5发布网段路由时,只需要用到三层VNI。
- VTEP之间通过发布Type2的主机路由,实现分布式网关场景下跨网段主机之间的互通。在分布式VXLAN网络中,一般使用Type2路由通告主机路由和主机ARP,此时也可选择配置ARP广播报文抑制功能,并能支持虚拟机迁移。
- VTEP之间通过发布Type5的网段路由,实现分布式网关场景下跨网段主机之间的互通,减少主机路由的发布。
使用Type5路由时,有如下限制:
(1)网关设备下连接的网段在整个网络中唯一。
(2)在配置发布IP前缀类型的路由之后,需执行arp direct-route enable命令将主机IP地址发布为直连路由,此时虚拟机的迁移会受到限制。
2、关于EVPN实例的RD和RT值,配置有哪些要求?
RD值,只在本地有效,不同的EVPN实例使用不同的RD,在本地不能冲突。
RT值的配置需要满足如下要求:
- 跨网段用户通信,发送端发布Type2的路由时,会携带本地EVPN实例出方向VPN-Target属性列表中的所有VPN-Target属性(ERT)。当该EVPN路由与接收端中对应的L3VPN实例(L3VPN实例由L3 VNI确定)中的入方向VPN-Target属性列表中的条目相同时,才允许EVPN路由交叉到L3VPN实例路由表。所以发送端EVPN实例出方向VPN-Target属性值(ERT)需要与接收端的L3VPN实例入方向VPN-Target属性值(eIRT)有相同的值。
- 跨网段用户通信,发送端发布Type5的网段路由时,会携带L3VPN实例出方向VPN-Target属性列表中的所有VPN-Target属性(ERT)。当该EVPN路由与接收端中对应的L3VPN实例(L3VPN实例由L3 VNI确定)中的入方向VPN-Target属性列表中的条目相同时,才允许EVPN路由交叉到L3VPN实例路由表。所以发送端L3VPN实例出方向VPN-Target属性值(ERT)需要与接收端的L3VPN实例入方向VPN-Target属性值(eIRT)有相同的值。
3、关于L3VPN实例的RD和RT值,配置有哪些要求?
RD值,只在本地有效,不同的L3VPN实例使用不同的RD,在本地不能冲突。
RT值的配置需要满足如下要求:
- 跨网段用户通信,发送端发布Type2路由时,L3VPN实例中的VPN-Target属性如上所示,不再赘述。
- 跨网段用户通信,发送端发布Type5的网段路由时,会携带发送端L3VPN实例出方向VPN-Target属性列表中的所有VPN-Target属性(eERT)。当该EVPN路由与接收端相同的L3VPN实例的入方向VPN-Target属性列表有相同条目时,才允许该网段路由交叉到L3VPN实例路由表。所以发送端L3VPN实例出方向VPN-Target属性值(eERT)需要与接收端的L3VPN实例入方向VPN-Target属性值(eIRT)有相同的值。
总体配置关键配置步骤及要求
如下仅描述在VXLAN的Overlay网络中的关键配置要求以及NVE设备的具体配置样例:
Overlay网络中关键配置要求及举例(以发布Type2路由为例)
分别定义广播域BD,BD作为VXLAN网络的实体,通过BD转发流量。跨网段用户通信时,对端的BD与本端不一致。
Device2的配置文件:
代码语言:javascript复制#
bridge-domain 10
Device3的配置文件:
代码语言:javascript复制#
bridge-domain 20
分别定义二层VNI,VNI将以1:1方式映射到广播域BD。跨网段用户通信时,对端的二层VNI与本端不一致。
Device2的配置文件:
代码语言:javascript复制vxlan vni 10
Device3的配置文件:
代码语言:javascript复制vxlan vni 20
在BD下创建EVPN实例,并配置该EVPN实例的RD值、本地EVPN实例出方向VPN-Target属性 。
跨网段用户通信发布Type2路由时,因为需要对端的L3VPN路由表学到本地的主机路由,又由于本地的Type2路由会携带本端BD下的ERT,所以本地EVPN实例出方向VPN-Target属性值需要与对端的L3VPN实例入方向VPN-Target属性值有相同的值。
Device2的配置文件:
代码语言:javascript复制evpn
route-distinguisher 10:2
vpn-target 100:5020 export-extcommunity
Device3的配置文件:
代码语言:javascript复制evpn
route-distinguisher 10:3
vpn-target 100:5030 export-extcommunity
创建用户的L3VPN实例,如vpn1。
Device2的配置文件:
代码语言:javascript复制#
ip vpn-instance vpn1
Device3的配置文件:
代码语言:javascript复制#
ip vpn-instance vpn1
在vpn1下定义RD值、用于EVPN的出方向和入方向的VPN-Target属性。
跨网段用户通信发布Type2路由时,本地L3VPN实例入方向VPN-Target属性值(eIRT)需要与对端的EVPN实例出方向VPN-Target属性值(ERT)有相同的值。
Device2的配置文件:
代码语言:javascript复制ipv4-family
route-distinguisher 20:2
vpn-target 100:5030 import-extcommunity evpn
Device3的配置文件:
代码语言:javascript复制ipv4-family
route-distinguisher 20:2
vpn-target 100:5020 import-extcommunity evpn
在vpn1中定义三层VNI5010,三层VNI用来标识L3VPN,因为与对端在同一个VPN中,对端的三层VNI与本端一致。
Device2的配置文件:
代码语言:javascript复制vxlan vni 5010
Device3的配置文件:
代码语言:javascript复制vxlan vni 5010
跨网段用户通信,所以创建Vbdif接口。
使能该接口为VXLAN分布式网关。并将该接口加入到vpn1中。
Device2的配置文件:
代码语言:javascript复制#
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的配置文件:
代码语言:javascript复制#
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的配置文件:
代码语言:javascript复制#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 10
bridge-domain 10
Device3的配置文件:
代码语言:javascript复制#
interface 10GE1/0/2.1 mode l2
encapsulation dot1q vid 20
bridge-domain 20
创建环回口地址,该地址将作为NVE设备的IP地址。
Device2的配置文件:
代码语言:javascript复制#
interface LoopBack1
ip address 2.2.2.210 255.255.255.255
Device3的配置文件:
代码语言:javascript复制#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
创建VTEP IP并配置VNI(即二层VNI)的头端复制列表。
Device2的配置文件:
代码语言:javascript复制#
interface Nve1
source 2.2.2.210
vni 10 head-end peer-list protocol bgp
Device3的配置文件:
代码语言:javascript复制#
interface Nve1
source 3.3.3.3
vni 20 head-end peer-list protocol bgp
配置BGP EVPN邻居,并将EVPN的发布路由类型设置为Type2(即irb)。
Device2的配置文件:
代码语言:javascript复制#
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的配置文件:
代码语言:javascript复制#
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