VXLAN_二层互通__无三层网关

VXLAN_二层互通__无三层网关

前言

此实验是VXLAN的第一个小实验,也是起步的实验,很基础、很简单,同样也很重要。

VXLAN的基础概念我们就不介绍了,但我们在做这个实验时,得先了解一下,VXLAN工作在哪一层呢?不管书里面怎么讲,我始终认为BGP、VXLAN这样的协议虽然还是三层相关的路由协议,但是已经非常像一个真正的应用了,甚至我们可以把他当应用去看待,因为它们也会侦听具体的套接字,比如BGP的会侦听TCP179,而VXLAN会侦听UDP的4789端口,如下所示:

bridge-domain 10
	vxlan vni 10
int g1/0/1.10 mode l2
	encapsulation dot1q vid 10
# 上面这两条命令一敲,vxlan进程直接就起来了
dis udp status
0x80EE0438        8 0.0.0.0:4789          0.0.0.0:0                  0

那么从侦听的应用去看待VXLAN之间的交互你会发现非常的简单,VXLN在工作时会生成BD子进程,任何接口都可以去绑定,一旦绑定上之后,BD进程就会“把守”在这个接口上,任何从这个接口路过的数据帧都会由BD“抓走”附加VNI之后送给VXLAN主进程,VXLAN主进程会根据nve接口上的指定进行封装将数据扔给对端,对端即是在NVE接口里面的指定的目标IP。

实验

image-20230613160830810

  • 实验环境介绍
    • PC1和PC3属于同一个VLAN、同一个网段都是192.168.10.x网关
    • PC1和PC都没有设置网关,只有IP和掩码
  • 实现目标:
    • 实现PC1和PC3之间的同网段互访
  • 实验思路:
    • 第一步:让三台CE底层的underlay先跑起来,使用OSPF即可,保持CE1和CE2 lookback0接口能通信
    • 第二步:在CE1或CE2上将vlan 10的流量引入到BD10当中,设置NVI并最终交给对端。

第一步 underlay

第一步:三台CE之间的underlay配置

# 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
##############################
# 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
	
# 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
#####
# 验证
[CE1]ping -a 10.0.1.1 10.0.2.2
  PING 10.0.2.2: 56  data bytes, press CTRL_C to break
    Reply from 10.0.2.2: bytes=56 Sequence=1 ttl=254 time=11 ms
    Reply from 10.0.2.2: bytes=56 Sequence=2 ttl=254 time=7 ms
[CE2]ping -a 10.0.2.2 10.0.1.1
  PING 10.0.1.1: 56  data bytes, press CTRL_C to break
    Reply from 10.0.1.1: bytes=56 Sequence=1 ttl=254 time=10 ms
    Reply from 10.0.1.1: bytes=56 Sequence=2 ttl=254 time=12 ms

第二步 VXLAN

vxlan的配置也非常简单,vxlan的关注的问题非常是以下几点,把这几个问题回答完了,VXLAN就知道如何配置了。

  1. 去哪个VLAN里面抓数据?根据VLAN ID,创建BD-ID
  2. 去VLAN接口里面把BD绑进去,这样从这个接口流过的数据帧都会被BD抓走交给VXLAN进程
  3. VXLAN封装什么NVI?自己的源是多少?目标是多少?

先回答前两个问题。由于PC1是VLAN 10,所以我们希望VXLAN去VLAN 10里面抓数据, 想要抓数据VXLAN得先创建BD,BD的ID我们可以跟将要抓的VLAN保持一致,也用10吧!为了能抓到数据,下面我们应该VLAN 10的接口里面绑定BD;这个VLAN 10 接口指的什么?通常是指的二层的子接口。

# CE1上的具体配置
bridge-domain 10
quit
int g1/0/1
	undo shutdown
	port link-type trunk
int g1/0/1.10 mode l2
	encapsulation dot1q vid 10
	bridge-domain 10
	quit
	
# CE2上的具体配置
bridge-domain 10
quit
int g1/0/1
	undo shutdown
	port link-type trunk
int g1/0/1.10 mode l2
	encapsulation dot1q vid 10
	bridge-domain 10
	quit

接着我们再去回答第三个问题,通过BD抓到的数据帧发送给谁?本地的源IP又是什么?涉及到这种带有源目IP的,一般都得起一个虚拟隧道接口,VXLAN当中的虚拟隧道接口是NVE接口,我们从里面规定好源和目标IP即可。

NVE接口有点类似于GRE接口,是通用型接口,很多VLAN的流量的都可以从这里面经过,那我们怎么样标识我们的VLAN 10呢?其实这事不用NVE进行标识,当BD通过下游的流量抓到VXLAN之后就附加携带VNI,所以在交换机内部的数据帧是携带VNI的,我们只需要告诉NVE接口,某种VNI的数据帧发给谁就可以了!

# CE1
bridge-domain 10
	vxlan vni 10  # 就是封装报文时需要用到VNI,非常重要,在交换机内部也会携带的;
	quit
interface nve 1
	source 10.0.1.1
	vni 10 head-end peer-list 10.0.2.2  # 正确的理解是将vni是10的数据帧的发给10.0.2.2
	
	
# CE2
bridge-domain 10
	vxlan vni 10
	quit
interface nve 1
	source 10.0.2.2
	vni 10 head-end peer-list 10.0.1.1
	
## 验证,一连UP了并不代表另一边也UP,这个UP是单向的
[CE1-Nve1]dis vxlan tunnel 
Number of vxlan tunnel : 1
Tunnel ID   Source                Destination           State  Type     Uptime
4026531842  10.0.1.1              10.0.2.2              up     static   00:00:10
[CE2-Nve1]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     static   00:00:49

思考和分析

问题一:interface nve 1 后面这个1是啥?两边需要一致吗?

这个1仅仅是一个进程的标识,两连不一致也没关系,不在数据包当中体现,不重要。

问题二:两端的NVI是VLAN ID 吗?

VNI的VLAN ID没啥关系,VNI和VLAN ID不是一回事儿。

问题三:两端BD可以不一致吗?,BD与VNI之间什么关系?

可以的,没问题,交换机内部调度的时候只认VNI。

BD与VNI之间是1:1的关系

问题四:如何理解这个配置?

interface nve 1
	source 10.0.2.2
	vni 10 head-end peer-list 10.0.1.1
	vni 20 head-end peer-list 10.0.1.1

nvi 10 head-end peer-list 10.0.1.1的含义,将本端VNI是10的数据帧通过本隧道发给10.0.1.1;

数据包转发流程

image-20230613191740353

  1. 数据包从PC1开始出发,目标IP地址192.168.10.3,到达g0/0/2接口之后被打上vlan-10的TAG进入交换机内部
  2. 数据帧从SW1的g0/0/1出来后到达CE1的子接口,由于该子接口与BD绑定,所以这个数据帧被CE1内部被携带VNI=10
  3. CE1根据NVE的配置vni 10 head-end peer-list 10.0.2.2将数据帧调度到nve接口进行封装,NVI还是要携带的,在数据帧的最外层重新加入源和目标IP地址(10.0.2.2)
  4. CE1在路由表当中查询路由发现到达10.2.2.2的路由是一条OSPF路由,下一跳是CE3,数据到达CE3最终转发到CE2上;
  5. CE2收到之后将最外层的IP拆除之后,发现数据包携带的VNI是10,于是在本地查找发VNI等于10的BD,找到之后,数据帧再次移交给相应的BD
  6. BD收到之后拆掉VNI,找到真正的原始的数据帧发现目标IP是192.168.10.3,查询路由之后从CE2的子接口发出。
posted @ 2020-05-02 21:11  张贺贺呀  阅读(351)  评论(0编辑  收藏  举报