こんな夜中にOpenFlowでネットワークをプログラミング!

第2回 ネットワークアーキテクチャを一変させるOpenFlowのパケット制御技術

この記事を読むのに必要な時間:およそ 4.5 分

OpenFlowで実現できるアーキテクチャ

続いて,OpenFlowで実現できるアーキテクチャを説明します。

多数のOpenFlowスイッチを管理可能

ここまでは説明の都合上,OpenFlowスイッチが1つの場合を例に挙げて説明しましたが,実際は1つのOpenFlowコントローラで複数のOpenFlowスイッチを管理可能です。OpenFlowスイッチでのパケット書き換えは,複数存在するOpenFlowスイッチのどれで行ってもかまいません。また,パケットの転送経路が複数存在する場合は,どの経路でパケットを転送してもかまいません。すべてはOpenFlowコントローラが自由に決定できます。

OpenFlowルータの実現

OpenFlowを利用すると,パケットの任意の場所を書き換えて任意のサーバに転送できると説明しましたが,これは具体的にどのような意味があるのでしょうか。図4は,サーバ1から送信されたパケットがルータにより書き換えられる様子を示しています。ルータはL3装置なので,パケットがルータを通過すると,送信元MACアドレスと送信先MACアドレスが書き換えられます。

図4 パケットがルータにより書き換えられる様子

図4 パケットがルータにより書き換えられる様子

続いて図5を見てください。これはOpenFlowスイッチがパケットのMACアドレスを書き換えている例です。図5にはOpenFlow スイッチしか存在せず,ルータはどこにもありません。しかし,OpenFlowスイッチ上で,あたかもルータを通過したかのようにパケットを書き換えると,OpenFlowスイッチしか存在しないにもかかわらず,ネットワーク上にルータが存在するかのように動作させることができます。

図5 パケットがOpenFlowスイッチにより書き換えられる様子

図5 パケットがOpenFlowスイッチにより書き換えられる様子

仮想ルータという表現は人によりイメージが異なると思いますが,一般的には仮想マシンにルータソフトをインストールしたものをイメージされると思います。仮想マシンで実現する仮想ルータは仮想マシンとして動作しているだけであり,本質的には物理的なルータ装置と違いはありません。しかし,OpenFlowにより実現される仮想ルータは仮想マシンで実現される仮想ルータとは根本的に異なります。OpenFlowにより実現される仮想ルータは実体がなく,OpenFlowスイッチにルータとして動作する制御ルールが書き込まれているだけです。OpenFlowスイッチが故障した場合は,故障したスイッチに格納されていた制御ルールと同様のルールを他のOpenFlowスイッチに書き込むだけで,問題なくOpenFlowスイッチの故障から復旧できます。OpenFlowの世界では,すべてのOpenFlowスイッチが仮想ルータとして動作可能なのです。

筆者が所属するNTTデータでは,OpenFlowにより実現される仮想ルータを,仮想マシンで実現されるルータと区別して「OpenFlowルータ」と呼んでいます。

ファイアウォールとロードバランサ

OpenFlowでルータを実現できると,今度はファイアウォールやロードバランサが実現できないか気になると思います。結論から言えば,実現可能です。

ファイアウォールは,OpenFlowスイッチが特定の制御ルールにマッチするパケットを受信したときにパケットを破棄するように制御ルールを書き込むことで実現できます。OpenFlowスイッチに制御ルールを書き込むことでファイアウォールを実現する場合は,先月号で説明した12種類の条件によるフィルタリングが可能です。また,制御方式3を用いてファイアウォールを実現する場合はパケットの任意の場所でフィルタリングが可能なので,理論上はフィルタリング機能に制限はありません。

ロードバランサも実現可能ですが,ファイアウォールほど簡単ではありません。ロードバランサはパケットの送信先IPアドレスの値を書き換えることで実現できますが注5⁠,パケットの振り分け先が複数存在する場合,毎回異なる値で送信先IPアドレスを書き換える必要があります。OpenFlowスイッチに制御ルールを書き込む方式でロードバランサを実現すると,パケットの同じ個所を同じ値でしか書き換えることができません。よって,OpenFlowでロードバランサを実現するには,制御方式3を用いてサーバ側でパケットを書き換える必要があります。

注5)
送信先IPアドレス以外の値も書き換える場合がありますが,ここでは詳しく説明しません。

上限のないVLAN数とVRF数

仮想化を用いたシステムは,1つの共通基盤上で複数のシステムが動作します注6⁠。各システムは通常,VLAN(Virtual LAN)を用いて分離されます。また,コアルータに接続されている各システムをVRF(Virtual Routing and Forwarding)で分離する場合もあります。

VLAN数やVRF数が上限に達してしまうと,それ以上システムの規模を拡大するのが難しくなります。この問題もOpenFlowを用いれば簡単に解決できます。OpenFlowはVLANなどを用いてネットワークを分離する必要がありません。異なるシステム間の通信についてはすべてパケットを破棄するように,OpenFlowスイッチに制御ルールを投入するだけです。

そればかりか,OpenFlowでは共通基盤上で動作する各システムで同じVLAN IDを利用できます。たとえば,システムA で「VLAN ID=10」を利用し,システムBでも「VLAN ID=10」を利用することが可能です。

注6)
本稿ではこれ以降,共通基盤上で複数テナントのシステムが動作する環境を前提に説明します。

故障に強く,拡張も容易

OpenFlowスイッチが故障した場合,故障したスイッチを迂回してパケットを転送するようにOpenFlowコントローラを実装することも可能です。つまり,OpenFlowの世界ではOpenFlowスイッチを適当にメッシュ状に接続するだけで簡単にスイッチの三重化や四重化が実現できます。OpenFlowスイッチの設定はOpenFlowスイッチに割り当てる管理L1ポートのIPアドレス設定のみでよく,スパニングツリーやVLANなどの煩雑な設定は一切必要ありません。

OpenFlowではリンクアグリゲーションの設定も必要ありません。誌面の都合上詳細は説明しませんが,OpenFlowを用いれば自動で複数のケーブルが接続されていることを検知し,OpenFlowスイッチに蓄積されるトラフィック統計情報を基に自動でトラフィックの平滑化を行うことが可能です。帯域が足りない場合は,スイッチ間を適当に二重,三重にケーブル接続するだけで,何の設定も必要とせずに自動的にトラフィックが平滑化されます。

著者プロフィール

樋口晋也(ひぐちしんや)

(株)NTTデータ 技術開発本部