基于SDN开发DDoS攻击检测和防御程序 (二):环境

这部分简述如何搭建SDN的开发和运行环境,包括控制器Ryu,仿真平台mininet,虚拟交换机Open vSwitch等。
先放一张浮夸的图。

操作系统

本论文所有的程序开发、软件运行和测试环境都基于Ubuntu桌面版14.04.4 64位操作系统。操作系统镜像由官方网站获得,根据官网指导完成操作系统的安装与部署,此处不再赘述。

安装完成后,执行如下命令将软件依赖和更新源升级到最新版本。

1
2
$ sudo apt-get –y update
$ sudo apt-get –y upgrade

部署Ryu

安装依赖关系

安装Ryu需要解决如表所示的依赖关系:

软件 功能
python-eventlet 支持Ryu内部的线程模型
python-routes 支持Ryu的REST API消息路由
python-webob 支持Ryu应用程序解析web对象
python-paramiko 支持NETCONF和BGP speaker模块

执行如下命令安装依赖程序:

1
$ sudo apt-get install python-eventlet python-routes python-webob python-paramiko

上述软件安装成功后,即满足依赖关系。

安装Ryu

Ryu的源代码托管在GitHub上面,需要通过git工具获取。执行如下命令安装git:

1
2
3
4
5
$ sudo apt-get install git
#获取Ryu源代码:
$ git clone git://github.com/osrg/ryu.git
#源码安装:
$ cd ryu && sudo python setup.py install

至此,Ryu安装成功。

测试

Ryu安装成功后可以通过如下命令测试是否可以正常工作。

1
$ ryu-manager ryu/ryu/app/simple_switch_13.py

如果没有报错即可正常运行。如果出现如表所示的错误,则需要根据表中的方法逐一解决。

问题 解决方法
pkg_resources.DistributionNotFound: ovs>=2.6.0.dev0 sudo pip install https://pypi.python.org/packages/source/o/ovs/ovs-2.6.0.dev0.tar.gz
pkg_resources.DistributionNotFound: oslo.config>=1.6.0 sudo pip install –upgrade oslo.config
pkg_resources.DistributionNotFound: msgpack-python>=0.3.0 sudo pip install –upgrade msgpack-python
pkg_resources.DistributionNotFound: eventlet>=0.15 sudo pip install –upgrade eventlet

出现如下内容表示Ryu启动成功。

1
2
3
4
loading app simple_switch_13.py
loading app ryu.controller.ofp_handler
instantiating app simple_switch_13.py of SimpleSwitch13
instantiating app ryu.controller.ofp_handler of OFPHandler

部署Mininet

1
2
3
4
#获取Mininet源码:
$ git clone git://github.com/mininet/mininet
#源码安装:
$ mininet/util/install.sh –nf

安装参数nf的含义如表所示。

参数 含义
-n 安装Mininet依赖和核心文件
-f 安装OpenFlow

部署Open vSwitch

安装

可以在安装Mininet时指定-v参数以通过Mininet的安装脚本安装Open vSwitch,然而这种方法安装的Open vSwitch版本为2.0.2,不支持本设计于匹配域中使用的tcp_flags字段,因此通过源码编译安装最新版本2.5.0。

1
2
3
4
5
6
7
8
9
10
#获取安装程序:
$ wget http://openvswitch.org/releases/openvswitch-2.5.0.tar.gz
#解压:
$ tar –xzvf openvswitch-2.5.0.tar.gz && cd openvswitch-2.5.0
#配置:
$ ./configure
#编译:
$ make
#安装:
$ sudo make install

配置

编译安装成功后,需要通过如下命令配置Open vSwitch。

  • 使用ovsdb-tool初始化配置数据库:

    1
    2
    3
    $ mkdir -p /usr/local/etc/openvswitch
    $ ovsdb-tool create /usr/local/etc/openvswitch/conf.db \
    /usr/local/share/openvswitch/vswitch.ovsschema
  • 启动配置数据库ovsdb-server:

    1
    2
    3
    4
    5
    6
    7
    $ ovsdb-server \
    --remote=punix:/usr/local/var/run/openvswitch/db.sock \
    --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
    --private-key=db:Open_vSwitch,SSL,private_key \
    --certificate=db:Open_vSwitch,SSL,certificate \
    --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
    --pidfile –detach
  • 初始化数据库:

    1
    $ ovs-vsctl --no-wait init
  • 启动ovs守护程序:

    1
    $ ovs-vswitchd --pidfile –detach

至此Open vSwitch配置并启动完毕。

启动SDN环境

环境部署完成后,使用以下命令启动Mininet环境:

1
2
$ sudo mn --topo single,3 --mac --controller remote \
--switch ovsk,protocols=OpenFlow13 -x

各项参数含义如表所示。

参数 含义
mac 将mac地址设置易于识别的主机编号
switch ovsk 使用Open vSwitch交换机
controller remote 使用外部控制器(默认通信端口tcp 6633)
x 启动xterm连接每个节点终端
topo single,3 指定拓扑结构,此处为3台主机连接一台交换机

再通过如下命令启动启动Ryu控制器,以main.py为例:

1
$ ryu-manager main.py
如果您觉得这篇文章对您有帮助,不妨支持我一下!