基于Open vSwitch的VxLAN隧道实验网络

1 实验目的

该实验通过Open vSwitch构建Overlay的VxLAN网络,更直观的展现VxLAN的优势。在实验过程中,可以了解如何建立VxLAN隧道并进行配置,并实现相同网段和不同网段之间的通信。

2 实验原理

VxLAN 是 Virtual eXtensible LANs 的缩写,它是对 VLAN 的一个扩展,是非常新的一个 tunnel 技术,在Open vSwitch中应用也非常多。Linux 内核的 upstream 中也刚刚加入 VXLAN 的实现。相比 GRE tunnel 它有着很好的扩展性,同时解决了很多其它问题。

从数量上讲,它把 12 bit 的 VLAN tag 扩展成了 24 bit。从实现上讲,它是 L2 over UDP,它利用了UDP 同时也是 IPv4 的单播和多播,可以跨 L3 边界,很巧妙地解决了 GRE tunnel 和 VLAN 存在的不足,让组网变得更加灵活。

3 实验任务

基于Open vSwitch的VxLAN隧道,实现了相同和不同网段内设备的通信,启动OpenvSwitch服务,创建VxLAN隧道,本实验主要是通过在OpenvSwitch上手动命令操作设置连接VxLAN来实现相同和不同网段的通信;

因实验平台中在虚拟机中没有创建数据层面下的虚拟机,如图中的VM1、VM2,所以通过在数据层面Br0上实现不同网段通信,以达到和VM1、VM2相同和不同网段通信的目的。此实验将创建两个网桥,一个作为控制层面,如包含eth0端口的Br1;一个作为数据层面,如Br0,两台Mininet虚拟机的Br0在实验中分别属于相同和不同的网段。

4 实验步骤

4.1 环境搭建

步骤1 :在实验平台首页单击“创建虚网”。虚网名称以“Slice1”为例,虚网名称只能包括数字,字母和下划线。

任意选择设备拓扑:

进行下一步配置,并点击最后“创建”,虚网创建成功; 步骤2:创建控制器,选择Floodlight控制器。

步骤3:在“虚网详情”页面单击网关部分的“

”按钮添加网关。

步骤4:创建3个虚拟机,一个是选择OpenDaylight镜像的桌面版虚拟机作为控制器(注:内存大于4G),另两个是选择Mininet镜像作为所需Mininet,或者是选择两个已安装OpenvSwitch镜像的虚拟机(建议选择共享的名称为mininet_wireshark_linux3.12+的镜像,内核为3.13,支持VxLAN)。如下图已创建虚拟机所示:

4.2 启动验证

步骤1:虚网详情中,右上角点击按钮启动虚网,启动虚网后并启动虚拟机。

4.3 预先配置

登录两台Mininet虚拟机或者是已安装OpenvSwitch的虚拟机。mn虚拟机的IP:

mn1虚拟机的IP:

验证OvS服务是否被启动好:

# ps –ef|grep ovs

OvS已启动。 步骤一1:分别在两台机器上创建网桥:

#sudo ovs-vsctl add-br br0  #数据层面
#sudo ovs-vsctl add-br br1  #控制层面

步骤2:mn虚拟机上将eth0的IP赋给br1:

#ifconfig eth0 0 up
#ifconfig br1 20.0.4.196/29 up

给mn虚拟机的br1重新添加路由:

#route add default gw 20.0.4.193

mn的路由如下显示:

#sudo ovs-vsctl add-port br1 eth0  
#ovs-vsctl show

步骤3:mn1虚拟机上将eth0的IP赋给br1:

#ifconfig eth0 0 up
#ifconfig br1 20.0.4.195/29 up

给mn1虚拟机的br1重新添加路由:

#route add default gw 20.0.4.193

mn1虚拟机的路由显示如下:

#ovs-vsctl add-port br1 eth0
#ovs-vsctl show

前期实验环境已准备好。

4.4 设置VxLAN实现同一网段的通信

在mn虚拟机上给br0配置一个IP:

# ifconfig br0 30.0.0.2/8 up

在mn1虚拟机上给br0配置一个与mn虚拟机上br0同一网段的IP地址:

# ifconfig br0 30.0.0.3/8 up

验证br1和br1的IP是否通信:Mn虚拟机的br1 ping mn1虚拟机的br1,是可以ping通的:

mn虚拟机ping mn1虚拟机的br0,是ping不通的:

#ping  30.0.0.3

Br0和另一台设备的br0不能通信,搭建隧道的目的就是让两台机器的br0(数据层面)能够实现通信。

实验本身是在虚拟机中操作,所以实验中br0桥上没有再下挂主机,分别给两台虚拟机的br0指定两个相同网段的IP,然后通过搭建VxLAN隧道让这两个网桥能够实现通信,设置如下: 在mn虚拟机上创建VxLAN:

# ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=20.0.4.195

在mn1虚拟机上创建VxLAN:

# ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=20.0.4.196

验证mn虚拟机的br0和mn1虚拟机的br0是否通信:

验证经过设置VxLAN后,两个虚拟机的同一网段数据层面是通信的。

Tcpdump抓包截图如下:

sudo tcpdump -i eth0

4.5 设置VxLAN实现不同网段的通信

在mn虚拟机上给br0配置一个IP:

# ifconfig br0 30.0.0.1/8 up

在mn1虚拟机上给br0配置一个与mn虚拟机上br0不是同一网段的IP地址:

# ifconfig br0 40.0.0.1/8 up

验证mn虚拟机的br0和mn1虚拟机br0的IP是否通信: mn虚拟机ping mn1虚拟机的br0,是ping不通的:

#ping  40.0.0.1

br0和另一台设备的br0不能通信,搭建隧道的目的就是让两台机器的br0(数据层面)能够实现通信。

实验本身是在虚拟机中操作,分别给两台虚拟机的br0指定两个不同网段的IP,然后通过搭建VxLAN隧道及设置路由让这两个网桥能够实现通信,设置如下:

在mn虚拟机上创建VxLAN:

# ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=20.0.4.195

在mn1虚拟机上创建VxLAN:

# ovs-vsctl add-port br0 vx1 -- set interface vx1 type=vxlan options:remote_ip=20.0.4.196

VxLAN设置好后,mn虚拟机的br0和mn1虚拟机的br0仍不能通信通信,需要设置静态路由才能通信,如下设置: 在mn虚拟机上添加路由:

# route add –net 40.0.0.0 netmask 255.0.0.0 gw 30.0.0.1 dev br0

在mn1虚拟机上添加路由:

# route add –net 30.0.0.0 netmask 255.0.0.0 gw 40.0.0.1 dev br0

验证mn虚拟机的br0和mn1虚拟机的br0是否通信:

验证经过设置VxLAN及路由后,两个虚拟机的不同网段数据层面是通信的。 Tcpdump抓包截图如下:

5 实验结论

本实验搭建了基于Open vSwitch的VXLAN隧道以及路由设置,实现了相同和不同网段内设备的通信。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2015-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

基于Django的双因子认证实现

双因子简介 对于网络信息系统来说,能否识别使用者的身份,是能否确保安全的基础和关键。在实际应用中,许多网络信息系统都会要求使用者在使用系统之前,提供一些相关信息...

40710
来自专栏吉浦迅科技

【入门篇】一个小白在Jetson TX2上安装caffe的踩坑之旅

作为一个在深度学习上的小白,买Jetson TX2一个很大的原因就是想学习深度学习。那么当用Jetpack刷好板子后,第一个任务肯定是要学着安装caffe!...

63611
来自专栏阮一峰的网络日志

如何读懂火焰图?

软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。 火焰图(flame graph)是性能分析的利器。本文介绍它的基本用法。 ? 一、perf 命令 ...

3656
来自专栏SAP最佳业务实践

SAP最佳业务实践:SD–带质量管理的销售退货(237)-6退货库存处理

一、MIGO退货库存转移至自有非限制库存 如果可重新使用退回的物料,则需要将其从退货库存移至非限制自有库存,这样退货可任意使用,并会重新包括在 MRP 计算之中...

3445
来自专栏Jerry的SAP技术分享

如何查看CRM WebUI,C4C和Hybris里的页面技术信息

在WebClient UI页面上按F2,就能看到页面的技术信息, 可以找到当前页面是哪一个BSP component实现的:

3504
来自专栏AI派

【极限操作】一行Python代码生成一个二维码

二维码在当今社会是一个很常见的功能,如何使用 Python 来生成二维码呢?这里我们借助 qrcode 工具来生成我们需要的二维码。

1141
来自专栏Linux驱动

裸机LCD驱动配置

本节来学习裸机下的LCD 驱动,本节学完后,再来学习Linux下如何使用LCD驱动 Linux中的LCD驱动,链接如下: (Linux-LCD层次分析链接:ht...

2188
来自专栏瓜大三哥

改善时序的方法

时序约束的目的本质上是通过时序约束对Vivado的布局和布线过程进行干预,也就通过Vivado工具重新规划设计中所有功能单元的位置,以及布局的策略。 时序约束...

26010
来自专栏瓜大三哥

物理约束

IO约束,如位置和IO标准 引脚分配命令 Set_property PACKAGE_PIN <pin name> [get_ports <port>] 驱动能...

3695
来自专栏iOS122-移动混合开发研究院

实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片

本文会基于一个已有的脚本工具自动导出所有的图片;最终给出的是一个从 Images.xcassets 到基于文件夹的精简 合适 的图片资源集的完整过程.难点在于从...

3449

扫码关注云+社区

领取腾讯云代金券