OpenFlowというのに興味があったので、手元のVMWare Serverを使って動作環境を構築してみました。
OpenFlowというのは、簡単にいうと、たくさんのスイッチングハブを一つのコントローラアプリケーション(ソフトウェア)で制御するための仕様です。
普通のユーザにはあまり関係のないものだと思いますが、ネットワークの研究をする方には、いろんなネットワークを構築しやすくなるので、便利なしくみだと思います。
私もかじり始めたばかりで、あまり偉そうに説明できないので詳しくはOpenFlowのサイトを見たり、検索してみてください。
今回は以下のサイトに記載されている手順で環境を作りましたが、OpenFlowが動作するUbuntuは現時点で最新の11.04を使用しました。
- Setting up Userspace OpenFlow switch on VMWare
http://www.openflow.org/wk/index.php/UserspaceSwitch_OnVMware
動作環境
- 仮想化テクノロジ
- 仮想マシンのOS
- OpenFlow
Ubuntu10.04上で動作するVMWare Server 2.0.2
Ubuntu11.04 Desktop i386
OpenFlow1.1OpenFlow1.0.0
目標とするネットワーク
異なるネットワークに接続する3つのHostを一つのSwitchを経由して通信できるようにします。
普通のスイッチングハブならハードウェアでやってしまうので意識することはありませんが、ここではソフトウェアのSwitchをソフトウェアのControllerで制御して、スイッチングハブと同様の動作をさせます。
Host、Switch、Controllerはそれぞれ別のVMで起動し、ControllerとSwitchの間と、HostとSwitchの間は仮想ネットワークで接続します。
ControllerとSwitchのソフトウェアにはOpenFlow付属のものを使用します。
事前準備
- VMWare Serverは事前にセットアップしておいてください。(いや、これが結構苦労したんですけど。)
- VMWare Serverで、外部からパッケージ等をダウンロードするためのブリッジ接続(またはNAT接続)の他に、仮想ネットワークを最低4つ用意する必要があります。
- Ubuntu11.04 Desktopのisoイメージはダウンロードしておいてください。
※VMに関する操作はすべてVMWare Serverに付属のWeb Accessインタフェースを使用して行います。
VMWare Serverが動作するホストでvmware-config.plを使って、仮想ネットワークとして”host-only接続”か”NAT接続”をあわせて4つ作ってください。
作り方は以下のサイトが参考になると思います。
http://tipspc.blogspot.com/2009/07/vmware-server-x-linux.html
※仮想ネットワークのアドレスは使用しないので、とりあえず適当に設定してください。
なお、今回作るVMのみで使えるネットワークがすでに必要な数ある場合は、新しく作る必要はありません。
大まかな手順
- VM作成
- OpenFlowインストール
- VMコピー
- 設定&動作確認
※長くなりますが、お付き合い下さい。
手順
- 仮想マシン(Controller用)を作成&OSのインストール
- ハードディスクは8GBもあれば十分です。なお、今後同じサイズのVMを他に4つ作りますので、ホストマシンには5*8=40GBの空き容量が必要です。
- ネットワークアダプターは、外部と接続できるブリッジ接続を選んでください。
- CD/DVD Driveには、事前準備3で用意したisoイメージを指定してください。
- OpenFlowをインストール
- Ubuntu Install
- ビルド環境等をインストール
- corkscrewの設定(プロキシを使う場合)
- まさおのブログ (表): proxy サーバ経由で git を使う方法
- GITでOpenFlowを取得
- OpenFlowをビルド
- 次にWireshark(とOpenFlow用のプラグイン)をインストール
- Regression Suiteのインストール
- IPv6無効化など
- 再起動
- 環境変数設定
- rootアカウントのパスワードを設定
- インストールの確認
- VMをコピー
VMWare Server2.0.2のWeb Accessインタフェースより、[Virtual Machine] – [Create Virtual Machine]を実行
Nameはとりあえず”OpenFlow01″とします。
OSはUbuntu11.04 desktopを入れます。
このVMはControllerとして使用しますので、メモリーは上記のサイトに記載されている通り、”1024″MB(1GB)にしてください。
その他のポイントは以下のとおり。
“/var/lib/vmware/Virtual Machines/”等のVMイメージを置くディレクトリにisoファイルを置かないと参照できないので、注意。
設定が終わったら、VMを起動し、Ubuntuのインストールをおこなって下さい。
Ubuntuのインストールが終わったら、以下のサイトを参考にして、作成したVMにOpenFlowをインストールします。
このサイトに記載されている手順(ほぼそのまま)を以下で詳しく書きます。
なお、OpenFlowをインストールするVMで、ブリッジ接続を使っても外部と通信できない環境の場合、プロキシ等を使用して外部と通信できるようにしてください。
Ubuntu 11.04はデスクトップから、System – Preference – Network Proxyでプロキシの設定が可能です。
$ sudo apt-get update $ sudo apt-get -y install ssh $ sudo apt-get -y install git-core automake m4 pkg-config libtool
ターミナルから上記コマンドを実行してください。(以下”$”や”#”で始まる行はターミナルへの入力です。”$”がユーザアカウント、”#”がルートアカウントで入力する行です。)
次にgitでOpenFlowを取得しますが、もしgitをプロキシ経由で使う場合、以下のサイト等を参考にcorkscrewを設定しておいてください。
$ git clone git://openflow.org/openflow.git $ cd openflow $ ./boot.sh
なお、結果として以下のように表示されると思いますが、問題ありません。
configure.ac:43: installing `build-aux/compile` configure.ac:40: installing `build-aux/install-sh` configure.ac:40: installing `build-aux/missing` Makefile.am: installing `build-aux/depcomp`
$ ./configure $ make $ sudo make install
$ sudo apt-get -y install wireshark libgtk2.0-dev $ cd utilities/wireshark_dissectors/openflow $ make $ make install
上記のプラグインをインストールする箇所ですが、wiresharkはユーザアカウントで実行するので、”sudo make install”ではなく”make install”してください。
$ cd ~/openflow $ sudo regress/scripts/install_deps.pl
ここで、プロキシを使用している方は、一見正常終了しているように見えて、途中で
Resolving search.cpan.org... failed: Name or service not known. wget: unable to resolve host address `search.cpan.org`
などとエラーメッセージが出力されているかもしれません。
Perlから呼び出すwgetにプロキシを指定するために以下を実行してください。
$ cat > ~/.wgetrc <<__EOF__ http_proxy=$HTTP_PROXY __EOF__
これで~/.wgetrcにプロキシを設定できますので、install_deps.plを再度実行してください。
※$HTTP_PROXYのところは、環境変数HTTP_PROXYの定義がない場合は適切なプロキシ設定に置き換えてください。
$ sudo apt-get -y remove avahi-daemon $ sudo vi /etc/sysctl.conf
/etc/sysctl.confには以下を追記
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
$ sudo vi /etc/modprobe.d/blacklist.conf
/etc/modprobe.d/blacklist.confには以下を追記
blacklist net-pf-10 blacklist ipv6
$ sudo shutdown -r now
$ cd ~/ $ cp openflow/regress/scripts/env_vars . $ vi env_vars
env_varsにある、OF_ROOTのディレクトリを自分の環境にあったものに修正してください。
$ sudo passwd root
$ su # source env_vars # veth_setup.pl # ifconfig
ここで、veth0~7まで作成されていることを確認
wiresharkでOpenFlowのパケットを解釈することができますが、
現在セットアップしている環境ではrootでwiresharkを起動できません。
といって、一般ユーザですとネットワークインタフェースを参照できません。
そこでひと手間。一般ユーザで起動して、ネットワークインタフェースを見られるようにします。
参照:http://www35.atwiki.jp/futoyama/pages/83.html
# setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
を実行した後、ユーザ権限でwiresharkを起動(デスクトップのメニューから起動)。
wiresharkのFilter欄に、
of || tcp.flags.reset == 1
を入力し、
Capture -> Interfacesを開き、"lo"(ループバック)をStartしてください。
ターミナルからルート権限で、
# of_user_veth_test.pl
を実行し、wireshark上にopenflowのパケットが表示されればOpenFlowのインストール成功です。