United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Raspberry Pi、OpenFlow、Zodiac FXでSodtware Defined Network(SDN)を試してみる

Main22_fc4f99cb309e43fb0823a2c86d2e14ec81f45b29.jpg

最小コストでSDNハードウェアを試してみよう

本記事では、Software Defined Network(SDN)技術が通常ハイエンドデータセンター規模の機器が必要であるのに対し、Zodiac FX、Raspberry Pi、オープンソースOpenFlowコントローラといった比較的低コストで実現する方法について紹介しよう。

SDNとは?

SDN-architecture-overview_7c28619d2f44e87927d7656d055a895b40928260.jpg

SDNアーキテクチャの概要(出典: Wikimedia/Open Networking Foundation)

従来のネットワーク構築方法では、どこにパケットを転送しなければならないかの判断を行うコントロールプレーンは実際の転送を行う転送プレーンと厳密に統合されている。統合はネットワークにおけるハードウェアレベルで行われており、その複雑さはネットワーク全体に広がっていることを意味している。ネットワークのフローを調整したい場合は、多くのデバイスを設定しなければいけないということだ。

機器ベンダーは非常に静的なネットワーク構成を想定し、ネットワーク管理ツールを異なるレベルでの柔軟性を考慮して提供しているが、相互運用能力には限界がある。さらに、コントロールプレーンインテリジェンスは、ベンダー、製品、ファームウェアのバージョンによって、その機能やバグなどがそれぞれの機器に深く組み込まれてしまっているのだ。

Software Defined Networkはコントロールプレーンとフォワーディングプレーンを分割し、共通のプラットフォームを利用することで集中化して構築することを可能にする。SDNはオープンスタンダードに関連付けられており、相互運用性の促進、ベンダー固有の構成や設定をなくし、より技術の発展に貢献できることを目的としている。

OpenFlow

OpenFlow_ad8e71d8c1c9ff5a8cb60be43b47b12789f1c227.jpg

OpenFlowプロトコルは、Open Networking Foundation(ONF)によって開発され、TCP6653番ポート、もしくは6633ポートのコントローラーに接続するスイッチおよびルータのコントロールプレーンへの遠隔操作を提供するものだ。コントローラは、定められたルール及びアクションに一致するパケットを追加、変更、もしくは削除することができる。この操作はネットーワーク上の機器で“Wire Speed”に実行される。

OpenFlowSwitch_c9a8b7f7d2ca02bc5be0138c335dfb8b1ac4d92e.png

画像の出典: ONOSプロジェクト.

また、Intelシステムや仮想マシンなどで直接動作できるソフトウェアベースのスイッチやルータであるLagopusのようなOpenFlowプロトコルと互換性のある機能を持つものもある。オフィスのスイッチにはネットワークインターフェースカードをたくさん備えたサーバーを用意するのは理にかなっていない。そこで、ネットワーク仮想化技術(Network Function Virtualization:NFV)はサーバ仮想化技術とともに使用すると、それは強力な解決策となり、その他の環境でも非常に動的に役立つのだ。

代表的なハードウェア

FS_Switch_139588bf2d496999221c0b16ca8a0aa212eebc7e.jpg

10GbE×48 + 40GbE×6 SDNスイッチ(FS.COM)

FacebookやGoogle、その他大手企業がOpenFlowのバックアップに力を入れていることは驚くべきことではないかもしれない。実際に、Deutsche Telekom、Microsoft、Verizon、Yahoo!は2011年にONFの設立に関わっている。

「インターネットのスケール」の組織のニーズに合わせて機器を設計する傾向があることは驚くべきことではないだろう。例えば48x 10GBイーサネット+6x 60GBイーサネットポートを備えたスイッチのシャシがベンダーから提供されているものもある。しかし、実際にSDNを試したみたい人々や、その他の多くのユーザにとって、通常それは手の届かないものであったのだ。

Zodiac FX

ZodiacFXDetail_a0ef4c3d2f4138c4cba24ac74418f29607146d10.jpg

Zodiac FXは4つの10/100Mイーサネットポートを持ったスイッチであり、個人がSDN環境を低コストで実現できる。こちらのキックスターターキャンペーンで入手できるはずだ。このボードはイーサネットスイッチ向けマイクロチップKSZ8795CLXとSAM4E8CAプロセッサを結合し、それぞれオープンソースファームウェアが利用できる。コンパクトに作成できる、非常に「ハッカブル」なソリューションだ。

また4つのイーサネットポートに加え、さらにZodiac FXは電源供給とコマンドラインインターフェースのためのシリアルポート接続を行うため、Micro USBコネクタを備えている。また、不良なファームウェアから復帰するためのJTAGヘッダ、拡張のためのSPIヘッダも備えている。

ハードウェアのセットアップ

ZFX_Ports_34917f4dfa340cc62394ad385cfc5694d8b67fb1.jpg

Zodiac FXはOpenFlowのため、「native」ポート設定を必要としており、デフォルトではポート4である。スイッチのIPアドレス、ゲートウェイ、ネットマスクは適切に設定される必要がある。

Raspberry Pi 3 Model B+ (137-3331) のeth0インターフェースのIPアドレスは、Zodiac FXが適切にアクセスるできるようにするため 静的に設定する必要がある。また、ネットワーク上からアクセスするためSSHを有効にしておこう。

Zodiac FXのポート4とRaspberry Piのイーサネットをともに別のスイッチに接続して、既存のネットワークに接続したノートパソコンから管理できるようにした。

また、上の写真の様にスイッチのポート1~3のタイプを「OpenFlow」に設定して、フローの設定が終わるまでそれらのポート間に何も通過させないようにした。これでハードウェアのセットアップは完了だ。次にOpenFlowコントローラを設定する必要がある。

Ryu

ryu_simple_switch_13-source_80de29e380530cc094b46208c6848034261c7406.jpg

OpenFlowコントローラには多くのオープンソースの選択肢がある。例えばLinux財団のもとプロジェクト進められており、HP、IBM、Intelといった巨大企業もコントリビュートしている、非常に機能的なOpenDayLightだ。

しかし、最初に試していくにはPythonで書かれたSDNフレームワークであるRyuが良い選択肢だろう。簡単にセットアップし、動作させることができるはずだ。

Raspberry Piのネットワークインターフェースが適切に設定されていると想定し、通常通りapt-get update、apt-get dist-upgradeを行った後、次のようにO/Sの依存関係をインストールしよう。

$ sudo apt-get install gcc python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev python-pip

Pythonパッケージマネージャをインストール後、Ryuのインストールが可能になる。

$ sudo pip install ryu

これでソフトウェア開発フレームワークと、その例のセットが入手できたはずだ。シンプルなOpenFlow v1.3を利用するレイヤ2ラーニングスイッチを起動するには次のように入力するだけでよい。

$ ryu-manager --verbose /usr/local/lib/python2.7/dist-packages/ryu/app/simple_switch_13.py

ryu_simple_switch_13-start_bb68936857674a128d320b7ac1bd102e892436db.jpg

続いてOpenFlowコントローラが起動し、Zodiac FXの電源を入れることが可能になるはずだ。

ZFX_WebInterface-Flows_ed2ae34a49ebed15fffb40323d3200a8682c40cf.jpg

WebインターフェースのFlowsセクションを確認してみると、flowがインストールされていることが確認できる。

ryu_simple_switch_13-deviceConnected_e737102fa583577b1ea3795cdbf1530acd71c39f.jpg

さらに、ポート1から3のうち一つに新たに接続した場合、コントローラからイベントにおけるパケットレポートを見ることができる。

次の展開は?

今回紹介したことは、L2ラーニングスイッチの作成だったが、これは市販のものを購入することだけで実現できたことだ。しかし、今回大事なことはRaspberry Pi上で動作するPythonアプリケーションで実現していることだ。そのため、その動作は非常に簡単に変更することができる。どれほどシンプルにスイッチアプリケーションが動作しているのか詳細を確認するには、Inside OpenFlowウェブサイトの投稿を見てほしい。

Zodiac FCは現在OpenFlow v1.3までをサポートしており、actionsでは以下のようなレベルでの設定が可能となっている。

    • スイッチポート
    • Ethernet 送信元/送信先MAC、VLAN優先度
    • MPLSラベルおよびその他パラメータ
    • IPv4およびIPv6 送信元/送信先アドレス
    • UDP/TCP/SCTP 送信元/送信先ポート

このように、実際に自身の手で、ファイアウォールアプリケーションが作られており、トラフィックに優先順位をつけていくかを簡単に確認することができる。またこれだけではなく、他のツールや管理システムと簡単に結合できることも魅力だ。重要なのはすべての複雑さを集中化させていることである。

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.
DesignSpark Electrical Logolinkedin