しかし、最近はMacを使うことが増えてきたので、MacでOpenFlow環境をあらためて準備することにしました。MacはLANポートないので、できればOpenFlowスイッチもソフトウェアのものを使いたいところです。
ちょうど下記ブログを見つけましたので、参考にさせていただきました。
きりんさん日記: OpenFlow Controllerフレームワーク(Python/POX, Trema/Ruby, C, Java)を試す(Simple Learning L2 Switch)
調べると、仮想マシン上にOpenFlowコントローラ・スイッチをinstallすれば、物理PCのOSにこだわる必要はなさそうです。
また。MininetというPythonベースのOpenFlowスイッチ(エミュレータ)の存在を知りました。これで複雑なネットワークトポロジおよびエッジスイッチに接続するhostもエミュレータできます。VM imageがあるとのことなので利用することにします。MacにV仮想環境としてVirtualBoxをinstallし、VM imageを起動します。
OpenFlowコントローラは、NOXのPython版の「POX」があり、Macにinstallできるので、これを利用することにします。
どちらもPythonベースです。ちょうどPythonを勉強しているので、いいタイミングです。
OS | OpenFlow ver | OpenFlow コントローラー | OpenFlow スイッチ | 備考 | |
---|---|---|---|---|---|
前回 | Win | 1.1 | NOX 1.1 Oflib | OpenFlow 1.1 for WHR-G301N | 前回記事参照 Win以外も可能 |
今回 | Mac | 1.0 | POX | Mininet | Mac以外も可能 たまたまどちらも1.0対応 |
OpenFlowコントローラーの準備
インストール手順は下記の通り。
- https://github.com/noxrepo/poxにアクセス
- git cloneで、localにコピー
Mac用のgithubアプリをinstallしている場合、下記の「Clone in Mac」をクリックし、適当な場所にclone(保存) - ターミナル画面をopenし、上記2で保存した場所に移動
lsすると、下記のようなファイル・フォルダが確認できます。
$ pwd /Users/N1202A013/Documents/github/pox 43220800:pox N1202A013$ ls COPYING debug-pox.py ext pox.py tests README doc pox setup.cfg tools
- POXを起動
下記のように、Moduleを指定して起動します。これで、OpenFlowスイッチに問い合わせ待ち状態になります。(オプションを指定することで、問い合わせ元のIPやportを指定・変更することもできます。今回は省略)
$ ./pox.py forwarding.l2_learning POX 0.0.0 / Copyright 2011 James McCauley DEBUG:core:POX 0.0.0 going up... DEBUG:core:Running on CPython (2.7.3/Apr 9 2012 20:52:43) INFO:core:POX 0.0.0 is up. This program comes with ABSOLUTELY NO WARRANTY. This program is free software, and you are welcome to redistribute it under certain conditions. Type 'help(pox.license)' for details. DEBUG:openflow.of_01:Listening for connections on 0.0.0.0:6633 Ready. POX>
OpenFlowスイッチ(Mininet)の準備
- MininetのVM imageをDL
こちらを参考にMininetのVM imageをDLします。 - VirtualBoxのinstall
こちらからOS X用をDL - VirtualBoxにて、VMを新規作成
こちらを参考に、VM新規作成後、HDDイメージとして、上記1でDLしたvmdx fileを指定。 - VirtualBoxにて上記3で作成したVMを起動、該当VMにlogin
ID:openflow
PW:openflow - Mininetを起動。コントローラーとして、上述のPOXを指定
スイッチ:s1に、ホスト:h2,h3を接続し、h2,h3間でpingが通ることを
openflow@mininet-vm:~$ sudo mn --controller=remote --ip=<POX IP> --port=6633 *** Adding controller *** Creating network *** Adding hosts: h2 h3 *** Adding switches: s1 *** Adding links: (s1, h2) (s1, h3) *** Configuring hosts h2 h3 *** Starting controller *** Starting 1 switches s1 *** Starting CLI: mininet> nodes available nodes are: h2 h3 s1 c0 mininet> net s1 <-> h2-eth0 h3-eth0 mininet> pingall *** Ping: testing ping reachability h2 -> h3 h3 -> h2 *** Results: 0% dropped (0/2 lost) mininet>
参考までに、上記コマンド実行時のPOX側のdubug画面を下記に添付します。
上記のpingallのタイミングで、OpenFlowスイッチ(Mininet)からOpenFlowコントローラ(POX)に問い合わせがきているようです。(詳細はおいおい調べていくということで)
POX> INFO:openflow.of_01:[Con 1/1] Connected to 00-00-00-00-00-01 DEBUG:forwarding.l2_learning:Connection [Con 1/1] INFO:openflow.of_01:[Con 1/1] closing connection INFO:openflow.of_01:[Con 2/1] Connected to 00-00-00-00-00-01 DEBUG:forwarding.l2_learning:Connection [Con 2/1] DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1 DEBUG:forwarding.l2_learning:installing flow for 4a:8f:f1:97:0c:c3.1 -> 2e:b8:2d:29:f4:97.2 DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1 DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1 DEBUG:forwarding.l2_learning:installing flow for 4a:8f:f1:97:0c:c3.1 -> 2e:b8:2d:29:f4:97.2 DEBUG:forwarding.l2_learning:installing flow for 2e:b8:2d:29:f4:97.2 -> 4a:8f:f1:97:0c:c3.1 DEBUG:forwarding.l2_learning:installing flow for 4a:8f:f1:97:0c:c3.1 -> 2e:b8:2d:29:f4:97.2
まとめ
- 今回、Mac上にOpenFlow環境を構築しました。
- OpenFlowコントローラーとしてNOX、OpenFlowスイッチとしてMininetを使用しました。
- 今回の環境はMac以外にの環境でも実装可能です。
- Mininetはいろいろと動作させることができ、面白そうです。引き続き調べたいと思います。
- Mininetは、OpenFlowコントローラに問い合わせしなくても単体でも動作するようです。
- 今回のMininet操作については、こちらの「Getting Started with Mininet」の上3つのdocを参考にしました。
- Mininet tutorialに詳細説明がありそう。
続く。。。
2012/7/9 追記
MininetのVMにはNOXもinstallされていました。結局、Mininet VMがあれば一通りの環境はできそうです。下記参考になりました。
http://www.openflow.org/wk/index.php/OpenFlow_Tutorial