Ryu SDN Framework を導入する
<構築環境>
<VMを作成>
$ mkdir ryu $ cd ryu $ vagrant init $ vim Vgrantfile
ubuntuのイメージのダウンロード
$ vagrant box add ubuntu1604lts https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box
Vgrantfileを編集
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu1604lts" config.vm.network "private_network", ip: "192.168.33.16" config.vm.provider "virtualbox" do |vb| vb.memory = "2048" end end
編集が終わったらVMを立ち上げます
$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'ubuntu1604lts'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: ryu_default_1493789865556_15822 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 <省略>
立ち上がったらログインします
$ vagrant ssh Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-38-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. ubuntu@ubuntu-xenial:~$
<Ryuのインストール>
まずapt-getをアップデートします
$ sudo apt-get update
pythonがなかったのでpythonをインストール(pythonは2.7系)
同時にpipとその他もインストールします
pipがインストール終わったらアップグレード
$ sudo apt-get install -y python $ sudo apt-get install -y python-pip python-dev libxml2-dev libxslt-dev zlib1g-dev $ sudo pip install --upgrade pip
それではRyuをインストールします
$ sudo pip install ryu $ ryu --version ryu 4.13
Ryuのインストールが完了
Mininetを使用することにより、ユーザは複数台のPCを用意する事なくOpenFlowが動く環境を簡単に用意できるので次にMininetインストール
gitがインストールされてないならgitをインストール
$ git --version git version 2.7.4 $ git clone git://github.com/mininet/mininet $ cd mininet/ $ git checkout -b 2.2.1 2.2.1 $ cd .. $ mininet/util/install.sh -nfv $ man mn
man mn
インストールできているか確認
Mininetのインストールが完了
<RyuとMininetの動作確認>
サンプルが以下のディレクトリに入っている /usr/local/lib/python2.7/dist-packages/ryu/app/ 実行時にこのパスを入力するのは面倒なのでシンボリックリンクを作る
$ ln -s /usr/local/lib/python2.7/dist-packages/ryu /home/ubuntu/ryu
コンソール2つ開いてMininetとryu-managerを触る
まず,コンソール1でsimple_switch.pyを起動し、接続する
$ ryu-manager ryu/app/simple_switch.py
この時に,error: [Errno 98] Address already in useというエラーがでたら下記を実行する
$ sudo lsof -i -nP ovs-testc 16342 root 3u IPv4 40523 0t0 TCP *:6653 (LISTEN)
上記のプロセスがあるならkillする
$ sudo kill 16342
コンソール1でsimple_switch.pyを実行しておき
コンソール2でMininetを実行する
$ sudo mn --controller remote *** Creating network *** Adding controller *** Adding hosts: h1 h2 *** Adding switches: s1 *** Adding links: (h1, s1) (h2, s1) *** Configuring hosts h1 h2 *** Starting controller c0 *** Starting 1 switches s1 ... *** Starting CLI: mininet>
pingallと入力すると下記のようになればOK
mininet> pingall *** Ping: testing ping reachability h1 -> h2 h2 -> h1 *** Results: 0% dropped (2/2 received)
これで動作確認完了です