EVPN 与 VXLAN(二)_ _动态分布式网关VXLAN

前言

分布式网关无论在配置上,还是在实现原理上都比集中式网关要复杂很多,仅仅依靠华为PPT上的内容很难完全理解VXLAN分布式网关的配置和通信原理,大家如果想好好的学习一下分布式的VXLAN,还是建议买几本系统的书籍系统的学习一下,我们这里面仅仅是把实验效果做出来了,至于分布式网关当中的细节,本文并没有过多涉及到。

集中式网关回顾

二层实例

# 集中式网关时,CE1和CE2都生成了二层的EVPN实例,如下所示:
[CE1]dis evpn vpn-instance 
 Total EVPN-Instances configured      : 2

  EVPN-Instance Name              RD                    Address-family
  10                              10:10                 evpn          
  20                              20:20                 evpn  
 
 # 网关设备也同样存在二层的EVPN实例
 [CE3]dis evpn vpn-instance 
 Total EVPN-Instances configured      : 2

  EVPN-Instance Name              RD                    Address-family
  10                              10:10                 evpn          
  20                              20:20                 evpn  
 
 [CE2]dis evpn vpn-instance 
 Total EVPN-Instances configured      : 2

  EVPN-Instance Name              RD                    Address-family
  10                              10:10                 evpn          
  20                              20:20                 evpn  

注意呀,我们并没有刻意去配置EVPN的实例,我们仅仅是启用了EVPN,这个EVPN实例是CE设备自动创建的,会将通过type-2路由信息获取的MAC地址放到这个二层的VPN实例当中。

三层实例

集中式网关上有三层路由吗?存放在哪里?

集中式网关上当然有三层路由,否则怎么转发呢?这与VLAN-IF一样,路由是直接存放在根实例当中,即存放在全局当中。当你的集中式网关上查看三层实例的时候会发现EVPN并没有产生三层实例,就是因为路由表没有存放在三层实例当中,是直接存放在了全局当中,如下所示:

# 在集中式网关上查看三层实例是空的,里面啥都没有
[CE3]dis ip vpn-instance 
# 三层路由直接存放在全局了,注意看后面的VBD-IF接口
[CE3]dis ip routing-table 
   192.168.10.0/24  Direct  0    0             D   192.168.10.1    Vbdif10
   192.168.10.1/32  Direct  0    0             D   127.0.0.1       Vbdif10
 192.168.10.255/32  Direct  0    0             D   127.0.0.1       Vbdif10
   192.168.20.0/24  Direct  0    0             D   192.168.20.1    Vbdif20
   192.168.20.1/32  Direct  0    0             D   127.0.0.1       Vbdif20
 192.168.20.255/32  Direct  0    0             D   127.0.0.1       Vbdif20

我们为什么要讨论关于二层实例和三层实例的问题呢?主要是为接下来分布式网关的VXLAN做准备,分布式网关当然也需要三层的路由信息,但与集中式网关不同之处在于,分布式网关的路由信息不是存放在全局当中的,而是存放在VPN实例当中的,几层VPN实例当中?当然是三层了,路由信息是三层信息,当然要存放在三层的VPN实例当中。所以当我们在配置分布式网关的时候,就需要在分布式网关所在设备上创建三层的VPN实例,并将网关配置到VPN实例当中,只有将网关配置到实例当中,路由信息才会在实例当中生成呀!

这个地方有个问题,为什么集中式网关当中就不需要三层VPN实例,而在分布式网关当中就需要三层VPN实例呢?这是个好问题!其实也很好回答,那在MPLS-VPN当中为什么是三层实例,而不是二层实例呢?是因为MPLS-VPN当中要传递的信息是三层的路由信息,而不是二层信息,同样的道理,在集中式网关当中,集中式网关上的EVPN只需要通过type-2的路由信息传递MAC信息给CE1和CE2,而在三层分布式网关当中,分布式网关会涉及到传递三层信息(IRB路由信息),所以我们需要创建三层VPN实例。

二三层NVI与二三层实例的关系:

集中式网关仅仅用到了二层实例,那分布式网关当中不仅会用到二层实例,而且还会用到三层实例,并且每一种实例当中还会对应一个VNI,二层实例当中配置的VNI是二层NVI,在同网段通信的时候会使用的;三层实例当中使用的VNI是三层VNI,会在跨网段通信的时候使用的。

基础配置_Underlya

理论

我们还是以这张图为例来说明,分布式网关位于CE1和CE2上,CE3上并不存在网关,如果在CE3上存在网关,那岂不是成了集中式网关,所以,我们首先要明确一点,CE3上并不需要设置网关

CE3并不需要设置网关,但CE3的位置还是非常重要的,为什么呢?因为CE3要做为路由反射器,虽然CE1在配置BGP的时候虽然与CE3建立BGP的邻居关系,type3的路由经过CE3的转发,但CE3不再使用type3的信息建立vxlan隧道,最终的VXLAN隧道还是在CE1和CE2之间形成,CE3仅仅是路由反射的作用,所以CE3要配置路由反射器

在分布路的VXLAN当中,华为使用的是IRB路由,RIB路由即同时拥有二层VNI、三层VNI以及主机MAC地址,RIB路由与单纯的MAC路由同时都是有type-2来承载,但BGP想要承载IRB路由得需要特殊声明,就在三台CE配置BGP的时候需要声明可以承载IRB路由的能力

由于我们仅希望CE1和CE2建立tunnel隧道,不希望CE3参与进来,也就是说不需要CE3产生type-3的路由信息,再进一步也就是说不需要配置BD、VNI、RT,也可以说可以根本不用配置示例。但问题又来了,如果CE3上没有示例配置RT,那CE3就不会信任CE1或CE2向其传递的路由信息,不信任的话,那又如何反射呢?所以我们需要在CE3配置BGP的时候关闭默认校验RT的功能

CE3的配置

# CE3基础配置
sys i
int l0
	ip add 10.0.3.3 32
vlan batch 13 23
int vlan 13
	ip add 10.0.13.3 24
int vlan 23
	ip add 10.0.23.3 24
ospf 1 router-id 10.0.3.3
	a 0
		network 10.0.3.3 0.0.0.0
		network 10.0.13.3 0.0.0.0
		network 10.0.23.3 0.0.0.0
int g1/0/0
	undo shutdown
	port link-ty trunk
	port trunk all vlan 13
int g1/0/1
	undo shutdown
	port link-ty trunk
	port trunk all vlan 23
# 第二步:EVPN的配置,关键配置
evpn-overlay enable
bgp 100
 peer 10.0.1.1 as-number 100
 peer 10.0.1.1 connect-interface LoopBack0
 peer 10.0.2.2 as-number 100
 peer 10.0.2.2 connect-interface LoopBack0
 #
 ipv4-family unicast
	peer 10.0.1.1 enable
	peer 10.0.2.2 enable
 #
 l2vpn-family evpn
  # 关闭RT校验功能
  undo policy vpn-target
  peer 10.0.1.1 enable
  y
  # 反射器的配置
  peer 10.0.1.1 reflect-client 
  # 声明通告IRB路由的功能,直接刷的话,这一条有可能刷不上
  peer 10.0.1.1 adver irb
  peer 10.0.2.2 enable
  y
  # 反射器的配置
  peer 10.0.2.2 reflect-client 
  peer 10.0.2.2 adver irb
  quit
# 第三步:VXLAN的配置
# CE不需要任何VXLAN的配置,NVE接口也不用

CE1的配置

# 第一步:CE1的基础配置
sys i
sysn CE1
# 创建互联VLAN
vlan 13
int l0
	ip add 10.0.1.1 32
int vlan 13
	ip add 10.0.13.1 24
ospf 1 router-id 10.0.1.1
	a 0
		network 10.0.1.1 0.0.0.0
		network 10.0.13.1 0.0.0.0
# 物理接口要放行
int g1/0/0
	undo shutdown
	port link-ty trunk
	port trunk a v 13
	quit
# 第二步:EVPN的配置
evpn-overlay enable 
bgp 100
 peer 10.0.3.3 as-number 100
 peer 10.0.3.3 connect-interface LoopBack0
 #
 ipv4-family unicast
  peer 10.0.3.3 enable
 #
 l2vpn-family evpn
  policy vpn-target
  peer 10.0.3.3 advertise irb
  peer 10.0.3.3 enable
  y
  quit

# 检查一下,没问题
[CE1-bgp]dis bgp peer
 BGP local router ID        : 10.0.1.1
 Local AS number            : 100
 Total number of peers      : 1
 Peers in established state : 1

  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State  Pr
efRcv
  10.0.3.3        4         100        5        4     0 00:00:18 Established    
    0
[CE1-bgp]dis bgp evpn peer
 BGP local router ID        : 10.0.1.1
 Local AS number            : 100
 Total number of peers      : 1
 Peers in established state : 1

  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State  Pr
efRcv
  10.0.3.3        4         100        5        4     0 00:00:21 Established    
    0

CE2的配置

# 第一步:基础配置
sys i 
sysn CE2
int l0
	ip add 10.0.2.2 32
vlan 23
int vlan 23
	ip add 10.0.23.2 24
ospf 1 router-id 10.0.2.2
	 a 0 
	 	network 10.0.2.2 0.0.0.0
	 	network 10.0.23.2 0.0.0.0
int g1/0/0
	undo shutdown
	port link-ty trunk
	port trunk all vlan 23
	qu
# 第二步:EVPN的配置
evpn-overlay enable 
bgp 100
 peer 10.0.3.3 as-number 100
 peer 10.0.3.3 connect-interface LoopBack0
 #
 ipv4-family unicast
  peer 10.0.3.3 enable
 #
 l2vpn-family evpn
  policy vpn-target
  # 声明IRB路由
  peer 10.0.3.3 advertise irb
  peer 10.0.3.3 enable
  y
  quit

验证

我们当前仅仅是把EVPN部署作完了,VXLAN完全没有做,当我们查看通过EVPN传递的路由数量时,目前都是0,如下所示:

[CE3]dis bgp evpn peer
 BGP local router ID        : 10.0.3.3
 Local AS number            : 100
 Total number of peers      : 2
 Peers in established state : 2

  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State  Pr
efRcv
  10.0.1.1        4         100       12       15     0 00:06:41 Established    
    0
  10.0.2.2        4         100        7        7     0 00:02:14 Established    
    0

VXLAN配置

说明

在VXLAN部分的配置当中,就没有CE3的事儿了,全都是在CE1和CE2进行配置。不得不说,VXLAN部署的配置还是挺复杂的,那都需要配置一些什么内容呢?

  • 配置思路

    • 第一步:创建三层的VPN实例,配置RD、RT,配置三层VNI

    • 第二步:创建BD10和BD20分别对应VLAN10和VLAN20、配置二层VNi和RT

    • 第三步:在三层的VPN实例当中创建三层网关

CE1的配置

# CE1
# 创建一个三层实例
ip vpn-instance yeslab
	route-dist 10:10
	vpn-target 10:10
	# 声明evpn,意为让EVPN携带本实例当中的信息
	vpn-target 10:10 evpn
	# 三层的VNI,后续还会出现二层的VNI,跨网段的时候使用三层VNI
	vxlan vni 5010
# 在三层实例当中创建两个BD
bridge-domain 10
	# 二层的VNI,同网段通信使用二层VNI,注意上面还有三层的VNI
	vxlan vni 10
	# 这里面的RT与三层的RT必须得一样,强行要求,具体原因未知
	evpn
		# RD必须得写,直接配置RT会报错
		route-distinguisher 10:100
		vpn-target 10:10 
bridge-domain 20
	vxlan vni 20
	evpn 
		route-distinguisher 10:1000
		vpn-target 10:10 

一个三层实例,却配置两个BD?这是怎么回事?我们可以把两个BD理解为一个租户的两个BD,后续我们在做campus实例的时候就会发现一个三层实例其实就代表了一个VN网络,同一个租户内的BD是能互通的,互通肯定还是依赖三层网关,下面我们把三层的网关配置一下;

# CE1
interface vbdif 10
	ip binding vpn-instance yeslab
	ip add 192.168.10.1 24
	# 两端的MAC地址要保证一样,否则PC会混乱,MAC地址前面8位数也是固定的
	mac-address 0000-005e-0001
	# 声明通过网关要收集ARP表项,进而产生IRB路由发送到对方
	arp collect host enable
	# 声明这是分布式网关,本意为了解决两端IP和MAC冲突的问题
	vxlan anycast-gateway enable 
	
interface vbdif 20
	ip binding vpn-instance yeslab
	arp collect host enable
	ip add 192.168.20.1 24
	mac-address 0000-005e-0002
	arp collect host enable
	vxlan anycast-gateway enable 

# CE1
int nve 1
	source 10.0.1.1
	# 先配置的通,后配置的不通,type-3路由会产生,可以去对端看一下;
	# 不仅把NVE接口的IP传过去了,而且type-2也出来了,针两个网关的MAC也传递到对方了
	vni 10 head-end peer-list proto bgp
	vni 20 head-end peer-list proto bgp

当把这一步配置完成之后,那就有了产生type-3路由信息的条件,这时就可以去对端查看一下是否有三类路由信息了,三类路由信息一旦生效,那CE1到CE2之间的vxlan隧道也就会随之建立。

CE2的配置

CE2与CE1的配置基本相同

# CE2
# 创建一个三层实例
ip vpn-instance yeslab
	route-dist 10:10
	vpn-target 10:10
	vpn-target 10:10 evpn
	# 三层的VNI,跨网段的时候使用三层VNI
	vxlan vni 5010
# 在三层实例当中创建两个BD
bridge-domain 10
	# 二层的VNI,同网段通信使用二层VNI
	vxlan vni 10
	# 这里面的RT与三层的RT必须得一样
	evpn
		route-distinguisher 10:100
		vpn-target 10:10
bridge-domain 20
	vxlan vni 20
	# 这里面的RT与三层的RT必须得一样
	evpn 
		route-distinguisher 10:1000
		vpn-target 10:10
interface vbdif 10
	ip binding vpn-instance yeslab
	ip add 192.168.10.1 24
	# 两端的MAC地址要保证一样,所以这里面要声明绑定一个
	mac-address 0000-005e-0001
	# 声明通过收集ARP表项,进而产生IRB路由
	arp collect host enable
	# 声明这是分布式网关,其实解决了两端IP和MAC冲突的问题
	vxlan anycast-gateway enable 
	
interface vbdif 20
	ip binding vpn-instance yeslab
	ip add 192.168.20.1 24
	mac-address 0000-005e-0002
	arp collect host enable
	vxlan anycast-gateway enable 
int nve 1
	source 10.0.2.2
	# 先配置的通,后配置的不通,type-3路由会产生,可以去对端看一下;
	# 不仅把NVE接口的IP传过去了,而且type-2也出来了,针两个网关的MAC也传递到对方了
	vni 10 head-end peer-list proto bgp
	vni 20 head-end peer-list proto bgp

验证

# 我们会发现CE1和CE2已经能正常建立隧道了
[CE1]dis vxlan tunnel 
Number of vxlan tunnel : 1
Tunnel ID   Source                Destination           State  Type     Uptime
-----------------------------------------------------------------------------------
4026531841  10.0.1.1              10.0.2.2              up     dynamic  00:03:26  


[CE2]dis vxlan tunnel 
Number of vxlan tunnel : 1
Tunnel ID   Source                Destination           State  Type     Uptime
-----------------------------------------------------------------------------------
4026531841  10.0.2.2              10.0.1.1              up     dynamic  00:00:11  

同网段通信测试

# CE1引入流量
interface GE1/0/1
 undo shutdown
 port link-type trunk
interface GE1/0/1.10 mode l2
 encapsulation dot1q vid 10
 bridge-domain 10
interface GE1/0/1.20 mode l2
 encapsulation dot1q vid 20
 bridge-domain 20
# CE2引入流量
interface GE1/0/1
 undo shutdown
 port link-type trunk
interface GE1/0/1.10 mode l2
 encapsulation dot1q vid 10
 bridge-domain 10
interface GE1/0/1.20 mode l2
 encapsulation dot1q vid 20
 bridge-domain 20
# LSW1的配置
sys
sysn LSW1
vlan batch 10 20
int g0/0/1
	port link-type trunk
	port trunk allow vlan 10 20
int g0/0/2
	port link-type access
	port default vlan 10
int g0/0/3
	port link-type access
	port default vlan 20
# LSW2的配置
sys
sysn LSW2
vlan batch 10 20
int g0/0/1
	port link-type trunk
	port trunk allow vlan 10 20
int g0/0/2
	port link-type access
	port default vlan 10
int g0/0/3
	port link-type access
	port default vlan 20

image-20230619142630755

image-20230619142741371

image-20230619142824305

image-20230619145523348

PS:跨地址的同网段通信使用的二层的VNI

不同的网网段通信测试

不同网段的通信比较有意思,当我们把上述配置都做完之后,你会发现在CE1和CE2的yeslab的实例当中会生成IBGP的主机路由,如下所示:

[CE1]dis ip vpn-instance 
 Total VPN-Instances configured      : 1
 Total IPv4 VPN-Instances configured : 1
 Total IPv6 VPN-Instances configured : 0

  VPN-Instance Name               RD                    Address-family
  yeslab                          10:10                 IPv4          
[CE1]dis evpn vpn
[CE1]dis evpn vpn-instance 
 Total EVPN-Instances configured      : 3

  EVPN-Instance Name              RD                    Address-family
  10                              10:100                evpn          
  20                              10:1000               evpn          
  __RD_1_10_10__                  10:10                 evpn
[CE1]dis ip routing-table vpn-instance yeslab 
   192.168.10.0/24  Direct  0    0             D   192.168.10.1    Vbdif10
   192.168.10.1/32  Direct  0    0             D   127.0.0.1       Vbdif10
   # 看这里
   192.168.10.3/32  IBGP    255  0             RD  10.0.2.2        VXLAN
 192.168.10.255/32  Direct  0    0             D   127.0.0.1       Vbdif10
   192.168.20.0/24  Direct  0    0             D   192.168.20.1    Vbdif20
   192.168.20.1/32  Direct  0    0             D   127.0.0.1       Vbdif20
   192.168.20.4/32  IBGP    255  0             RD  10.0.2.2        VXLAN
 192.168.20.255/32  Direct  0    0             D   127.0.0.1       Vbdif20
255.255.255.255/32  Direct  0    0             D   127.0.0.1       InLoopBack0
[CE2-bgp-af-evpn]dis ip routing-table vpn-instance yeslab 
   192.168.10.0/24  Direct  0    0             D   192.168.10.1    Vbdif10
   192.168.10.1/32  Direct  0    0             D   127.0.0.1       Vbdif10
   192.168.10.2/32  IBGP    255  0             RD  10.0.1.1        VXLAN
 192.168.10.255/32  Direct  0    0             D   127.0.0.1       Vbdif10
   192.168.20.0/24  Direct  0    0             D   192.168.20.1    Vbdif20
   192.168.20.1/32  Direct  0    0             D   127.0.0.1       Vbdif20
   192.168.20.2/32  IBGP    255  0             RD  10.0.1.1        VXLAN
 192.168.20.255/32  Direct  0    0             D   127.0.0.1       Vbdif20
255.255.255.255/32  Direct  0    0             D   127.0.0.1       InLoopBack0

这个效果可能在做实验的时候不太容易做出来,是因为你是提前把配置写到记事本上然后把配置刷进CE设备的话,peer IP adver irb这条命令会报错,所以最好要在三台CE上都敲一下,这样相互之间才能正常的传递irb路由,这个路由其实就是包含了三台VNI和主机IP地址。

测试效果如下所示:

image-20230619145041975

image-20230619145703097

image-20230619145204173

PS:注意,跨地区的三台通信使用的是三层VNI。

不知道你发现没有,这种所谓的跨地区三层通信其实原理并不难,其实还是路由转发,只不过是IBGP的主机路由更优秀,所谓直接优选一条直接三台VNI封装扔到对面。

结尾

如果是分布式网关的所有知识点有十层,那么我也就仅仅理解了四台,还有六台都没有完全理解,对于分布式网关我们后续还会深入讨论的,因为还有一些EVPN路由信息、以及转发过程的细节还没来得及分析。

posted @ 2020-10-10 18:12  张贺贺呀  阅读(55)  评论(0编辑  收藏  举报