2012年7月8日日曜日

OpenFlow環境をつくってみた(POX,Mininet編)

前回、Windows環境にて、VMware Playerと安価な物理スイッチ(実際にはwifiルータ)を使って環境をつくりました。

しかし、最近は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を勉強しているので、いいタイミングです。

OSOpenFlow
ver
OpenFlow
コントローラー
OpenFlow
スイッチ
備考
前回Win1.1NOX 1.1 OflibOpenFlow 1.1 for WHR-G301N前回記事参照
Win以外も可能
今回Mac1.0POXMininetMac以外も可能
たまたまどちらも1.0対応


OpenFlowコントローラーの準備
インストール手順は下記の通り。

  1. https://github.com/noxrepo/poxにアクセス
  2. git cloneで、localにコピー
    Mac用のgithubアプリをinstallしている場合、下記の「Clone in Mac」をクリックし、適当な場所にclone(保存)
  3. ターミナル画面を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 
  4. 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)の準備

  1. MininetのVM imageをDL
    こちらを参考にMininetのVM imageをDLします。
  2. VirtualBoxのinstall
    こちらからOS X用をDL
  3. VirtualBoxにて、VMを新規作成
    こちらを参考に、VM新規作成後、HDDイメージとして、上記1でDLしたvmdx fileを指定。
  4. VirtualBoxにて上記3で作成したVMを起動、該当VMにlogin
    ID:openflow
    PW:openflow
  5. 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

このエントリーをはてなブックマークに追加