3.VXLAN_双站点_二层VXLAN
二层_两个站点
前言
此实验是VXLAN的第一个小实验,也是起步的实验,很基础、很简单,同样也很重要。
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。
实验

- 实验环境介绍
- 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就知道如何配置了。
- 去哪个VLAN里面抓数据?根据VLAN ID,创建BD-ID
- 去VLAN接口里面把BD绑进去,这样从这个接口流过的数据帧都会被BD抓走交给VXLAN进程
- 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之间什么关系?
- 可以的,没问题,BD只有本地意义
- BD与VNI之间是1:1的关系
问题四:隧道与VXLAN网络是一对一的关系吗?
不是的,是一对多的关系,一个隧道可以好多VXLAN网络共用的;
查看类命令
# 查看隧道的两个命令
[CE1]dis vxlan tunnel
Number of vxlan tunnel : 1
Tunnel ID Source Destination State Type
--------------------------------------------------------------
4026531841 1.1.1.1 3.3.3.3 up static
[CE1]dis vxlan peer
Number of peers : 1
Vni ID Source Destination Type
--------------------------------------------------------------
10 1.1.1.1 3.3.3.3 static
# 查看创建了几个VNI网络
[CE1]dis vxlan vni
Number of vxlan vni : 1
VNI BD-ID State
---------------------------------------
10 199 up(绑到通的隧道就是UP)
# 查看头端复制列表
[CE1-Nve1]dis vxlan vni 10 ver
BD ID : 199
State : up
NVE : 18
Source : 1.1.1.1
UDP Port : 4789
BUM Mode : head-end
Group Address : -
Peer List : 3.3.3.3
数据包格式
原始数据包:
- ICMP
- IP
- 192.168.10.1
- 192.168.10.2
- VLAN 10
- Ethernet
VXLAN处理后的:
- VXLAN
- UDP
- IP
- 1.1.1.1
- 3.3.3.3
- Ethernet
数据转发流程

- 数据包从PC1开始出发,目标IP地址192.168.10.3,到达g0/0/2接口之后被打上vlan-10的TAG进入交换机内部
- 数据帧从SW1的g0/0/1出来后到达CE1的子接口,由于该子接口与BD绑定,所以这个数据帧被CE1内部被携带VNI=10
- CE1根据NVE的配置vni 10 head-end peer-list 10.0.2.2将数据帧调度到nve接口进行封装,NVI还是要携带的,在数据帧的最外层重新加入源和目标IP地址(10.0.2.2)
- CE1在路由表当中查询路由发现到达10.2.2.2的路由是一条OSPF路由,下一跳是CE3,数据到达CE3最终转发到CE2上;
- CE2收到之后将最外层的IP拆除之后,发现数据包携带的VNI是10,于是在本地查找发VNI等于10的BD,找到之后,数据帧再次移交给相应的BD
- BD收到之后拆掉VNI,找到真正的原始的数据帧发现目标IP是192.168.10.3,查询路由之后从CE2的子接口发出。
原始数据包:
- ARP
- Ethernet
[CE1]dis mac-address
Flags: * - Backup
BD : bridge-domain Age : dynamic MAC learned time in seconds
-------------------------------------------------------------------------------
MAC Address VLAN/VSI/BD Learned-From Type Age
-------------------------------------------------------------------------------
5489-989f-1111 -/-/199 GE1/0/5.10 dynamic -
5489-989f-2222 -/-/199 3.3.3.3 dynamic -
-------------------------------------------------------------------------------
Total items: 4
跟GRE VPN对比
相同点:
VXLAN与GRE一样都需要对数据包再次封装
不同点:
- 在GRE VPN当中,需要路由指向,而VXLAN没有路由指向
- 在GRE VPN当中,隧道接口是需要手工指定协议的,而VXLAN的NVE接口默认即VXLANA协议;

浙公网安备 33010602011771号