使用NetStudio做OpenFlow实验
实验前准备
编译OpenFlow相关组件到NetStudio中
在NetStudio的源码路径下,运行make menuconfig
进入自定义界面,将openvswitch
,openvswitch-common
等必要组件编译到固件中。
在本地搭建RYU控制器
自行搭建
在ubuntu中安装python3,使用pip3 install ryu
来安装。安装完成后,使用ryu-manager --version
测试可以看到版本号即安装成功。
使用搭建好的虚拟机镜像
我在自行搭建这里出了点问题,所以我使用官方的虚拟机镜像。传送门
在VMware中下载Ryu.zip,自行导入即可。默认用户名和密码为root
开始实验
由于实验过程中需要将物理网络断掉,所以不建议使用ssh连接到NetStudio中。建议用TTL串行线连接到板子上。
禁用物理接口并启动OVS
守护进程
首先,用 OVS 接管 LAN/WAN 接口并连接到 OpenFlow 控制器。由于默认网络配置中,流量由CPU处理,所以,我们需要删除/etc/config/network
中的bridge-lan
接口,以便 OVS 能独占管理网络接口。
1 |
|
然后,启动OVS守护进程。
1 |
|
可能存在的问题
在这一步,有可能会出现一些问题,这里来逐一介绍。
问题1:ovsdb-server: /var/run/openvswitch/ovsdb-server.pid.tmp: create failed (No such file or directory)
这个问题表示,/var/run/openvswitch/
目录根本不存在,所以它没法写 PID 文件,也没法创建 socket。
解决方法:先手动创建 /var/run/openvswitch
目录:
1 |
|
然后重新执行ovsdb-server
命令。
1 |
|
问题2:ovsdb-server: I/O error: /etc/openvswitch/conf.db: open failed (No such file or directory)
这个问题的关键是,OVS 的数据库文件 conf.db
根本不存在,所以 ovsdb-server
也起不来。
要解决这个问题,我们需要手动初始化 Open vSwitch 的数据库。
具体操作步骤:
确认目录存在
确认/etc/openvswitch
目录是存在的,如果没有,就建一个:1
mkdir -p /etc/openvswitch
用 ovsdb-tool 创建初始数据库
输入下面命令创建conf.db
:1
ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
这里:
/etc/openvswitch/conf.db
是新建的数据库路径/usr/share/openvswitch/vswitch.ovsschema
是 OVS 官方提供的schema模板
重新启动 ovsdb-server
1
2
3ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach
启动ovs-vswitchd
在NetStudio中执行
1 |
|
当看到输出connected
时,表示一整套的OVS守护进程完全启动成功了。
创建 OVS 桥并添加端口
现在,OVS已经运行成功,可以继续进行实验。
1 |
|
验证和确认现有端口状态
你可以运行以下命令确认当前 br0
的配置情况:
1 |
|
你应能看到类似以下结构:
1 |
|
连接控制器,并且测试连接和流表
由于关闭了NetStudio的物理接口, 所以DHCP服务也一并停止了。我们需要将VMware桥接到我们宿主机的以太网卡上,并且在Ubuntu中设置静态IP地址。
1 |
|
在NetStudio中ping一下宿主机和Ubuntu的IP地址,检查是否可以通信。
如果可以通信,就可以进行下一步了。
在Ubuntu中启动控制器:
1 |
|
在NetStudio上设置控制器:
1 |
|
可以看到,连接到控制器后,Ubuntu会输出处理流量的情况。
我们可以用宿主机ping一下NetStudio和Ubuntu,来查看控制器以及流表是否正常工作。
1 |
|
可以看到,ping之前只有一条默认流表,ping之后NetStudio上多了两条流表。证明实验成功。