最近在做SDN这方面的实验,在这里记录一下自己的学习过程和踩过的坑。
具体环境:
VMware-workstation
Ubuntu20.04
Mininet
RYU
Wireshark
链接:https://pan.baidu.com/s/186D9k3byAqB0LhGUZwPkuw
提取码:25my
按照提示一步一步完成即可。
镜像文件:
链接:https://pan.baidu.com/s/1dXzMLk0LmjItbvj4e7zKtw
提取码:eaqd
1、打开虚拟机,依次点击“文件”——“新建虚拟机”,选择经典模式(在自定义模式下,很多选项都需要自行设置,不建议新手使用)
点击“浏览”,选择已经下载好的iso文件
按照要求设置名字和密码
设置虚拟机的名称和位置
分配磁盘大小,建议为40GB
点击“自定义硬件”,将内存设为4096MB,处理器内核数量设为2
配置完成后,点击“完成”开始Ubuntu系统的安装
耐心等待安装,可能会需要很长时间
安装完成后,输入密码进行登录
修改时间。将时区设置为shanghai。创建root用户。打开终端(右键或ctrl+alt+T),输入sudo passwd root命令创建root用户。创建成功后,可以通过su root命令登录root用户。
需要注意的是,root用户对系统具有最高的权限,在root用户下操作风险较大,需要慎重登录root用户进行操作。
修改源。如果Ubuntn版本较低,默认的官方源是美国的服务器,安装软件速度较慢,容易造成系统出错,在进行环境配置前需要修改为国内的源。点击屏幕左下角找到Software&Update,修改内容如图示(这里选择的是阿里云,当然也可以选择其他的),然后点击choose server →close→reload。
至此,Ubuntn的安装已经完成,可以与本地主机互相ping通,能够上网。
此时可以利用VMware的快照功能拍摄虚拟机快照,后续出现问题可以回到快照拍摄时的状态。
界面左下角有进度提示,建议等状态完全保存后再进行其他操作,否则可能造成状态保存不完整。
Mininet 是由一些虚拟的终端节点 (end-hosts) 、交换机、路由器连接而成的一个网络仿真器,是一个轻量级软件定义网络和测试平台,支持 OpenFlow、OpenvSwith 等各种协议,并提供python API。它的安装可以大致分为以下几个步骤:
步骤一:安装git
配置SDN的实验环境之前,需要进入/home/shy目录,通过sudo apt-get install git命令安装git。
输入git命令,查看是否安装成功。可以看到git已经安装成功。
步骤二:下载mininet源代码
使用sudo git clone https://github.com/mininet/mininet.git命令将mininet源代码下载到本地。
可以看到,已经将miniet下载到/home/shy目录下。
步骤三:安装mininet
下载完成后,在/home/shy/mininet目录下,找到安装mininet的脚本文件util,执行sudo ./install.sh命令进行mininet的安装。
如果使用以上命令安装OpenVswitch不成功,可以尝试依次输入以下命令:
sudo apt-get install openvswitch-switch
sudo ovs-vsctl show
步骤四:测试安装是否成功
输入sudo mn命令,创建最小网络拓扑。可以看到新建了两台主机,1个Open (V)switch交换机,增加了两条链路,创建了一台控制器。
执行links命令查看链路状态;执行nodes命令查看节点状态;执行pingall命令检查网络的连通性,可以看到h1到h2可以ping通,h2到h1也可以ping通,丢包率为0,证明mininet已经安装完成。
RYU是一款开源SDN控制器,基于python语言编写,支持OpenFlow协议。它的安装大致可以分为以下几个步骤:
步骤一:安装pip。
首先在/home/shy目录下,通过sudo wget https://bootstrap.pypa.io/get-pip.py命令下载pip文件。
下载完成后,输入ls命令查看。可以看到,pip文件已经下载到home目录下。
接着使用sudo python3 get-pip.py命令安装pip。
可以看到已经成功安装了pip,版本为23.3.1。
需要注意的是,如果之前下载过pip,那么系统中保存的文件名称可能不是get-pip.py。比如,可能是get-pip.py.1,此时执行sudo python3 get-pip.py.1命令安装pip。也可以执行rm -f 目录名命令删除之前下载的文件,重新下载pip文件。
步骤二:下载RYU源代码
在/home/shy目录下,通过sudo git clone https://github.com/osrg/ryu.git命令将RYU源码下载到本地。(如果报错,可以多尝试几次或者试试sudo git clone http://github.com/osrg/ryu.git)
下载完成后,进入/ryu目录并查看该目录下的所有文件。
步骤三:安装RYU依赖包
通过sudo pip install -r tools/pip-requires命令安装RYU的依赖。由于要安装的依赖较多,如果报错,可以多尝试几次。
可以看到,RYU的依赖已经安装成功。
步骤四:安装RYU
RYU的依赖安装完成后,通过执行sudo python3 setup.py install命令安装RYU。
提示安装完成。
步骤五:验证RYU是否安装成功。
首先在/home/shy/ryu/ryu/app目录下,执行ryu-manager simple_switch.py命令启动控制器,然后在另一个终端打开mininet,输入sudo mn --controller=remote创建默认拓扑,并使用远端控制器RYU。
可以看到控制器显示正常,说明RYU已经安装成功。
Ubuntn20.04自带WireShark软件。如果Ubuntn版本较低,需要通过sudo apt-get install wireshark命令进行Wireshark的安装。
左右键选中 Yes
安装完成后输入sudo wireshark命令即可打开Wireshark软件。
在/home/shy/mininet/mininet/examples目录下,执行sudo python3 mininedit.py命令或sudo ./miniedit.py命令打开可视化界面创建网络拓扑。
可视化界面如图示:
构建网络拓扑之前首先进行全局配置【edit】→【preferences】
IP Base:默认为10.0.0.0/8,用来指定网络拓扑中的网络设备所使用的IP地址所属网段
Start CLI:允许通过交互界面输入命令修改拓扑
Open vSwitch:支持的OpenFlow协议版本
在mininedit中创建拓扑
对控制器进行配置:
对交换机s1进行配置(s2同理):
对主机进行配置(其他主机同理):
此外,还可以对链路具体参数(带宽、时延等)进行配置:
所有的设置在Mininet的终端都有显示。
接下来运行网络拓扑,运行之前,需要在另一个终端打开控制器,然后点击miniedit界面左下角的Run按钮运行网络拓扑。这里使用Ryu控制器。
可以看到,此时控制器已经监控到了信息,网络连通性也没有问题。
1、Ubuntu系统安装好后显示屏幕太小。这是由于缺少VMware Tools,依次输入图中命令后重启虚拟机,问题得以解决。
2、下载mininet源码时,出现如下错误,网速问题,多试试几次。
或尝试输入以下命令取消https与http代理。
sudo git config --global --unset http.proxy
sudo git config --global --unset https.proxy
再或者如果https不能git,有些情况下用http代替也可以。
3、安装RYU的依赖时,由于网络原因和下载的依赖较多频频出现图中问题。解决办法:多执行几次命令。
4、问题:在使用sudp ./miniedit.py命令启动miniedit界面时出现/usr/bin/env: ‘python’: No such file or directory。
解决办法:依次输入图中命令