Virtual Server(IPアドレス)

BIG-IPは基本的にVirtual Serverというオブジェクトが然るべきトラフィックを拾い上げ、その設定にマッチした動作をさせます。動作というのは単純に振分けたり、iRulesでURLごとに振分けたり、HTTPのヘッダをいじったりというものを指します。
Virtual Serverがそのパケットを拾い上げるかどうかを決めるマッチ条件はIPアドレスとポート番号です。従ってVIPという習慣的な表現は正確ではありません。

Self IPとの関連性

Virtual Serverに設定するIPアドレスは、上述の通りマッチ条件にしか過ぎないので、Self IPと同一である必要はありません。従って以下のような構成も可能です。

Virtual ServerにグローバルIPを設定したいときに、BIG-IP自身が属するサブネットにも同じようにグローバルIPアドレスが必要な場合、上位ルータのBIG-IP側も含めると最低4個のホスト用IPアドレスにプラスしてネットワークアドレスとブロードキャストアドレスが必要になりますが、上図の構成を使用すると本当にサービスで必要なIPアドレスのみを効率的に使用することができます。当然上位ルータにはルーティングの設定が必要になりますが。

論理構成(IPネットワーク)

今回は論理構成(IPアドレッシング)について解説したいと思います。
だいたいマニュアル等に掲載されている内容では有りますが・・・


  1. ノーマルなL3構成

    うまい名前が思いつかなかったのでL3構成としましたが、クライアント側とサーバ側が異なるサブネットになる構成です。
    サーバから見たゲートウェイアドレスはBIG-IPのSelf IPになります。
    Self IPはBIG-IPに設定されるデバイス自身のIPアドレスで、実際にサービスを受け付けるIPアドレス(Virtual Server)とは異なります。

    また、この構成ではVirtual Serverを設定しない限りはクライアントとサーバが直接通信するすることはできません。
    そしてクライアント側、サーバ側ともにエンドポイントが同じセグメントに存在する必要は無く、以下のような構成も可能ですが、当然サーバおよびBIG-IP上にルーティングの設定が必要になります。


    いずれの構成でも、BIG-IP上でアドレス変換の設定を明示的に行わない限りは、サーバにパケットが到達する際のソースIPアドレスはクライアントのIPアドレスになります。

  2. クライアントとサーバが同一セグメント(ワンアーム)

    クライアントとサーバが同一セグメントに存在する場合の構成です。たとえばWeb-AP-DBの通信があるケースで、すべてを同じセグメントに置いておいてかつBIG-IPでトラフィックを管理するような場合です。

    BIG-IPは、TCPであれば通常はTCPのProxyとして動作し、クライアント側/サーバ側それぞれで個別にTCPのセッションを確立するため、ステートを管理しています。このため、明示的に設定をしない場合は非対称経路の通信は基本的には行うことができません。この構成での通信は、行きのパケットは

    Client -> BIG-IP -> Server

    という経路になりますが、戻りパケットはクライアントとサーバが同一サブネット上にあり、BIG-IPを介さずとも通信できるため、

    Server -> Client

    という経路になり、サーバとBIG-IPの間でセッションを確立することができないため正しく通信することができません。
    回避策はBIG-IPでソースIPをBIG-IPのSelf IPに変換する(SNAT)ことです。
    これによって、サーバはそのパケットの戻りをBIG-IPに返せるため正しく通信できます。

    クライアントのIPアドレスを保持したい場合はクライアントとサーバを別セグメントに配置するか、同セグメントに配置してHTTPであればHTTPヘッダにクラインとのIPアドレスを埋め込む必要があります。

  3. DSR

    Direct Server Returnという一般名称なのですが、BIG-IPのマニュアルにはnPathという名前で記載されています。構成等もマニュアルに書いてあるので割愛しますが、このために必要な設定は

    • L4モードで動かす
    • Virtual ServerのIPアドレスを同じIPアドレスを振分先リアルサーバ(Pool Member)のループバックアドレスに設定する
    • VSの設定で、Port TranslationをDisableにする

    です。このように、DSRの場合はL4モードでしか動作しないため、L7に関連する処理は何も入れることができません。
    また、L4モードはTCPのエンドポイントがクライアントとサーバになり、BIG-IPでProxyしないため各種DoS対策機能を使用することができません。LVS等ならともかくBIG-IPのようなシステム全体のトラフィック管理を担うような物でDSRを使用するメリットはあまり無いでしょう。