VPC の高度なコンセプト

このページでは、Virtual Private Cloud(VPC)ネットワークの詳細について説明します。VPC ネットワークの主な概要をまだ確認していない場合は確認してください。

高度な VPC ネットワーキングの詳細

このセクションでは、VPC ネットワーキングの下位レベルの詳細について説明します。一般的な用途の場合、このセクションを読む必要はありませんが、このセクションを読むと VPC ネットワーキングの仕組みについて理解が深まります。次の図はこれらの下位レベル情報を表します。詳細については、対応する各セクションをご覧ください。

VPC ネットワークの詳細図

各要素が実行する処理

内部的には、各 VPC ネットワーキング機能はシステムのさまざまな要素によって処理されています。これには、各種ドキュメントで説明されている標準的なネットワーキング機能もあれば、VPC ネットワークに固有のものもあります。また、ユーザーが構成できるものもあれば、構成できないものもあります。VPC ネットワークでは、Linux の VIRTIO ネットワーク モジュールを使用してイーサネット カードとルーターの機能をモデル化しています。ただし、ARP ルックアップなど、上位レベルのネットワーキング スタックは、標準的なネットワーキング ソフトウェアを使って処理されます。

ARP ルックアップ
インスタンスのカーネルが ARP リクエストを発行し、VPC ネットワークが ARP 応答を発行します。MAC アドレスと IP アドレスのマッピングはインスタンスのカーネルによって処理されます。
MAC ルックアップ テーブル、IP ルックアップ テーブル、アクティブ接続テーブル
これらのテーブルは基盤となる VPC ネットワークでホストされているため、検査や構成はできません。
DNS サーバー

各インスタンスのメタデータ サーバーは DNS サーバーとして機能します。これはローカル VPC ネットワーク内のすべての VPC ネットワーク IP アドレスに対応する DNS エントリを保持し、VPC ネットワーク外のエントリについては Google のパブリック DNS サーバーを呼び出します。この DNS サーバーは構成できません。各インスタンスの DHCP クライアントは、インスタンスの /etc/resolv.conf ファイルを管理するように構成されています。

DHCP ポリシーを変更することによって、独自の検索ドメインまたはネームサーバーをインスタンスの /etc/resolv.conf に追加できます。多くの Linux ディストリビューションでは、これらの変更を /etc/dhcp/dhclient.conf で維持できます。詳細については、内部 DNS のドキュメントをご覧ください。

VPC ネットワークと外部との間のパケット処理

VPC ネットワークに出入りするパケットはネットワーク コードによって処理されます。ネットワーク コードは、ファイアウォール ルール、外部 IP のルックアップ テーブル、アクティブ接続テーブルとの照合によりパケットを検査します。また、VPC ネットワークに出入りするパケットに対して NAT も実行されます。

インスタンスによって受信されたパケット

このようなパケットは、標準的な方法でインスタンスのカーネルによって受信され、ストリームに変換されます。

インスタンスによって送信されたパケット

パケットは標準的な方法でインスタンスのカーネルによって送信されます。インターフェースとネットワークの機能は、VIRTIO ネットワーク モジュールを使用してモデル化されています。

接続の詳細な流れ

ここでは、インスタンスが VPC ネットワーク呼び出しを実行したときに発生する動作を詳しく説明します。

インスタンスが呼び出しを実行する:

  1. ターゲット アドレスがインスタンス名または www.google.com などの URL の場合、インスタンスはメタデータ サーバーで DNS サービスを呼び出し、一致する IP アドレスを取得します。インスタンスが別の DNS サービスを参照するように構成することもできます。ただし、この場合はインスタンス名を解決できなくなります。
  2. 宛先 IP アドレスが、すべてのインスタンスが認識しているサブネットの IP アドレス範囲と照合されます。

    1. IP アドレスが VPC ネットワークの外部にある場合:

      1. インスタンスは、宛先がパケットの最終的な宛先に設定されているサブネットのゲートウェイ MAC アドレスにパケットを送信します。インスタンスは、場合によっては ARP リクエストを実行し、ゲートウェイの MAC アドレスを解決する必要があります。

      2. VPC ネットワークが IP ヘッダーを書き換え、送信元としてインスタンスの外部 IP アドレスを宣言します。インスタンスに外部 IP アドレスが割り当てられていない場合、この呼び出しは許可されず、VPC ネットワークは送信者に通知することなく、そのパケットを破棄します。

      3. VPC ネットワークが送信パケットを記録し、送信元と宛先をアクティブ接続テーブルに追加します。

      4. VPC ネットワークが、パケットを宛先に送信します。

      5. 宛先がパケットを受け取り、選択に応じて応答します。

      6. VPC ネットワークがレスポンスを受信し、アクティブ接続テーブルを参照してアクティブな接続であると認識し、これを許可します。VPC ネットワークは、ネットワーク / 外部 IP のルックアップ テーブルを参照し、インスタンスの外部 IP アドレスを一致するネットワーク アドレスに置き換えて、パケットを送信元のインスタンスに送信します。

      7. インスタンスがパケットを受信します。

    2. 宛先 IP アドレスが VPC ネットワーク内の場合:

      1. インスタンスは 255.255.255.255 のマスクを持つ IP で構成されているため、サブネットワークのゲートウェイ MAC アドレスにパケットを送信します。インスタンスは、場合によっては最初に ARP リクエストを実行し、ゲートウェイの MAC アドレスを解決する必要があります。

      2. プロキシ ARP を使用する VPC ネットワークは、宛先インスタンスの MAC アドレスを使用して応答します。

      3. GCP は VPC ネットワーク内の宛先 IP にパケットを転送します。

      4. ターゲット インスタンスがパケットを受信します。ターゲット インスタンスは上りファイアウォールを確認し、そのパケットを許可するかどうか判断します。許可されない場合、パケットは通知なく破棄されます。それ以外の場合は、インスタンスがパケットを処理します。

外部インスタンスまたはコンピュータがインスタンスを呼び出す:

  1. 外部の呼び出し元が、インスタンスの外部 IP アドレス(VPC ネットワークが所有するアドレス)にパケットを送信します。

  2. VPC ネットワークがパケットとアクティブ接続テーブルを比較し、それが既存の接続かどうかを確認します。

    1. 既存の接続でない場合、VPC ネットワークは、接続を許可するファイアウォール ルールを検索します。
    2. ファイアウォール ルールが存在しない場合、VPC ネットワークは、送信者に通知することなくパケットを破棄します。
  3. 既存の接続または有効なファイアウォール ルールが存在する場合、VPC ネットワークはルックアップ テーブルを調べ、パケット内の外部 IP を対応する内部 IP に置き換えます。そして、受信パケットをアクティブ接続テーブルに記録し、そのパケットをターゲット インスタンスに送信します。

  4. インスタンスは、ネットワーク範囲外にパケットを送信する場合、IP アドレスが VPC ネットワーク IP の範囲外の場合の説明に沿って、パケットを受信して応答します。

  5. VPC ネットワークが応答を受信すると、一致する受信リクエストをアクティブ接続テーブルで確認してからパケットの通過を許可します。送信する前に、インスタンスの内部 IP をルックアップ テーブルから取得した対応する外部 IP に置き換えて、送信元 IP アドレスを変更します。

VPC ネットワーク スループットの測定

仮想マシンからの送信トラフィック(下りトラフィック)は、VM ごとの下りスループット上限の影響を受けます。この上限は、16 Gbit/秒(Gbps)、または 2 Gbps に VM 内の vCPU の数を掛けた値の小さいほうの値になります。上限は、超過できない制限を示すものであり、下りトラフィックの実際のスループットを示すものではありません。実際のトラフィックで最大スループットを達成できるという保証はなく、この上限以外の多数の要因によっても左右されます。下りスループットの上限については、こちらをご覧ください

このような上限との相対でインスタンスのパフォーマンスを測定するには、PerfKitBenchMarker を使用してインスタンスの下りスループットのパフォーマンスを測定します。

たとえば、ローカル コンピュータで次の各コマンドを実行します。このコマンドを実行するとインスタンスが作成され、そのパフォーマンスが測定されます。各値の意味は次のとおりです。

  • [MACHINE_TYPE] はテストするマシンタイプです(例: n1-standard-32)。
  • [ZONE] はインスタンスの作成先となるゾーンです。
  • [NUMBER_OF_VCPUS] はインスタンスの vCPU の数です(たとえば、n1-standard-32 マシンタイプの場合は 32 です)。

シングル ストリームのパフォーマンスを測定するには:

./pkb.py --cloud=GCP --machine_type=[MACHINE_TYPE] --benchmarks=iperf --ip_addresses=INTERNAL --zones=[ZONE]

マルチ ストリームのパフォーマンスを測定するには:

./pkb.py --cloud=GCP --machine_type=[MACHINE_TYPE] --benchmarks=iperf --ip_addresses=INTERNAL --zones=[ZONE] --iperf_sending_thread_count=[NUMBER_OF_VCPUS]

次のステップ

  • GCP VPC ネットワークの詳細について、VPC の概要を参照する。
  • VPC ネットワークの作成と変更の手順を、VPC の使用で確認する。
このページは役立ちましたか?評価をお願いいたします。