follow me

安価にOpenFlow環境を入手する(OpenFlow 1.0 for OpenWRT)

OpenFlowを試してみたいが、OpenFlowスイッチが高くて手が出せない技術者さんは多いのではないだろうか。会社が買ってくれる方は良いとして買ってくれない人達には辛い。
そこで紹介したいのが、OpenFlow 1.0 for OpenWRT である。
OpenWRTとは、市販ルータで動作するLinuxをベースとしたカスタムファームとして有名なので説明は不要と思いますが。
OpenFlow 1.0 for OpenWRT は、このOpenWRT上でOpenFlowを動作させる為の実装です。
この実装は、ユーザスペースでの動作の為、パフォーマンスは期待すべきではありません。あくまで学習目的などと考えた方が良いでしょう。
もともと利用できるルータのポート数が少ないので学習程度にしか利用できないとは思いますがw

この方法は、おそらく安価にOpenFlowを試す方法としては少ない選択値ではないだろうか。
こんなルータで動作してしまうので試したい人は今すぐ対応ルータの入手ですね。(秋葉原の FreeT さんに積んであった機種も動作する様な気もする。)



OpenFlow 1.0 for OpenWRT をとりあえず動作する状態までの手順を紹介

1.ルータを入手
OpenFlow 1.0 for OpenWRTのFirmwareが公開されているハードは「LinkSys WRT54GL」「TP-LINK TL-WR1043ND (v1.7)」だけであり、この機種は入手が難しいと思います。
しかし、自分でFirmwareのビルドが可能であれば他のルータでも動作させる事は可能です。
記事を記載している時点では、おそらく日本国内でOpenWRTに対応したルータを入手するには、Buffalo製が一番容易なのではないだろうか。
このBlogを見に来られている方達は、Buffaloのルータなど山ほど部屋に転がっているだろうから、すぐに次のステップに進めるとは思っていますが、一点注意するべきは搭載チップによりOpenFlowが動作させれない可能性があるという事です。
明確にこのチップでなければ動作しないとは言い切れないが、PortVLANに対応できるチップ搭載である必要があります。
PortVLANに対応できるかについては、OpenWRTのバージョンにも依存する為、OpenWrt のサイトで確認して頂きたい。
僕は、WZR-HP-G301NH を利用したが、このモデルは、G300NH、G301NH とありながらG300NHだがG301NHと同じチップが使われている物も存在する為、危険なモデルでもあります。

2.Firmwareをビルド
Firmwareのビルドには、クロスビルド環境の構築が必要になります。
OpenWrt Buildsystem の構築作業になるのですが、今回は OpenFlow についての記載に絞りたい為、省略させて頂きます。(後日、Buildsystem の構築方法は別途Blogに記載致します。)
本家OpenWrtサイトのドキュメントにBuild関連も存在する為、そちらを参照願います。
Debian 5.0を利用し構築するとトラブル無く出来るかと思います。

3.OpenWRTのビルド
まずは、OpenWRTのビルドになります。
ビルド作業については、ネットワークに接続できる状態で実施する必要があります。
オフライン状態での実施はできません。(クロスビルド環境などをネット上からダウンロードし利用する仕組みになっています。)
入手するバージョン等は、調整してください。Kamikaze だと Kernelバージョンの問題が出ると思いますので、Backfire か trunk版のどちらかが候補になると思います。
# cd ~/ofwrt
# svn co svn://svn.openwrt.org/openwrt/branches/backfire
# cd backfire
# ./scripts/feeds update -a
# ./scripts/feeds install -a
Linux Kernelをビルドした事がある方なら扱い方に困る事は無いでしょう。
選択したターゲットに応じビルド環境の構築などが実施されます。
# make menuconfig
かなり時間がかかるので、本とコーヒーをご用意下さい。
# make prereq
# make
エラーが発生しなければ、binディレクトリ以下に Firmwareイメージが生成されているかと思います。

4.OpenFlow extensions のビルド
次に本題のOpenFlowのビルドになります。
まずコードの入手です。
# cd ~/ofwrt/
# git clone git://gitosis.stanford.edu/openflow-openwrt
OpenWrt パッケージに OpenFlow extensions を追加。
# cd ~/ofwrt/backfire/package/
# ln -s ~/ofwrt/openflow-openwrt/openflow-1.0
# cd ~/ofwrt/backfire/
# ln -s ~/ofwrt/openflow-openwrt/openflow-1.0/files
OpenWRTのコンフィグを行います。
基本以下の設定を忘れなければ問題は無いはずです。
一点だけ注意するとすれば、PortVLANが使える様に使用するチップに合わせモジュールを組み込む事を忘れない様にする事です。
・Select your platform for Target System (Broadcom BRCM47xx/953XX,Atheros AR71xx, etc)
・Select your platform at Target Profile (i.e. TP-Link-WR1043ND, Broadcom BRCM43xx Wifi, etc)
・Select OpenFlow package under network
・Select tc package under network
・Select kmod-tun under Kernel Modules->Network Support
# cd ~/ofwrt/
# make menuconfig
Kernelのコンフィグも行います。 先程の menuconfig で出来ないのかとの疑問があるが、ここは本家のサイトに記載してあったとおりに kernel_menuconfig を利用する。
このオプションを有効に変更。
・Under Networking Support->Networking options->QoS and/or fair queueing select Hierarchical Token Bucket (HTB)
# make kernel_menuconfig
最後にビルド開始。
今回は、一度ビルドしている為、差分のみになるので短時間で終わります。
# make

5.Firmwareの書込み
Firmware書込み方法は機種により異なる為、省略させて頂きます。
OpenWrtのFirmware書込み方法と同じですので、OpenWrt側の情報を参照お願い致します。
また、書込み失敗により文鎮化も有り得ますのでご注意ください。

6.OpenWRTの設定
OpenWRTが IP:192.168.1.1 で起動してきますので、必要なパッケージ類をルータに転送し導入します。
オプションで選択したモノ一式を導入します。パッケージ導入は opkg コマンドを使って実施します。
# opkg install ~~~.ipk
ここから、待ちに待った設定を開始します。
/etc/config/openflow の設定
おそらく outofband と inband の向き先は同じ処でも問題ないと思いますが試せてません。
ofports が OpenFlow で利用するポート、ofctl が OpenFlowコントローラの指定になります。
config 'ofswitch'
	option 'dp' 'dp0'
	option 'ofports' 'eth0.1 eth0.2 eth0.3 eth0.4'
	option 'ofctl' 'tcp:192.168.1.10:6633'
	option 'mode'  'outofband'

config 'ofswitch'
	option 'dp' 'dp0'
	option 'ofports' 'eth0.1 eth0.2 eth0.3 eth0.4'
	option 'ofctl' 'tcp:192.168.2.10:6633'
	option 'mode'  'inband'
	option 'ipaddr' '192.168.2.1'
	option 'netmask' '255.255.255.0'
        option 'gateway' '192.168.2.1
この段階で、OpenFlowを起動してもひとつプロセスが起動しません。
ofprotocol プロセスは起動し、ofdatapath は起動に失敗する筈です。
# /etc/init.d/openflow restart

/etc/config/network の設定
設定は機器により変動する為、情報を置き換えながら実施してください。
必要な設定は、各ポートをVLANで独立する形にしてください。
以下の設定は、僕が Buffalo WZR-HP-G301NH で実施した設定になります。
おそらく WAN ポートを管理用ポートにするなどの工夫を組み込めば OpenFlow で利用できるポートを増やせるのではないかとは思いますが、また別途試したいと思います。
config 'interface' 'wan'
        option 'ifname' 'eth1'
        option 'proto' 'dhcp'

config 'switch'
        option 'name' 'rtl8366rb'
        option 'reset' '1'
        option 'enable_vlan' '1'
        option 'enable_learning' '0'
        option 'enable_vlan4k' '1'

config 'switch_vlan'
        option 'device' 'rtl8366rb'
        option 'vlan' '1'
        option 'ports' '0 5t'

config 'switch_vlan'
        option 'device' 'rtl8366rb'
        option 'vlan' '2'
        option 'ports' '1 5t'

config 'switch_vlan'
        option 'device' 'rtl8366rb'
        option 'vlan' '3'
        option 'ports' '2 5t'

config 'switch_vlan'
        option 'device' 'rtl8366rb'
        option 'vlan' '4'
        option 'ports' '3 5t'

config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'

config 'interface'
        option 'ifname' 'eth0.1'
        option 'proto' 'static'
        option 'ipaddr' '192.168.1.1'
        option 'netmask' '255.255.255.0'

config 'interface'
        option 'ifname' 'eth0.2'
        option 'proto' 'static'

config 'interface'
        option 'ifname' 'eth0.3'
        option 'proto' 'static'

config 'interface'
        option 'ifname' 'eth0.4'
        option 'proto' 'static'
設定反映の為、ネットワーク再起動を行いますが注意してください。もし失敗してネットワークに繋がらなくなった場合、UART接続する等の機器分解作業が必要になる可能性があります。
# /etc/init.d/network restart
設定が問題なく、PortVLANが問題なく動作している状態となれば、OpenFlowサービスを起動します。
この際、eth0.1のポートから OpenFlowコントローラに接続できる状態にしてください。
ofprotocol、ofdatapathの2個のプロセスが起動し、エラーが出ていなければ OpenFlowコントローラに接続できている筈です。
# /etc/init.d/openflow start

7.OpenFlowの動作確認
OpenFlowの動作確認ですが、OpenFlowコントローラが必要になります。
OpenWrtは、Linuxですのでルータ内に導入する事も可能と思われますがメモリ容量などの問題もある為、別途用意する必要があります。
コントローラについては、OpenFlow 1.0準拠のものであれば問題ありませんので、扱いやすいと思うものを選んで頂ければ問題ありません。
僕は、NOXをUbuntu環境に導入し利用してみました。(NOXの導入などについては、別途Blogに記載する予定。)


最後に
OpenFlowは勉強会(OpenFlow勉強会その1 #nwstudy 分科会)の状況を見ても、現在盛り上がっているネタではありますが、実際に触るには高価な機器が必要(仮想環境なら話は別)だったりと、興味はあるが踏み出せない方が多く居ると思われますが、今回紹介した「OpenFlow 1.0 for OpenWRT」で一人でも多くの方が触れる事が出来ればと思います。
機会があれば、勉強会などで実機を紹介できたらとか思っております。
安価にOpenFlow環境を入手する(OpenFlow 1.0 for OpenWRT) | 0 件のコメント | アカウント登録
サイト管理者はコメントに関する責任を負いません。