アプリケーション ロードバランサとプロキシ ネットワーク ロードバランサの IPv6

このドキュメントでは、アプリケーション ロードバランサとプロキシ ネットワーク ロードバランサで IPv6 トラフィックが処理される方法について説明します。これらのロードバランサはプロキシ ロードバランサです。つまり、受信クライアント接続はロードバランサで終端されます。ロードバランサは、新しい接続を開始してクライアント リクエストをバックエンドに転送します。ロードバランサのタイプに応じて、これらの接続のいずれかまたは両方で IPv6 を有効にできます。

ロードバランサで IPv6 を有効にすると、次のメリットがあります。

  • マルチリージョン デプロイでは、単一のエニーキャスト IPv6 アドレスを使用します。マルチリージョン間で稼働しているアプリケーション インスタンスでも必要になるロードバランサの IPv6 アドレスは 1 つのみです。このため、DNS サーバーに存在する AAAA レコードは 1 つであり、複数の IPv6 アドレス間での負荷分散が不要になります。キャッシュ対象のアドレスは 1 つのみであるため、クライアントによる AAAA レコードのキャッシュが問題になることはありません。IPv6 アドレスに対するユーザー リクエストは、使用可能な容量を持つ、最も近い正常なバックエンドに自動的に負荷分散されます。
  • デュアルスタック デプロイを実行します。IPv6 と IPv4 の両方のクライアントに対応するには、IPv6 用に 1 つと、IPv4 用に 1 つの、2 つのロードバランサ IP アドレスを作成します。IPv4 クライアントは IPv4 アドレスに接続され、IPv6 クライアントは IPv6 アドレスに接続されます。次に、これらのクライアントは、使用可能な容量がある最も近い正常な IPv4 または IPv6 デュアルスタック バックエンドに自動的にロードバランスされます。デュアルスタック バックエンドをサポートするロードバランサを確認するには、表: バックエンド サービスとサポートされているバックエンド タイプをご覧ください。IPv6 転送ルールは無料で提供されているため、料金が発生するのは IPv4 転送ルールについてのみです。

  • HTTP、HTTPS、HTTP/2、TCP、SSL/TLS の各 IPv6 クライアント トラフィックが負荷分散されます。プロトコルのサポートは、使用しているロードバランサのタイプと転送ルール プロトコルによって異なります。

  • 同一の IPv6 ロードバランサ アドレスを使用するリージョン間でのオーバーフロー。いずれか 1 つのリージョン内のバックエンドでリソースが不足するか異常が生じると、グローバル ロードバランサによって、ユーザーからのリクエストは使用可能なリソースがある 2 番目に近いリージョンに自動的に転送されます。最も近いリージョンでリソースが使用可能になると、グローバル ロード バランシングによって、そのリージョンを介した処理に戻されます。グローバル ロード バランシングでは、Network Service Tiers のうちプレミアム ティアを使用する必要があります。

ロードバランサのサポート

アプリケーション ロードバランサやプロキシ ネットワーク ロードバランサなどのプロキシベースのロードバランサの場合、クライアントからロードバランサへの接続と、ロードバランサからバックエンドへの 2 番目の接続は、相互に独立して構成できます。たとえば、バックエンドが IPv6 接続を処理できるデュアルスタック バックエンドである限り、ロードバランサはクライアントからの IPv4 トラフィックを受け入れ、接続を終端し、新しい IPv6 接続を介してロードバランサからバックエンドにリクエストを転送できます。

ロードバランサがクライアントからの IPv6 接続を受信できるようにするには、ロードバランサの転送ルールに IPv6 アドレスを使用する必要があります。ロードバランサからバックエンドへの後続の接続は、デフォルトで IPv4 を使用します。ただし、バックエンド サービスで IP アドレス選択ポリシー オプションを構成することで、特定のロードバランサで IPv6 を使用できます。

次の表に、すべてのプロキシベースのロードバランサでサポートされている接続タイプを示します。

ロードバランサ クライアントからロードバランサへの接続 ロードバランサからバックエンドへの接続
グローバル外部アプリケーション ロードバランサ
グローバル外部プロキシ ネットワーク ロードバランサ
IPv4 接続と IPv6 接続の両方を終了できます。 次のいずれか。
  • IPv4 接続: IPv4 専用またはデュアルスタック バックエンドでサポート
  • IPv6 接続: デュアルスタック バックエンド*でのみサポート
従来のアプリケーション ロードバランサ
従来のプロキシ ネットワーク ロードバランサ
IPv4 接続と IPv6 接続の両方を終了できます。 IPv4 接続のみ
リージョン外部アプリケーション ロードバランサ
リージョン外部プロキシ ネットワーク ロードバランサ
リージョン内部アプリケーション ロードバランサ
リージョン内部プロキシ ネットワーク ロードバランサ
クロスリージョン内部アプリケーション ロードバランサ
クロスリージョン内部プロキシ ネットワーク ロードバランサ
IPv4 のみ。IPv6 トラフィックはサポートされません。 次のいずれか。
  • IPv4 接続: IPv4 専用またはデュアルスタック バックエンドでサポート
  • IPv6 接続: デュアルスタック バックエンド*でのみサポート
* インスタンス グループとゾーン NEG(GCE_VM_IP_PORT エンドポイントを使用)のみをデュアルスタックとして構成できます。

IPv6 終端の仕組み

IPv6 終端は、グローバル アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、プロキシ ネットワーク ロードバランサでサポートされています。これらのロードバランサに IPv6 終端を構成すると、次の図に示すように、バックエンドが IPv6 クライアントに対する IPv6 アプリケーションとして表示されます。

ロード バランシングでの IPv6 の終端。
ロード バランシングでの IPv6 の終端(クリックして拡大)

ユーザーが IPv6 経由でロードバランサに接続すると、次のように処理されます。

  1. IPv6 アドレスと転送ルールに従って、ロードバランサはユーザー接続を待機します。
  2. IPv6 クライアントは、IPv6 でロードバランサに接続します。
  3. ロードバランサはリバース プロキシとして機能し、IPv6 クライアントの接続を終端します。バックエンド サービスの IP アドレス選択ポリシーに基づいて、リクエストをバックエンドへの IPv4 または IPv6 接続に渡します。
  4. 逆の経路では、ロードバランサはバックエンドからレスポンスを受け取り、これを IPv6 接続に渡して元のクライアントに送り返します。

ロードバランサ転送ルールに IPv6 アドレスを割り当てる

外部ロードバランサを構成する場合は、1 つ以上の転送ルールを指定します。それぞれのルールには、外部に一般公開され、ルーティングされている IPv4 IP アドレスまたは IPv6 IP アドレス(あるいはその両方)を使用します。自分のサイトの DNS レコードでこの IP アドレスを使用できます。

転送ルールを作成するときは、プロジェクト用に予約されている静的 IP アドレスを使用するか、ルールを作成するときに転送ルールによって自動的に取得されるエフェメラル IP アドレスを使用します。静的 IP アドレスはプロジェクト用に予約され、意図的にリリースされるまで保持されます。転送ルールが存在している限り、エフェメラル アドレスはこの転送ルールに属します。転送ルールを削除すると、エフェメラル アドレスが解放され、Google Cloud のプールに戻されます。

ロードバランサに IPv4 アドレスと IPv6 アドレスの両方が必要な場合、IPv4 アドレスに関連付けられている転送ルールと、IPv6 アドレスに関連付けられている転送ルールの 2 つを作成できます。次に、両方の転送ルールを同じロードバランサに関連付けます。

IPv6 アドレス形式

Google Cloud は /64 IPv6 アドレス範囲を IPv6 転送ルールに割り当てます。Google Cloud CLI は IPv6 アドレスの下位 64 ビットを 0 に設定してリストしますが、ロードバランサは全範囲でトラフィックを受け入れます。そのため、クライアントが接続する IPv6 サーバーの IP アドレスによっては、X-Forwarded-For ヘッダー内の割り当て範囲に、他のロードバランサの IPv6 アドレスが表示されることもあります。

IPv6 アドレスの形式を設定する場合、Google Cloud は RFC 5952 のセクション 4 の推奨事項を遵守します。

外部アプリケーション ロードバランサの IPv6 終端のクライアント IP ヘッダー

ロードバランサがクライアントからの IPv6 接続を中継し、IPv4 接続でバックエンドに送信すると、元のソース IP アドレスは、ロードバランサの IP アドレスに置き換えられます。ただし、ロギング、意思決定などの目的で、バックエンドは多くの場合、元のソース IP アドレスを把握しておく必要があります。Google Cloud では、元の IPv6 クライアントの IP アドレスを含む HTTP ヘッダーをバックエンドに伝播します。

IPv6 の HTTP ヘッダーは IPv4 の HTTP ヘッダーに類似しています。リクエストの形式は次のとおりです。

  • X-Forwarded-For: CLIENT_IP_ADDRESS, GLOBAL_FORWARDING_RULE_EXTERNAL_IP_ADDRESSES

最後の要素は、ロードバランサの IP アドレスを示します。2 番目と最後の要素は、ロードバランサから見たクライアント IP アドレスを示します。X-Forwarded-For ヘッダーにその他の要素が存在する場合や、ロードバランサにリクエストが送信される前に、クライアントや介在するプロキシにより、その他の X-Forwarded-For ヘッダーが追加される場合があります。

次は、X-Forwarded-For ヘッダーの例です。

X-Forwarded-For: 2001:db8:abcd:1::1234, 2607:f8b0:4005:801::200e

2001:db8:abcd:1::1234 は、クライアントの IPv6 アドレスです。2607:f8b0:4005:801::200e は、外部アプリケーション ロードバランサの IPv6 アドレスです。

IPv4 のみからデュアルスタックに変換する

IPv4 のみ(シングルスタック)を使用するロードバランサ リソースを、IPv4 と IPv6(デュアルスタック)に変換できます。ロードバランサ リソースを更新すると、IPv6 トラフィックをバックエンドに自動的に転送できます。

ロードバランサのリソースとバックエンドをデュアルスタックに変換する手順については、次のドキュメントをご覧ください。

ロードバランサ ドキュメント
グローバル外部アプリケーション ロードバランサ
クロスリージョン内部アプリケーション ロードバランサ
リージョン外部アプリケーション ロードバランサ
リージョン内部アプリケーション ロードバランサ
アプリケーション ロードバランサを IPv6 に変換する
グローバル外部プロキシ ネットワーク ロードバランサ
クロスリージョン内部プロキシ ネットワーク ロードバランサ
リージョン外部プロキシ ネットワーク ロードバランサ
リージョン内部プロキシ ネットワーク ロードバランサ
プロキシ ネットワーク ロードバランサを IPv6 に変換する

料金

IPv6 終端の転送ルールに追加料金はかかりません。一時的な IPv6 アドレスについては、課金されません。予約済みの IPv6 アドレスは、それらが使用されているかどうかに関係なく、既存のレートで課金されます。それ以外の場合、IPv6 ロード バランシングの料金は IPv4 ロード バランシングの料金と同じです。ロード バランシング料金の詳細については、ネットワーク料金をご覧ください。

制限事項

  • 従来のプロキシ ネットワーク ロードバランサと従来のアプリケーション ロードバランサはデュアルスタック バックエンドをサポートしていません。IPv6 トラフィックはロードバランサによって終端され、IPv4 接続を介してバックエンドにプロキシされます。
  • リージョン外部アプリケーション ロードバランサ、リージョン内部アプリケーション ロードバランサ、リージョン内部プロキシ ネットワーク ロードバランサ、 クロスリージョン内部プロキシ ネットワーク ロードバランサ、クロスリージョン内部アプリケーション ロードバランサ、 リージョン外部プロキシ ネットワーク ロードバランサは、IPv6 フロントエンドをサポートしていません。上り(内向き)IPv4 トラフィックは、IPv4 または IPv6 接続を介して IPv4 と IPv6(デュアル スタック)バックエンドにプロキシされます。

  • デュアルスタック(IPv4 と IPv6)バックエンドをサポートするのは、GCE_VM_IP_PORT エンドポイントを使用する VM インスタンス グループ バックエンドとゾーン ネットワーク エンドポイント グループ(NEG)のみです。

次のステップ