从零开始:Mininet + Ryu 搭建SDN软件定义网络环境

Mininet 是一个强大的网络仿真器,可以在单个系统上模拟复杂的网络环境。它利用Linux的网络命名空间创建一个由虚拟主机、交换机、路由器和链路组成的网络,并且这个网络的行为表现得就像是一个真实的物理网络一样。Mininet 特别适合于SDN和OpenFlow协议的开发和测试,因为它支持使用自定义控制器来控制网络中的虚拟交换机。在Mininet环境中,用户可以快速启动、修改网络拓扑,并且可以实时地测试网络配置和应用程序。

Mininet承担的是网络创建和管理的角色。它负责模拟网络设备和拓扑,并提供了一个实验平台,让用户可以在虚拟环境中测试他们的SDN解决方案。

Ryu 是一个用Python编写的SDN控制器框架,提供了一套完整的控制器功能,允许开发人员编写自己的网络管理和控制程序。Ryu 支持多种SDN协议,包括OpenFlow,是开发和测试SDN应用程序的理想选择。Ryu控制器允许开发人员创建用于定义网络流量处理方式的策略和规则。

在 Mininet + Ryu 的环境中,Ryu 承担的是网络控制和管理的角色。Ryu 控制器与Mininet仿真的网络设备进行通信,控制网络流量的流向,并且实施网络策略。

Mininet + Ryu 安装

安装环境及版本需求:

  • Ubuntu 22.04
  • Mininet 2.3.0
  • Ryu 4.34
  • Python 3.8
  • Ovs 2.9.8
  • OpenFlow 1.3

Mininet 安装

官网支持3种安装方式,这里采用从源进行安装的方式

更新系统软件包

1
2
sudo apt-get update
sudo apt-get upgrade

下载并安装

1
2
3
4
5
6
7
sudo mkdir -p /opt/mininet_package
cd /opt/mininet_package
sudo git clone https://github.com/mininet/mininet
sudo git tag
sudo git checkout -b mininet-2.3.0 2.3.0
cd ..
sudo ./mininet/util/install.sh -a

参数-a:安装 Mininet VM 中包含的所有内容,包括 Open vSwitch 等依赖项以及 OpenFlowwireshark 解析器和 POX 等附加项。默认情况下,这些工具将内置在您的主目录中创建的目录中。

安装过程中出现如图报错:

解决方法:

1
2
git clone --global url.https://github.com/.insteadOf git://github.com/
sudo ./mininet/util/install.sh -a

看到如下界面则说明安装完成:

安装完成后,进行测试,测试成功如图所示

1
sudo mn --switch ovsbr --test pingall

Ryu安装

Ryu安装需要的python版本为3.8,但是Ubuntu 22.04系统的python3版本为3.10;

所以首先要先下载python3.8,启用虚拟环境ryu-venv;

1
2
3
4
5
6
7
8
9
sudo apt-get update
sudo apt-get install software-properties-common # 安装软件属性管理工具
sudo add-apt-repository ppa:deadsnakes/ppa # 添加PPA仓库用于安装更新版本的python
sudo apt-get update # 再次更新软件包列表,这次就包含了新添加的PPA库
sudo apt-get install python3.8 python3.8-venv python3.8-dev # 安装python3.8和其虚拟环境和开发工具包
python3.8 -m venv ryu-venv # 使用python3.8创建名为ryu-venv的虚拟环境
source ryu-venv/bin/activate # 激活虚拟环境
pip uninstall eventlet # 卸载原来自带的eventlet包
pip install eventlet==0.30.2 # 安装指定版本的eventlet 0.30.2版本的包

上面是启动ryu的虚拟环境,接下来是安装ryu,采用的是源安装的方式

1
2
3
4
git clone https://github.com/faucetsdn/ryu.git
cd ryu
pip install .
pip install -r tools/optional-requires

测试是否安装成功:

1
2
pip show ryu
run-manager

进入和退出虚拟环境:

1
2
source ryu-venv/bin/activate
deactivate

接下来安装并启动Ryu GUI;

1
2
3
pip install -r tools/pip-requires
cd /home/ubuntu/ryu/app/gui_topology
ryu-manager --observe-links --verbose gui_topology.py

然后打开浏览器输入http://0.0.0.0:8080就可以访问GUI界面了

Mininet 与 Ryu联动,运行openflow1.3的交换机

1
ryu-manager --observe-links --verbose /home/ubuntu/ryu/app/gui_topologygui_topology.py /home/ubuntu/ryu/app/simple_switch_13.py

命令参数解读:

  • --observe-links:这是一个选项,告诉 ryu-manager 启动一个内置的 Ryu 应用(ryu.topology.observers.links),它可以发现网络中的链路,并观察链路的变化。
  • --verbose:这个选项使 Ryu 在执行时提供详细的日志输出,有助于调试或详细跟踪 Ryu 的行为。
  • gui_topology.py:这个py提供了一个网络拓扑的图形用户界面,实现可视化观察网络状态。
  • simple_switch_13.py:实现了一个简单的 OpenFlow 1.3 兼容的交换机。

另外打开一个终端,输入Mininet的语句:

1
sudo mn --controller remote,ip=127.0.0.1 --topo linear,3 --mac --switch ovsk --link tc

命令参数解读:

  • --controller remote,ip=127.0.0.1:这告诉Mininet使用一个远程控制器,其IP地址是127.0.0.1(localhost)。这意味着Mininet将尝试连接到运行在本地计算机上的SDN控制器。
  • --topo linear,3:这定义了将被创建的网络拓扑。linear是拓扑类型,后面的3指定了拓扑中的交换机数量。在这里,创建了一个线性拓扑,其中包含3个串联连接的交换机。
  • --mac:设置Mininet为每个主机自动设置MAC地址,其地址会根据主机编号来生成。
    • --switch ovsk:指定使用 Open vSwitch 内核模块作为虚拟交换机。
  • --link tc:使用 Linux 的 tc(traffic control)工具来配置网络链路参数,如延迟、带宽限制等。

然后就可以看到如下界面,到此,环境的搭建就成功了~