ラベル OpenFlow の投稿を表示しています。 すべての投稿を表示
ラベル OpenFlow の投稿を表示しています。 すべての投稿を表示

2013年1月5日土曜日

昨年の振り返りと、今年の目標

昨年に続き今年も。まずは振り返りから。

できたこと

  • iPhoneアプリの作成
    開発環境としてTitanium Mobileを利用(言語はjavascript)
    iTunes appstoregithubで公開
    ※appstoreでreviewいただけたのは本当にうれしかった。Titanium Mobileが安定したら、また開発再開したいと思います。
  • ビジネス会計2級合格
    会計知識0から始めて3級合格。そして、2回目の挑戦で2級合格。
  • OpenFlowコントローラ:Tremaとの出会い
    ちょうどTrema本の執筆の噂を聞いたので、文言の間違いやサンプルコードの動作確認などに参加しました。初めてのオブジェクト指向型言語で、最初は少し戸惑いましたが、Trema本にはRubyに関する簡単な説明もあるので、なんとか進める事ができました。
    書籍中「協力者」として、名前を記載いただきました。
    今まで簡単なスクリプトぐらいしか書く事がなく、Perlで対応していましたが、やっとRubyを使う機会を得ることができました。
  • HerokuとRuby on Railsでサイト作成
    Trema本でRubyに触れる機会を得たので、もう1つ気になっていた「Ruby on Rails」にも挑戦してみました。そして、PaaSであるHerokuを利用し、サイト構築してみました。サイトはこちら
    技術要素としては他に、O/R mapperの「ActiveRecord」や、CSSフレームワークの「Twitter Bootstrap」のRails版も利用しました。
  • ブログ
    この1年で、月間PV数が約2倍になりました。
    「ブログは継続が重要」を実感しました。

できなかったこと

  • 日頃の体力作り
    昨年後半から、朝のウォーキングが続かなくなった。
  • ビッグデータ関連の取り組み
    Hadoop、機械学習などを想定していたが、具体的な課題がないと、表面的な学習だけで終わり、継続できない。

で、

今年の目標

  • Tremaのアプリ作成
  • OpenStack, CloudStackのplugin作成
    Tremaの学習のoutputとして、何か作成してみたいなと。結局、OpenFlowで何ができるのか、何をしたいのか。。。
    できれば、plugin的なものもできればいいなと。OpenStackなど、CloudStack以外からも学ぶところは多いなと。
  • Railsを利用したサイト構築
    Railを通じて、今風のサイト構築の勘所を学習したいなと。

今年もよろしくお願いいたします。
このエントリーをはてなブックマークに追加

2012年9月10日月曜日

OpenFlow Tremaのサンプルプログラム作りに挑戦

前回から少し間が空きましたが、この間TremaとRubyの勉強を(少し)していました。
今回はTremaを使ってOpenFlowスイッチの統計情報を表示するサンプルプログラム作りに挑戦します。
作成し終わってから、似たようなサンプルがあることに気づきましたが、スルーします。

環境準備

下記サイトを参考にinstallします。
https://github.com/trema/trema/blob/develop/README.md

下記のサンプルコードも同時に、src/examples/にinstallされます。
https://github.com/trema/trema/tree/develop/src/examples


install完了したら、上述のlink先のtutorialや下記のTrema編の情報をみながら、実際にサンプルコードを触りながら、動作を確認していきます。Tremaはイベント駆動型で、最初は少し戸惑いました。
http://gihyo.jp/dev/serial/01/openflow_sd

サンプル

今回はOpenFlowスイッチの統計情報を収集するサンプルを作成します。
ネットワーク機器を運用していると、何かと統計情報を参照することが多いので、Tremaで、どのような情報を収集できるのか気になります。

tremaに付属しているサンプル「traffic_monitor」を元に、機能追加する形で実装します。

Trema APIはこちらにreferenceがありますが多すぎるので、まずは、こちらに記載のものから少しずつ試すのがいいと思います。
今回は、下記の2つのrequest messageをOpenFlowコントローラからOpenFlowスイッチに送出し、その結果を対応するevent handlerで待ち受けます。

<メッセージ>
Trema::FeaturesRequest
Trema::PortStatsRequest

<Event Handler>
features_reply(datapath_id, message)
stats_reply(datapath_id, message)

下記はコード抜粋です。
 class TrafficMonitor < Controller
 ---snip---
  def switch_ready datapath_id
    @datapath_id = datapath_id
    send_message datapath_id, FeaturesRequest.new
    send_message datapath_id, PortStatsRequest.new
  end
  def features_reply datapath_id, message
    puts "---------"
    p message.datapath_id
    p message.transaction_id
    p message.n_buffers
    p message.n_tables
    p message.capabilities
    p message.actions
    puts "==="
    p message.ports
  end
  def stats_reply datapath_id, message
    p message.flags
    p message.transaction_id
    p message.type
    puts message.stats
  end
 ---snip---
OpenFlowスイッチと接続時(switch_ready)、OpenFlowコントローラからOpenFlowスイッチに対して、FeaturesRequestとPortStatsRequestメッセージを送出しています。その後、OpenFlowスイッチからのそれぞれの応答(FeaturesReplyとPortStatsReply)を受け取ります。それぞれの応答を受け取るためのEvent Handler、はfeature_replyとstats_replyです。

出力結果は下記の通りです。
とりあえず、featuresとportstatsのreply messageを取得できていることがわかります。
$ cd trema/src/examples/test/
$ ls
fdb.rb  readme  traffic-monitor.rb  traffic_monitor.conf
$ ~/trema/trema run traffic-monitor.rb -c traffic_monitor.conf
##### features_reply結果 #####
---------
2748
174194689
256
1
135
4095
===
[#<Trema::Port:0xb734bc5c @peer=0, @name="trema0-0", @state=0, @supported=0, @config=0, @hw_addr=#<Trema::Mac:0xb734bc84 @string="3a:91:53:f7:8e:b7", @value=64395853401783>, @advertised=0, @number=2, @curr=192>, #<Trema::Port:0xb734b7e8 @peer=0, @name="vsw_0xabc", @state=1, @supported=0, @config=1, @hw_addr=#<Trema::Mac:0xb734b84c @string="e2:4d:c0:65:dc:2a", @value=248823568260138>, @advertised=0, @number=65534, @curr=130>, #<Trema::Port:0xb734b16c @peer=0, @name="trema1-0", @state=0, @supported=0, @config=0, @hw_addr=#<Trema::Mac:0xb734b310 @string="8a:75:10:17:c2:1c", @value=152235385799196>, @advertised=0, @number=1, @curr=192>]
###### stats_reply(PortsStatsReply)結果 #####
0
174194690
4
#<Trema::PortStatsReply:0xb73499e8>
collisions: 0
port_no: 2
rx_bytes: 0
rx_crc_err: 0
rx_dropped: 0
rx_errors: 0
rx_frame_err: 0
rx_over_err: 0
rx_packets: 0
tx_bytes: 0
tx_dropped: 0
tx_errors: 0
tx_packets: 0
#<Trema::PortStatsReply:0xb734922c>
collisions: 0
port_no: 65534
rx_bytes: 0
rx_crc_err: 0
rx_dropped: 0
rx_errors: 0
rx_frame_err: 0
rx_over_err: 0
rx_packets: 0
tx_bytes: 0
tx_dropped: 0
tx_errors: 0
tx_packets: 0
#<Trema::PortStatsReply:0xb734850c>
collisions: 0
port_no: 1
rx_bytes: 0
rx_crc_err: 0
rx_dropped: 0
rx_errors: 0
rx_frame_err: 0
rx_over_err: 0
rx_packets: 0
tx_bytes: 0
tx_dropped: 0
tx_errors: 0
tx_packets: 0


サンプルプログラム全体はgithubに置いてあります。
https://github.com/snumano/trema_stats

ハマりポイント

  • Trema情報少ない
    v0.2.5なので、現状では仕方ないですね。上述のサイトのtutorialやサンプルを参考に、必要なAPI documentを読んでいきます。
  • どのEvent Handlerを使えばいいか分かりづらい。
    上記のサンプルでは2種類のメッセージに対応するEvent Handlerを使っていますが、stats_replyで複数のメッセージ(*StatsRequets)に対応するReplyのEventを待ち受けするようです。
    ここのmessageのOb jectの説明をみてやっと理解できました。
  • バグや実装漏れ、ドキュメント間違い
    上述のstats_replyの動作について、実際の動作とDocumentに差異があり、悩んでいたのですが、結局古いTremaバージョンの不具合だったようで、最新バージョンにすることで解消しました。(常に最新バージョンにするようにしたほうがいいですね)
    また、ドキュメントにも小さな記載間違いなどがあるので、都度、確認するようにしています。間違いなど見つけたら、Issue Trackerに記載するようにしています。

引き続き、Tremaのサンプル作りに挑戦したいと思います。次はFlow情報系かな。。。

<追記>
・2012/9/10 出力結果追記
このエントリーをはてなブックマークに追加

2012年7月29日日曜日

OpenFlow環境をつくってみた(Trema編)










前回まででNOXに落ち着きそうだったのですが、Tremaの紹介記事が分かりやすかったので、Tremaに関心が向いてしまいました。さらに、Trema自体に仮想スイッチ・仮想ホストを自由なトポロジで簡単にエミュレートする機能もあり、さらに気にいってしまいました。
Trema github

下記記事では、上のtutorialなどを日本語でさらに分かりやすく説明しています。
こんな夜中にOpenFlowでネットワークをプログラミング!:第7回 【Trema編】新シリーズ始動! OpenFlow界のRailsことTrema入門

環境準備、コントローラー、NWエミュレータの設定は上記記事を参考にして、順調にすすめられました。
また、Rubyは初めてだったので、平行してdotinstallで勉強しました。
NWエミュレータの説明はこちらが参考になります。Open vSwitchを使ってるみたいですね。

気になったのはテストです。プログラミングは専門ではなかったので、ちゃんとテストを考えたことなかったのですが、最近「TDD:Test Drive Development(テスト駆動開発)」という言葉を知り、気になっていたのですが、どのようにテストを書いたらいいのか考えていたところに、よい事例紹介がありました。
こんな夜中にOpenFlowでネットワークをプログラミング!:第9回 【Trema編】テストファーストでアジャイルに

ここでハマったのは、Rubyのversionです。私の環境では、Ruby v1.9.3では、ruby テストフレームワークのRSpecがうまく動かなかったので、rvmを使ってrubyバージョンを切り替えられるようにして、v1.8.7で正常動作確認できました。



今は、上記の本を読んでいるところです。Rspecの説明もありますが、BDD(ビヘイビア駆動開発)の概念とその実践の説明になっています。
OpenFlowからは離れつつありますが、Seleniumへの応用ができる予感がしています。

Ruby on Railsアプリ以外でも Selenium RC を使えば RSpec でテストが書ける! - @yuumi3のお仕事日記 

次回OpenFlowの話に戻れるか、テストの話になるか、はたまた全く関係のない話になるか分かりませんが、今日はこの辺で。。。
このエントリーをはてなブックマークに追加

2012年7月12日木曜日

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

前回OpenFlow環境をつくった際に使用したMininet VM imageにNOXが入っていることや、Tutorialにもその辺りの記述があるのに気づきました。
今回は、Mininet VM imageにinstallされているものだけで、OpenFlowコントローラー(NOX)、OpenFlowスイッチ(Mininet)を準備します。
前回の説明と重複する部分がありますが、ご容赦ください。

Mininet VM imageの準備
  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にて当該VM imageを選択し、設定をクリック。
    ネットワークを選択し、ネットワーク設定を実施(今回はブリッジとして、Wi-fiを選択)
  5. VirtualBoxにて当該VMを起動、login
    ID:openflow
    PW:openflow
  6. /sbin/ifconfig eth0 にて、VM側のIPを確認
    (defaultではDHCPになっているので必要に応じて、static IPを設定してください。こちらが参照になります)
  7. Macからssh接続。
    上記6で確認したIPに対して、ターミナルからssh接続します。
    MAC$ ssh -X openflow@192.168.*.*         #VMのIPを指定。
                                                                       #X windowを利用できるように-Xを指定
    openflow@192.168.*.*'s password:          #default PW:openflow 
    Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    New release '12.04 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    Last login: Thu Jul 12 07:02:00 2012
    openflow@mininet-vm:~$                            #VMにlogin
    



OpenFlowコントローラーの起動

  1. こちらを参考に、noxの起動
  2. openflow@mininet-vm:~$ cd ~/noxcore/build/src/
    openflow@mininet-vm:~/noxcore/build/src$ sudo ./nox_core -v -i ptcp: pytutorial
    00001|nox|INFO:Starting nox_core (/home/openflow/noxcore/build/src/.libs/lt-nox_core)
    00002|nox|INFO:nox bootstrap complete
    


OpenFlowスイッチの起動
  1. こちらを参考に、Mininetを起動。スイッチ:s1に、ホスト:h2,h3,4を接続。
    nodes,netコマンドで、node情報、接続情報を確認。
    pingallコマンドで、h2,h3,h4間でpingが通ることを確認。
    例として、h2 ifconfigコマンドにて、特定hostにてlinuxコマンドを実行。
    MAC$ ssh -X openflow@192.168.*.*
    openflow@192.168.*.*'s password: 
    Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    New release '12.04 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    Last login: Thu Jul 12 07:08:56 2012 from 192.168.115.139
    openflow@mininet-vm:~$ sudo mn --topo single,3 --mac --switch ovsk --controller remote
    *** Loading openvswitch_mod
    *** Adding controller
    *** Creating network
    *** Adding hosts:
    h2 h3 h4 
    *** Adding switches:
    s1 
    *** Adding links:
    (s1, h2) (s1, h3) (s1, h4) 
    *** Configuring hosts
    h2 h3 h4 
    *** Starting controller
    *** Starting 1 switches
    s1 
    *** Starting CLI:
    mininet> nodes
    available nodes are: 
    h4 h3 h2 s1 c0
    mininet> net
    s1 <-> h2-eth0 h3-eth0 h4-eth0
    mininet> pingall
    *** Ping: testing ping reachability
    h2 -> h3 h4 
    h3 -> h2 h4 
    h4 -> h2 h3 
    *** Results: 0% dropped (0/6 lost)
    mininet> h2 ifconfig
    h2-eth0   Link encap:Ethernet  HWaddr 00:00:00:00:00:02  
              inet addr:10.0.0.2  Bcast:10.255.255.255  Mask:255.0.0.0
              inet6 addr: fe80::200:ff:fe00:2/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:32 errors:0 dropped:0 overruns:0 frame:0
              TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2344 (2.3 KB)  TX bytes:1028 (1.0 KB)
    
    mininet> 
    
これで、とりあえずOpenFlowコントローラーとスイッチが起動できました。

GUIコマンドの実行
MininetのHPに掲載されているGUIコマンドを試してみます。
  • consoles.py
    MAC$ssh -X openflow@192.168.*.*
    openflow@192.168.*.*'s password: 
    Welcome to Ubuntu 11.10 (GNU/Linux 3.0.0-12-generic i686)
    
     * Documentation:  https://help.ubuntu.com/
    New release '12.04 LTS' available.
    Run 'do-release-upgrade' to upgrade to it.
    
    Last login: Thu Jul 12 07:27:10 2012 from 192.168.115.139
    openflow@mininet-vm:~$ cd mininet/examples/
    openflow@mininet-vm:~/mininet/examples$ pwd
    /home/openflow/mininet/examples
    openflow@mininet-vm:~/mininet/examples$ sudo ./consoles.py 
    *** Adding controller
    *** Creating network
    *** Adding hosts:
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 
    *** Adding switches:
    s17 s18 s19 s20 s21 
    *** Adding links:
    (h1, s18) (h2, s18) (h3, s18) (h4, s18) (h5, s19) (h6, s19) (h7, s19) (h8, s19) (h9, s20) (h10, s20) (h11, s20) (h12, s20) (h13, s21) (h14, s21) (h15, s21) (h16, s21) (s17, s18) (s17, s19) (s17, s20) (s17, s21) 
    *** Configuring hosts
    h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 
    *** Starting controller
    *** Starting 5 switches
    s17 s18 s19 s20 s21 
    上記コマンドによって、新たにhost16台、スイッチ5台が作成されます。
    (先のMininetコマンドにて作成した構成を利用する方法はこれから調べます。。。)
    h1にてping 10.0.0.2(host2のIP)、h2にてifconfigを実行しています。
  • miniedit.py
    openflow@mininet-vm:~/mininet/examples$ pwd
    /home/openflow/mininet/examples
    openflow@mininet-vm:~/mininet/examples$ ls
    baresshd.py     hwintf.py           README             tree1024.py
    consoles.py     linearbandwidth.py  scratchnet.py      treeping64.py
    controllers.py  miniedit.py         scratchnetuser.py
    emptynet.py     multitest.py        sshd.py
    openflow@mininet-vm:~/mininet/examples$ sudo ./miniedit.py 
    下記のような画面が起動するので、スイッチ、hostを描いて、線で接続します。
    (しかし、この後の起動のさせ方はわかりませんでした。。。)


    今回は、Mininet VM imageに含まれるアプリのみで、OpenFlowコントローラー、スイッチを起動してみました。また、GUIコマンドもいくつか起動してみました。

    次回からはいよいよ、コマンド詳細を調べて、複雑な構成・設定を試していきたいと思います。

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

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

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

2012年7月5日木曜日

OpenFlow環境をつくってみた

以前から気になっていたOpenFlow。
最近、「自宅ラック勉強会」にてbuffaloのwifiルータをOpenFlowスイッチ化するのが気になっていましたが、先日、とうとう衝動的にやってみました。
OpenFlowスイッチは簡単に設定できましたが、OpenFlowコントローラの方が手間取ったので、備忘録として残しておきます。


OpenFlowスイッチの準備

使ったスイッチは「WHR-G301N」。アマゾンで約2500円でした。



下記サイトの「OpenFlow 1.1 for WHR-G301N 作成手順v1.0」を参考に、OpenFlow1.1をinstall。数分で完了。感謝です。
http://www.srchack.org/index.php?topic=Network

OpenFlowスイッチのIPは192.168.1.1/24なので、PC側のIPを192.168.1.10/24など適切なものに設定し、PCからOpenFlowにtelnet(port:23)すると、、、



















無事接続できました!


OpenFlowコントローラの準備

次はコントラーラです。
上述の同じサイトで「NOX 1.1 Oflib を導入済みのVMwareイメージ」を用意してくれているので、これを使いました。(CentOSにNOX 1.1 Oflibのinstallを試しましたが、エラーがでて挫折しました。MacOSでも挫折しました。)


VMwareイメージのOSはUbuntuです。Ubuntuはほぼ初めてです。


使用した環境は下記の通りです。
WindowsVista
VMWare Player4.0.4

今回の構成は下記とします。PCと仮想マシンはブリッジ接続の想定。仮想マシン(192.168.1.11/24)     --+   PC LAN(192.168.1.10/24)         --+--  OpenFlowスイッチ間(192.168.1.1/24)

VMWare Playerから該当イメージを起動後の手順は下記の通り。

  1. 文字化け対応
    下記サイトを参考に~/.bashrcを変更します。http://hamamuratakuo.blog61.fc2.com/blog-entry-400.html
  2. ネットワーク設定実施「sudo vi /etc/network/interfaces」実施後、下記を参考にネットワークアドレスを設定。http://hamamuratakuo.blog61.fc2.com/blog-entry-400.html
     
  3. VMWare Playerのネットワーク設定VMWare Playerの[仮想マシン設定]-[ネットワーク アダプタ]の設定は下記のようにブリッジ設定としました。
  4. 物理PCと仮想マシンを再起動。
    上記1-3だけでは、ネットワークが正常に起動しない(ifconfigにてeth0が見えない)ので、再起動してみました。(ちょっと原因不明の疎通不可になったり。と不安定な感じですが、PCの電源を切って、起動したら疎通できたりしていました。しばらく様子をみたいと思います)
    ---
    2012/7/7 追記
    仮想マシン(NOX)から物理PCまたはOpenFlowスイッチへの疎通不可の時に、OpenFlowスイッチの電源は入れたまま、仮想マシンをshutdown・物理PC電源off後、再び物理PC電源on・仮想マシンを起動したら、疎通が復旧するようです。詳細原因究明には至っていませんが。。。
    ---
    ifconfig結果と、物理PC(NOX)からOpenFlowスイッチにtelnetした結果は下記の通りです。




    以上で、環境構築完了!
    次回、詳しく触ってみたいと思います。






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