プライベートクラウド管理のすゝめ③ - 其の壱

作成日 2014/8/6
更新日 -

応用編

OpenFlowでトラフィックをより柔軟に制御しよう

プライベートクラウド管理のすゝめ②において、OpenFlowプロトコルを用いたネットワークアーキテクチャ上でL2スイッチをエミュレートすることにより、同一ネットワークセグメント内に属する機器間のトラフィック設定を集中管理し、実際の転送制御を分散配置されたOpenFlowスイッチに委ねることが可能となりました。これにより、機器間に配置されているスイッチを把握し、各スイッチにログインして転送設定をするといった従来のネットワーク運用の手間およびコストが大きく低減されます。さらに応用的な使い方として、OpenFlow(*1)で利用可能なシンプルなパケット転送(Forwarding)だけでなく、破棄(Drop)やパケットのヘッダ情報の書き換えを利用した活用法をご紹介します。

 

(*1) OpenFlowプロトコルの詳しい情報として、Hinemos開発者も執筆に携わっている 書籍「翔泳社 OpenFlow徹底入門 SDNを実現する技術と知識」(外部リンク) などもぜひご活用ください。

 

異なるネットワークセグメントの機器間で通信する

Hinemos仮想ネットワーク管理オプションでは、仮想L3スイッチを用いることにより、仮想マシンLaptop(192.168.10.101/255.255.255.0)とApacheサーバ(192.168.3.102/255.255.255.0)間でセグメントを跨った通信が可能となります。仮想L2スイッチと同様に直感的なGUI操作でネットワークエディタ上に仮想L3スイッチアイコンを作成し、2つのセグメントと通信するためのインタフェースおよびルーティングテーブルを定義するだけです。

 

 

この論理ネットワークが定義された状態でLaptopからApache宛の通信が発生した場合において、OpenFlowにより通信路が確立される流れを説明します。Laptop(192.168.10.101/255.255.255.0)はApache(192.168.3.102/255.255.255.0)が別のネットワークセグメントに属することから、デフォルトゲートウェイ(192.168.10.1)経由で通信を行います。初回の通信では192.168.10.1のMACアドレスを解決するため、ARP要求パケットを送出します。OpenFlowスイッチからOpenFlowコントローラへARP要求パケットが通知され、ARP要求パケットのトラフィックの流れを論理ネットワーク上でシミュレートされるところまでは、仮想L2スイッチと同様となります。ただし、ARP要求パケットに応答すべき機器が実在しない仮想L3スイッチとなる点が異なり、仮想L3スイッチに対するパケットはOpenFlowコントローラが応答を返す必要があります。

 

 

そのため、ARP応答パケットのイーサフレームは、仮想L3スイッチの定義に従いOpenFlowコントローラ内で生成されます。生成されたARP応答パケットはOpenFlowスイッチを経由して、Laptopに対して送信されます。LaptopはARP応答パケットを受信すると、ARPテーブルに解決したMACアドレスを登録します。

 

 

ゲートウェイアドレスのMACアドレスが解決された後、トラフィックの実体となるパケットを送信します。Laptopから送信された直後のパケットのヘッダは以下の構成となります。

 

ヘッダ 送信元MACアドレス 宛先MACアドレス 送信元IPアドレス 宛先IPアドレス
00:00:00:00:04:00 00:00:00:01:01:00 192.168.10.101 192.168.3.102

 

初回のパケットはARP要求パケットと同様にして、OpenFlowスイッチからOpenFlowコントローラに通知されて、論理ネットワーク上でトラフィックの流れがシミュレートされます。

 

 

仮想L3スイッチにて宛先IPアドレスとルーティングテーブルに基づいてパケットを送出するポートが選択された後、以下のように送出するポートのMACアドレスと宛先IPアドレスのMACアドレスにヘッダが書き換えられて、Apacheサーバに到達します。

 

ヘッダ 送信元MACアドレス 宛先MACアドレス 送信元IPアドレス 宛先IPアドレス
00:00:00:02:01:00 00:00:00:00:01:00 192.168.10.101 192.168.3.102

 

シミュレートが完了した後、OpenFlowスイッチに対してフローエントリを払いだして、通信路を生成します。宛先となるApacheの接続ポートを確認した後、最適な経路を探索し、論理ネットワークでシミュレートしたトラフィックを経路上のOpenFlowスイッチに反映していきます。仮想L2スイッチでは該当するパケットを特定のポートから送出する(Outputアクション)だけでしたが、仮想L3スイッチでは送信元MACアドレス・宛先MACアドレスを書き換えて(Modify-Fieldアクション)から送出するフローエントリも設定する必要があります。(この例の場合、最後に経由するOpenFlowスイッチにてModify-Fieldアクションを設定しています)

 

 

フローエントリが反映された後は(*1)、OpenFlowスイッチ上のフローテーブルに従いトラフィック制御されるため、各スイッチのワイヤレート性能を最大限に活用した通信が可能となります。さらに、従来のネットワーク構成ではセグメント間をまたがる通信は特定のL3スイッチを必ず経由するため、特定の物理スイッチにトラフィックが集中し、帯域不足の要因となる可能性がありますが、仮想L3スイッチの場合はどのOpenFlowスイッチでもMACアドレスを書き換えが可能で集約点が存在しないことから、異なるセグメント間の通信でさえも仮想L2スイッチと同様の広帯域化が可能となります。

 

(*1) 各端末上のARPキャッシュが一定時間経過して削除された時点で、ARP要求パケットが再送信されます。その際はOpenFlowコントローラが関与します。

 

アクセス・コントロール・リスト(ACL)で通信をきめ細かく制御する

仮想L3スイッチでは、異なるセグメント間に属する機器間全ての通信を許容します。しかしながら、実際の企業内のネットワークにおいて、同一セグメント内では無条件で通信可能として、ブロードキャストドメインの分割・セキュリティの観点から異なるセグメント間の通信は一部のみを許容する、というトラフィック形態が一般的です。

仮想L2スイッチ、仮想L3スイッチにてOpenFlowプロトコルのOutputアクションを用いた「転送」およびModify-Fieldアクションを用いた「ヘッダ加工」という機能を利用してきましたが、特定の条件を満たすパケットに対して何もアクションを割り当てないことで「破棄」が実現されることから、アクセス・コントロール・リスト(ACL)によるパケットフィルタリングもOpenFlowプロトコルを活用することで可能となります。Hinemos仮想ネットワーク管理オプションでは、そのようなACL機能を提供する仮想ファイアウォールが利用できます。ネットワークエディタ上に仮想ファイアウォールアイコンを作成し、2つのセグメントと通信するためのインタフェースおよびルーティングテーブルに加えて、L3~L4(プロトコル、IPアドレス・ポート番号)までのパケットフィルタリングルールを定義するだけです。

 

 

ゲートウェイとなるIPアドレスのARP解決までの動作は仮想L3スイッチと同一ですが、初回のパケットに対するOpenFlowコントローラ内でのシミュレートの処理が異なります。

 

 

例えば、

 

・ 基本動作は破棄

・ TCP(プロトコル番号6)、入力L1ポート(00:00:00:03:01:00)、出力L1ポート(00:00:00:04:01:00)、宛先ネットワークアドレス・マスク(192.168.1.0/24)、宛先ポート番号(443)のインバウンド通信を許可

・ 入力L1ポート(00:00:00:04:01:00)、出力L1ポート(00:00:00:03:01:00)のアウトバウンド通信を許可

 

というパケットフィルタリングルールが定義される仮想ファイアウォールの場合、

 

・ 00:00:00:03:01:00のポートで受信された192.168.1.253宛のHTTPSパケット : 許可となる(仮想L3スイッチを通過する場合と同様にフローエントリが払い出される)

・ 00:00:00:03:01:00のポートで受信された192.168.1.253宛のICMPパケット : 破棄となる

 

というフィルタリングの判定となります。

ICMPパケット(プロトコル番号1)の場合は破棄と判定されますが、そのシミュレートの結果は該当のパケットを破棄するフローエントリとしてパケットを受信したOpenFlowスイッチに設定されます。同一の送信元からICMPパケットが繰り返し送信されたとしても、このフローエントリが設定されていることにより、OpenFlowスイッチにて破棄されます。

 

 

ただし、各OpenFlowスイッチに定義可能なフローエントリ数には上限が設けられていることから、このように不正なアクセスを破棄するためのフローエントリを無尽蔵に追加し続けることはできません。そのような場合に、一定時間経過した or 利用されなくなったフローエントリを自動的に削除できるOpenFlowの仕様(Hard Timeout/Idle Timeout)(*1)が活用します。これにより、破棄と判定される不正なアクセスが継続している間は、OpenFlowスイッチのみで破棄され続けることが可能であり、その不正なアクセスがOpenFlowコントローラに与える影響を最小限に抑えることが可能となります。そして、不正なアクセスが止まった後は、不要となったフローエントリを自動的に削除することで、OpenFlowスイッチの空きフローエントリ数を確保できます。

 

(*1) Hinemos仮想ネットワーク管理オプションではフローエントリの特性に応じてユーザがHard Timeout/Idle Timeoutをチューニングできます。

 

既存のネットワークからの通信を制約する

L3~L4(プロトコル、IPアドレス・ポート番号)のアクセスコントロールリストによる通信制御が仮想ファイアウォールにより実現されますが、既存のネットワークとの境界となるアクセスポートにおいてもL2(MACアドレス)によるアクセスコントロールリストによる通信制御が可能です。

 

 

基本動作として「許可」を選択した場合は指定されたMACアドレスを送信元とするパケット、「破棄」を選択した場合は指定された以外のMACアドレスを送信元とするパケットをOpenFlowスイッチが受信した際に、仮想ファイアウォールと同様にして破棄するフローエントリがOpenFlowスイッチに設定されます。このアクセスポートの機能を活用することにより、OpenFlowスイッチに従来のL2スイッチを接続した場合でも、一部の機器のみを仮想ネットワークと通信可能とする通信制御が実現されます。

 

 

1 2 >

 

技術情報

Hinemosで始めるネットワーク仮想化管理

SDN/OpenFlow関連情報

関連情報

採用事例

準備中

お問い合わせ