前回の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 止まりました ∩( ・ω・)∩ 。
この「おおっ」って感じはやってみないと分からないかもしれません。