使用NetStudio做OpenFlow实验

实验前准备

编译OpenFlow相关组件到NetStudio中

在NetStudio的源码路径下,运行make menuconfig进入自定义界面,将openvswitchopenvswitch-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
2
3
4
5
6
7
8
9
10
- config device
- option name 'bridge-lan'
- option type 'bridge'
- list ports 'eth0.1'

- config interface 'lan'
- option device 'bridge-lan'
- option proto 'static'
- option ipaddr '192.168.10.1'
- option netmask '255.255.255.0'

然后,启动OVS守护进程。

1
2
3
ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach

可能存在的问题

在这一步,有可能会出现一些问题,这里来逐一介绍。

问题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
mkdir -p /var/run/openvswitch

然后重新执行ovsdb-server命令。

1
2
3
ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach

问题2:
ovsdb-server: I/O error: /etc/openvswitch/conf.db: open failed (No such file or directory)
这个问题的关键是,OVS 的数据库文件 conf.db 根本不存在,所以 ovsdb-server 也起不来。
要解决这个问题,我们需要手动初始化 Open vSwitch 的数据库
具体操作步骤:

  1. 确认目录存在
    确认 /etc/openvswitch 目录是存在的,如果没有,就建一个:

    1
    mkdir -p /etc/openvswitch
  2. 用 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模板

  3. 重新启动 ovsdb-server

    1
    2
    3
    ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
    --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
    --pidfile --detach

启动ovs-vswitchd

在NetStudio中执行

1
ovs-vswitchd unix:/var/run/openvswitch/db.sock --pidfile --detach

当看到输出connected时,表示一整套的OVS守护进程完全启动成功了。

创建 OVS 桥并添加端口

现在,OVS已经运行成功,可以继续进行实验。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建 OVS 网桥
ovs-vsctl add-br br0

# 使用ip命令临时创建 VLAN 子接口
ip link add link eth0 name eth0.1 type vlan id 1
ip link set eth0.1 up

# 将物理接口加入桥中(eth0.1 是你的 LAN,eth0.2 是 WAN)
ovs-vsctl add-port br0 eth0.1
ovs-vsctl add-port br0 eth0.2 # 可选

# 设置 IP 给 br0(模拟原有 LAN IP)
ip addr add 192.168.10.1/24 dev br0
ip link set br0 up

验证和确认现有端口状态

你可以运行以下命令确认当前 br0 的配置情况:

1
ovs-vsctl show

你应能看到类似以下结构:

1
2
3
4
5
Bridge "br0"
Port "br0"
Interface "br0"
Port "eth0.1"
Interface "eth0.1"

连接控制器,并且测试连接和流表

由于关闭了NetStudio的物理接口, 所以DHCP服务也一并停止了。我们需要将VMware桥接到我们宿主机的以太网卡上,并且在Ubuntu中设置静态IP地址。

1
sudo ifconfig eth0 192.168.10.2 netmask 255.255.255.0 up

在NetStudio中ping一下宿主机和Ubuntu的IP地址,检查是否可以通信。

如果可以通信,就可以进行下一步了。

在Ubuntu中启动控制器:

1
ryu-manager ryu.app.simple_switch_13


在NetStudio上设置控制器:

1
ovs-vsctl set-controller br0 tcp:<controller-ip>:6633

可以看到,连接到控制器后,Ubuntu会输出处理流量的情况。

我们可以用宿主机ping一下NetStudio和Ubuntu,来查看控制器以及流表是否正常工作。

1
2
ovs-ofctl show br0
ovs-ofctl dump-flows br0


可以看到,ping之前只有一条默认流表,ping之后NetStudio上多了两条流表。证明实验成功。


使用NetStudio做OpenFlow实验
https://blog.hasong.top/2025/05/07/使用NetStudio做OpenFlow实验/
Author
hasong
Posted on
May 7, 2025
Licensed under