FC2ブログ

ホーム

スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告

WHR-G301N With OpenFlowSwitch

2012年03月24日 23:17

どうもご無沙汰しています...orz
仕事や風邪などなどありまして、ここ数週間ブログが書けずにいました...(´・ω・`)ショボーン

そんなわけで...ちょっと遅くなってしまいましたが

先日、自宅ラック勉強会 #2.5 秋葉原出張編に参加することができ、OpenFlowSwitch(Ver1.0)を手に入れました :-)

OpenFlowSwitch1
濃い人たちが集まっていて、かなり面白い勉強会でしたw
あと、この勉強会が開催されてから、巷でWHR-G301Nを大人買いする人が現れたりという現象が起きていましたw

詳細は自宅ラック勉強会 #2.5 秋葉原出張編を見てもらうとして、このOpenFlowSwitch、バッファローのWHR-G301N のファームウェアをOpenFlow 1.0 for OpenWRTに書き換えてOpenFlowSwitchにしてしまったもので、4ポートのOpenFlowSwitchとして動作します。
実際Tremaと繋いで、OpenFlowのプロトコルを話してフロー制御をしてくれます。

OpenFlowSwitch2

WHR-G301Nは実売価格2000円ぐらいで買えるので、複数買って簡単なSDNを構築する実験もできたりします。

ファームウェアのイメージや、インストールの仕方などなど、自宅ラック勉強会 #2.5 秋葉原出張編の最後のほうにまとめられているので、OpenFlowに興味はあるけどOpenFlowSwitchが手元になくて...と思って二の足を踏んでいる人は、ぜひ試してみてくださいヽ(=´ω`=)/

んで、最近少しまたTremaする時間が取れ始めたので、ちょっとこのWHR-G301N With OpenFlowSwitchの性能を測ってみました。

計測は、ノートPC上VirtualBoxに、Trema用Node、計測用パケット送信用Node、受信用ノードの3つのゲストを立ち上げて、iperfを使って計測してみました。

※USB LANアダプタと使って、ゲストごとにNICを分けています。

FlowLine
だいたいこんなイメージ...

Tremaのフロー制御プログラムには、Tremaサンプルのlearning_switch(L2SW相当)を使って、iperfからUDPパケットを100Mbits/secで送りつけて、帯域幅と遅延を計測してみました。

受信側(Node2)では、iperfをサーバ&UDPパケットで実行します。
$ iperf -s -u

送信側(Node1)では、iperfをクライアント、UDPパケットを100Mbits/secで送りつけるように実行します。
$ iperf -c [Node2のIPアドレス] -u -b 100000000

上記の計測の結果、このOpenFlowSwitchは

帯域幅 = 46 Mbits/sec ぐらい
遅延 = 0.2 ms ぐらいでした

$ iperf -c 192.168.100.12 -u -b 100000000
------------------------------------------------------------
Client connecting to 192.168.100.12, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  112 KByte (default)
------------------------------------------------------------
[  3] local 192.168.100.11 port 55171 connected with 192.168.100.12 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  94.8 Mbits/sec
[  3] Sent 80604 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec  55.0 MBytes  46.1 Mbits/sec   0.216 ms 41396/80602 (51%)
[  3]  0.0-10.0 sec  27 datagrams received out-of-order
$ iperf -c 192.168.100.12 -u -b 100000000
------------------------------------------------------------
Client connecting to 192.168.100.12, UDP port 5001
Sending 1470 byte datagrams
UDP buffer size:  112 KByte (default)
------------------------------------------------------------
[  3] local 192.168.100.11 port 49548 connected with 192.168.100.12 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  94.5 Mbits/sec
[  3] Sent 80372 datagrams
[  3] Server Report:
[  3]  0.0-10.0 sec  54.9 MBytes  46.0 Mbits/sec   0.243 ms 41188/80370 (51%)
[  3]  0.0-10.0 sec  2 datagrams received out-of-order

フローテーブル更新をしているようなタイミングでは遅延が14msecぐらいになったりと、ぶれはありますが、実験で使う分には問題なく使えます。
負荷をかけているときに、WHR-G301Nでtopしてみたところ、CPU使用率は30%ぐらいしかなかったので、I/Oネックか、ユーザスペースで動作していることが原因で頭打ちになっているようです。

これでOpenFlowの調べ物がやりやすくなったなり :-)

それにしても、自宅ラック勉強会...恐るべし ((;゚Д゚)ガクガクブルブル 
そして、ありがたや~ヽ(´д`ヽ)(ノ´д`)ノ
スポンサーサイト

ネットワーク コメント: 0 トラックバック: 0

OpenFlowを試してみたよ(インストール編)

2012年02月11日 20:15

去年の6月ごろから気になっていたOpenFlowの実験環境を作ることになったので、その時のメモを残しておきます (`・ω・´)

OpenFlowの細かい話は、そこら中に転がっているのでググって見てください。
私はこの辺から始めました :-)
こんな夜中にOpenFlowでネットワークをプログラミング!

で、うちの実験用仮想環境はこんな感じになっています。

OpenFlowKVM

構築手順とかは.... また今度

OpenFlowコントローラ(hayate)と、OpenFlowSwitch(nanoha)を中心に、実験用のパケットを送信したりするクライアントやサーバを立ち上げています。
ゲストOSは、すべてUbuntu11.10にしています。(ちなみに、ホストOSはCentOS 6.2(64bit)です)

OpenFlowコントローラには、Rubyで制御コードが書けるTremaにしました。
Tremaのサイト

Tremaのバージョンは 0.9.5です

OpenFlowSwitchには、本家OpenFlowからリリースされているものを使っています。バージョンは1.0.0。
今はOpenFlowからリリースされているものを使って試していますが、近いうちにopen vSwitchに切り替える予定です。
切り替えが終わったら仮想環境が大きく変わるので(nanohaがなくなって、仮想ネットワークを構成しているブリッジがOpenFlowSwitchになります)、その時にまたブログに書きます :-)

んでは、OpenFlowSwitchとOpenFowコントローラのインストール手順を書きます。
とは言っても、
こんな夜中にOpenFlowでネットワークをプログラミング!
に載っている記事を参考にしているだけなので、自分用メモ程度です。
本当の目的は、OpenFlowで何が出きるのかを実験する、制御コードを書いて動作を確認することですので...

■ OpenFlowSwitchのインストール(nanoha)

んでは、OpenFlowからソースを取得してビルドします。
でもその前に、OpenFlowSwitchのビルドに必要なライブラリなどをインストールとIPv6サービスを止めます。

1)ライブラリのインストール
>sudo apt-get install git-core automake m4 pkg-config libtool


2)IPv6の停止
OpenFlowのVer1.1までは、まだIPv6に対応していません。1.2から対応するそうです。
なので、今はIPv6を止めておきます。

まずは/etc/sysctl.confを編集します。

>sudo vi /etc/sysctl.conf

で、IPv6を無効にする設定をします。

...
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
...

0が設定されているところを1に変更してください。
※そもそも定義がない場合は、上の定義を追加してください。

設定を反映させるため、以下のコマンドを実行します。
>sudo sysctl -p


3)ビルドとインストール
ソースのビルドとインストールは、以下の手順になります。

最初はOpenFlowのGitから取得します。
取得先は、各自の好きなところに :-)

取得
>git clone git://openflow.org/openflow.git

ビルド&インストール
>cd openflow
>./boot.sh
>./configure
>make
>sudo make install

これで終了~
/usr/local/bin/ の下に、ofp***といった実行ファイルがインストールされているはずです。


4)OpenFlowSwitchの起動

OpenFlowSwitchは、実際にパケット転送を行うofdatapathと、OpenFlowコントローラと通信するofprotocolの2つのプロセスで構成されています。OpenFlowコントローラと通信した内容を、ofprotocolがofdatapathに対してプロセス間通信を使って制御します。

なので、まず先にパケット転送を行っているofdatapathをデーモンとして立ち上げます。

ofdatapath起動方法
>sudo ofdatapath punix:/var/run/dp0.sock -i eth1,eth2,eth3 -D
sudo: unable to resolve host nanoha
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory

-D  がデーモン起動、-i 以降がフロー制御対象のパケットを送受信するインタフェースを指定しています。
punix:/var/run/dp0.sock が、ofprotocolとのプロセス通信に用いるファイル名称です。

OpenFlowコントローラと通信するofprotocolは、次のように起動します。
ofprotocol起動方法
> sudo ofprotocol unix:/var/run/dp0.sock tcp:192.168.100.10

unix:/var/run/dp0.sock が、ofdatapathとのプロセス通信に用いるファイル名称です。
tcp:192.168.100.10 が、OpenFlowコントローラのIPアドレスになります。
OpenFlowコントローラがサーバで、OpenFlowSwitchがクライアントの関係になるので、ofprotocolを起動すると、OpenFlowコントローラに接続しにいきます。
この時、指定したOpenFlowコントローラが存在しないと、一定の周期でOpenFlowコントローラに接続を試みます。
この周期は、2秒、4秒、8秒、15秒と伸びていくようです。他のOpenFlowSwitchはどうなんでしょうね?
sudo: unable to resolve host nanoha
...
Feb 11 21:35:55|00011|rconn|INFO|tcp:192.168.100.10: connecting...
Feb 11 21:35:55|00012|rconn|INFO|tcp:192.168.100.10: connection failed (Connection refused)
Feb 11 21:35:55|00013|rconn|WARN|tcp:192.168.100.10: connection dropped (Connection refused)
Feb 11 21:35:55|00014|rconn|INFO|tcp:192.168.100.10: waiting 2 seconds before reconnect
Feb 11 21:35:57|00015|rconn|INFO|tcp:192.168.100.10: connecting...
Feb 11 21:35:57|00016|rconn|INFO|tcp:192.168.100.10: connection failed (Connection refused)
Feb 11 21:35:57|00017|rconn|WARN|tcp:192.168.100.10: connection dropped (Connection refused)
Feb 11 21:35:57|00018|rconn|INFO|tcp:192.168.100.10: waiting 4 seconds before reconnect
Feb 11 21:36:01|00019|rconn|INFO|tcp:192.168.100.10: connecting...
Feb 11 21:36:01|00020|rconn|INFO|tcp:192.168.100.10: connection failed (Connection refused)
Feb 11 21:36:01|00021|rconn|WARN|tcp:192.168.100.10: connection dropped (Connection refused)
Feb 11 21:36:01|00022|rconn|INFO|tcp:192.168.100.10: waiting 8 seconds before reconnect
Feb 11 21:36:09|00023|rconn|INFO|tcp:192.168.100.10: connecting...
Feb 11 21:36:09|00024|rconn|INFO|tcp:192.168.100.10: connection failed (Connection refused)
Feb 11 21:36:09|00025|rconn|WARN|tcp:192.168.100.10: connection dropped (Connection refused)
Feb 11 21:36:09|00026|rconn|INFO|tcp:192.168.100.10: waiting 15 seconds before reconnect
Feb 11 21:36:24|00027|rconn|INFO|tcp:192.168.100.10: connecting...
Feb 11 21:36:24|00028|rconn|INFO|tcp:192.168.100.10: connection failed (Connection refused)
Feb 11 21:36:24|00029|rconn|WARN|tcp:192.168.100.10: connection dropped (Connection refused)
Feb 11 21:36:24|00030|rconn|INFO|tcp:192.168.100.10: waiting 15 seconds before reconnect
.....

■ Tremaのインストール(hayate)

まずはTremaのソースを取得してビルドします。
でもその前に、Tremaのビルドに必要なライブラリなどをインストールとIPv6サービスを止めます。

1)ライブラリのインストール
>sudo apt-get install git gcc make ruby ruby-dev irb libpcap-dev libsqlite3-dev


2)IPv6の停止
OpenFlowSwitchと同様に、OpenFlowのVer1.1までは、まだIPv6に対応していないので止めておきます。
IPv6の止め方は、OpenFlowSwitchで説明した方法と同じです。

3)ビルドとインストール
ソースのビルドとインストールは、以下の手順になります。

最初はGitHUBから取得します。
取得先は、各自の好きなところに :-)

取得
>git clone git://github.com/trema/trema.git

tremaというディレクトリができているので、その中のビルドコマンドを実行します。
ビルド&インストール
>./trema/build.rb

これで終了~
簡単だ....

4)Tremaの起動
Tremaを実行するためにはフロー制御のコードが必要ですが、サンプルがついているので、まずはそのサンプルで操作確認してみます。

サンプルは、/trema/src/examples/traffic_monitor にあります。
このサンプルは、スイッチングHUBのように、パケットを転送します。(実際にはARPから転送テーブルを作成していません)
実行方法は
>cd trema
>./trema run src/examples/traffic_monitor/traffic-monitor.rb

です。
起動した後、OpenFlowSwitch側で、OpenFlowコントローラと接続できたメッセージが出ます。
これで、OpenFlowの実行環境ができました :-)

試しに、同じサブネット内に存在する、Client01(vivio)からClient02(shamal)に対してpingを打ってみると、ちゃんと届きます :-)

tremaを止めたあとにpingを打ってみると、pingが通らなくなっています。

コントローラが止まったぐらいでパケット転送を止めるってのは、かなり貧弱なので、OpenFlowSwitch側の設定の問題か、OpenFlowSwitchに改造が必要なのだと思います....

環境ができたので、フロー制御のコードを書いて、OpenFlowで何ができて、何ができないのかを試して見ようと思います。
もういくつか試しているので、もう少ししたら、その辺のこともブログに書いてみようと思います。

OpenStackについても調べたりすることになりそうなので、いずれQuantumとかも調べてみようと思います。

それでは~ ヽ(=´ω`=)ノ


ネットワーク コメント: 1 トラックバック: 0

RT-58iに移行

2011年05月29日 20:58

色々やりたいことがあって、グローバルアドレスを2つ確保~ ヽ(`・ω・´)ノ
そのため、今まで使っていたバッファローのブロードバンドルータでは対応できないので、YAMAHAのRT-58iを中古で購入 :-)
さっき設定が終わって、2つのグローバルアドレスに接続できたなり~

nikki20110529.jpg

まぁ、今まで使っていたルータの調子が悪かったので、ちょうどいい機会だったかもね。

ネットワーク コメント: 0 トラックバック: 0

ネットワークスペシャリストにチャレンジ

2010年08月19日 20:15

思いつきで、ネットワークスペシャリストを受けてみることに...
まぁ、申し込みは7月にしたのですが、やっと勉強をし始めました...orz
試験勉強をするなんて、何十年ぶりだろう...

ネットワーク管理システムを開発する仕事がメインなので、ソフト屋だけどネットワーク機器に関わることが多いんですよね。
エンドユーザともネットワーク構築に関わる話をすることは当たり前のことになっているので、食い散らす形ですが、ネットワーク構築に関する勉強を今までやってきたので、腕ためしと知識を体系化したかったので、ネットワークスペシャリストを受けてみることにしました (・ω・)
受かるかどうかは...自信ないけど...orz



上の本は、勉強用に買ってみたものです。
まったくの初心者には敷居が高いかもしれませんが、下手なネットワーク本より上手くまとまっているので、読み物としても面白い本です :-)

とりあえず、受かるように勉強を始めよう....

ネットワーク コメント: 0 トラックバック: 0

ホーム

プロフィール

PANTOMAIMU

Author:PANTOMAIMU
本当は仕様を決めたり設計だけじゃなく、プログラミングもしたいのに~というジレンマを抱えながらも、時間があれば家でプログラムを作ったりしている、しがないSE....
趣味はお絵描きに曲作りに自転車 :-)

Twitter @PANTOMAIMU

カレンダー

05 | 2019/06 | 07
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -

FC2カウンター

最新トラックバック

検索フォーム

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。