20130723020819

SDNはじめました

前回のGNS3の癖を掴んだので分かり易い導入記録を参考にして試してみます。(参考:OpenBlocks AX3でOpenFlowを試してみる) 構成は OpenvSwitch とPython製OpenflowコントローラのPOXにて。NOX (C実装)、Trema (Ruby実装) 等他にも色々ありますが、いずれ自分でも書くことにもなると思いますので、多少慣れているPython実装のPOXを選択。

最初の一歩目。イーサネットブリッジを作ります。

それぞれ適切なインターフェイスにIPアドレスを割り当て、openvswitchにてブリッジを構成。

Openvswitch にて
# 初期化
tc@box:~$ sudo ovs-vsctl init
# ブリッジ仮想インターフェイス作成
tc@box:~$ sudo ovs-vsctl add-br br0
# ブリッジに各イーサネットインターフェイスを割り当て
tc@box:~$ sudo ovs-vsctl add-port br0 eth0
tc@box:~$ sudo ovs-vsctl add-port br0 eth1

実はこれだけでブリッジが作成でき、SoftwareDefinedNetwork的な動きをします。裏で疎通確認用の端末がpingを送っていれば、add-port 以降疎通の確認が可能です。Openvswitchの設定だけでそれなりに高機能なスイッチとして動かせます。

続いてOpenflowコントローラを追加して、POXの制御下に居る事を確認します。

Openvswitchにて
//コントローラ追加
tc@box:~$ sudo ovs-vsctl set-controller br0 tcp:192.168.254.100
//設定はこのような感じになります。
tc@box:~$ sudo ovs-vsctl show
a66779ff-0224-40ef-89f1-0deb21b939db
    Bridge "br0"
        Controller "tcp:192.168.254.100"
            is_connected: true
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth1"
            Interface "eth1"
        Port "eth0"
            Interface "eth0"
Openflowコントローラ用端末にて(FreeBSD8.4)
// githubよりPOXを取得
# git clone http://github.com/noxrepo/pox.git
# cd pox
// poxの実行 L2学習とフォワードのサンプルを使用
// (pox/forwarding/l2_learning.py)
# ./pox.py forwarding.l2_learning
POX 0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al.
INFO:core:POX 0.1.0 (betta) is up.
INFO:openflow.of_01:[00-ab-5e-70-a5-00 1] connected
INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86
INFO:packet:(dhcp parse) warning DHCP packet data too short to parse header: data len 86
...

POXの実行をすると、openvswitchにて設定したホストからのコントロール接続を受け付ける。その後、転送を行うサンプルプログラムを実行する。何やらDHCPらしいパケットが常に飛んでいるようですが・・・pingは正常に動作していました。

POXコントローラを止めるとOpenvswitchのみの動作となり、これはこれでブリッジ的な動作を設定しているので、疎通確認のpingは一時的な切断が発生後、正常に通信ができます。さて、そんな中POXにて全く別なプログラムを読み込ませるとどうなるのか・・・読み込ませて疎通が出来なくなれば、POXにてスイッチ端末の挙動が変わったと考えて良いでしょう。

// テキトウにデバッグ用のをコントローラに読み込ませてみる
# ./pox.py debug-pox
POX 0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al.
// ここまで疎通を確認
INFO:core:POX 0.1.0 (betta) is up.
// ここから挙動が変化
INFO:openflow.of_01:[00-ab-5e-70-a5-00 1] connected
...

・・・ping 止まりました ∩( ・ω・)∩ 。

この「おおっ」って感じはやってみないと分からないかもしれません。


Posted by uso8000k | Categories: Tech | [ツィート(笑)] | [2013/07/23/T02_08_19/]