IP アドレスとポート

このページでは、Cloud NAT ゲートウェイがどのように IP アドレスを使用するか、および、どのようにゲートウェイを使用する Compute Engine 仮想マシン(VM)インスタンスと Google Kubernetes Engine(GKE)ノードに送信元ポートを割り当てるかについて説明します。

この情報を確認する前に、Cloud NAT の概要をよく理解してください。

Public NAT IP アドレス

Public NAT IP アドレスは、インターネット上でルーティング可能なリージョンの外部 IP アドレスです。Public NAT IP アドレスは、Public NAT ゲートウェイが提供するサブネットワーク(サブネット)に存在し外部 IP アドレスを持たない VM が、インターネット上の宛先にパケットを送信するときに使用します。

ネットワーク アドレス変換(NAT)IP アドレスを Public NAT ゲートウェイに割り当てるには、次のいずれかの方法を使用します。

  • NAT IP アドレスの自動割り振りこの方法を選択するか、Google Cloud のデフォルトを選択すると、Public NAT は以下に基づいて、リージョン外部 IP アドレスを自動的にゲートウェイに追加します。

    • 選択したネットワーク ティア
    • ゲートウェイを使用する VM の数
    • 各 VM に予約されているポートの数

    また、Public NAT は、その NAT IP アドレス上の送信元ポートが不要になると、NAT IP アドレスを自動的に削除します。

    NAT IP アドレスの自動割り振りには、次の特徴があります。

    • Public NAT ゲートウェイが NAT IP アドレスを追加すると、ゲートウェイの構成時に選択したネットワーク ティアに静的(予約済み)リージョン外部 IP アドレスが作成されます。たとえば、プレミアム ティアを選択した場合は、Public NAT ゲートウェイがそのティアの IP アドレスを作成します。サポートされているネットワーク ティアは、プレミアム ティア(デフォルト オプション)とスタンダード ティアです。

      自動的に追加された NAT IP アドレスは、静的な外部 IP アドレスのリストで確認できます。これらのアドレスはプロジェクトごとの割り当てに反映されます。

    • Public NAT ゲートウェイのネットワーク ティアを変更すると、そのゲートウェイの既存の IP アドレスが解放され、選択したティアから新しい IP アドレスのセットが割り当てられます。
    • 自動割り振りでは、割り振られる予定の次の IP アドレスを予測することはできません。事前に把握している割り当て見込みの NAT IP アドレスのセットを割り当てる場合(たとえば、許可リストを作成する場合)は、手動で NAT IP アドレスを割り当てます。
    • 自動的に追加された NAT IP アドレスは、不要になると削除されます。ただし、Public NAT では、アドレスに最後に割り当てられた VM がポートを使用しなくなった場合にのみ、アドレスの割り振りを解除します。そのため、Public NAT を使用する VM の数が減少しても、IP は減少しないことがあります。再割り当てによって確立された接続が中断されるため、Cloud NAT は VM を別の IP アドレスに動的に再割り振りしないからです。少なくとも 1 つの VM が IP アドレスを使用している限り、IP アドレスはアクティブなままになり、新しい VM を割り当てることができます。

      IP アドレスの使用を最小限に抑えるために、VM への IP アドレスの割り振りを手動で変更するには、NAT IP アドレスの手動割り当てを使用します。NAT IP アドレスの手動割り当てにより、Public NAT IP アドレスのドレインが可能になります。

    • あとで手動 NAT IP アドレス割り当てに切り替えると、自動的に予約されたリージョン外部 IP アドレスが削除されます。詳細については、割り当ての切り替えをご覧ください。

  • NAT IP アドレスの手動割り当て。このオプションを選択した場合、Public NAT ゲートウェイに静的な(予約済みの)リージョン外部 IP アドレスを作成して手動で割り当てます。条件に従って、プレミアム ティア、スタンダード ティア、またはその両方から IP アドレスを手動で割り当てることができます。

    • Cloud NAT ゲートウェイを編集することにより、手動で割り当てる NAT IP アドレスの数を増減できます。
    • NAT IP アドレスの手動割り当てを使用する場合は、Public NAT ゲートウェイに必要なリージョン外部 IP アドレスの数を計算する必要があります。ゲートウェイで NAT IP アドレスが不足していると、Public NAT はパケットを破棄します。Cloud NAT ロギングを使用しているときにエラーロギングを有効にすると、ドロップされたパケットがログに記録されます。
    • 計算例については、ポート予約の例をご覧ください。

NAT IP アドレスを自動的に割り振るか、手動で割り振る場合は、Cloud NAT の制限をご覧ください。

プレミアム ティアとスタンダード ティアの IP アドレスを組み合わせて手動で割り当てる

NAT IP アドレスの手動割り当て方式で Public NAT ゲートウェイを作成する場合、異なるネットワーク ティアの IP アドレスが同じルール(デフォルト ルールを含む)に含まれない限り、プレミアム ティアとスタンダード ティアの IP アドレスを混在させることができます。

ルール(デフォルト ルールを含む)内では、アクティブ範囲に割り振られるすべての IP アドレスは同じネットワーク ティアのものである必要があります。同じルールの一部として異なるティアの IP アドレスを使用しようとすると、Google Cloud は構成を拒否します。

割り当て方法を切り替える

Public NAT ゲートウェイでは、NAT IP アドレスの割り振りを自動から手動に切り替えることが可能です。ただし、NAT IP アドレスは保持できません。自動的に割り振られた NAT IP アドレスは静的ですが、手動 NAT IP アドレス割り当てに移行することはできません。たとえば、自動的に割り振られた NAT IP アドレスで Public NAT ゲートウェイを開始した場合、後で手動で割り当てられた NAT IP アドレスに切り替えるときに、同じアドレスを使用することはできません。

Public NAT が NAT IP アドレスの自動割り振りに使用するリージョン外部 IP アドレスのセットは、手動で選択できるリージョン外部 IP アドレスのセットとは異なります。

Public NAT IP アドレスをドレインする

NAT IP アドレスの手動割り当てを設定して Public NAT ゲートウェイを構成する場合、ゲートウェイが使用する NAT IP アドレスの数を減らす際の動作を選択できます。

  • 手動で割り当てられた NAT IP アドレスを削除すると、確立済みの NAT 接続が即時に切断されます。

  • その代わりに、手動で割り振られた NAT IP アドレスのドレインを選択することもできます。ドレインを行うと、Public NAT ゲートウェイは新しい接続で NAT IP アドレスを使用しませんが、確立済みの接続ではそのアドレスを引き続き使用します。確立された接続は突然終了せず、正常に終了します。NAT ルールを使用しない Public NAT ゲートウェイに関連付けられた IP アドレスをドレインするには、NAT に関連付けられた外部 IP アドレスをドレインするをご覧ください。NAT ルールを使用する NAT ゲートウェイに関連付けられた IP アドレスをドレインするには、NAT ルールの更新をご覧ください。

Private NAT IP アドレス

Private NAT には 2 つの Virtual Private Cloud(VPC)ネットワークが必要で、さらにそれぞれが同じ Network Connectivity Center のハブの VPC スポークとして構成されている必要があります。VPC スポークと Network Connectivity Center の詳細については、VPC スポークの概要をご覧ください。

Private NAT アドレスは、Private NAT ゲートウェイと同じリージョンと VPC ネットワークにある Private NAT サブネットのプライマリ IPv4 アドレス範囲から取得されるリージョン内部 IPv4 アドレスです。Private NAT IP アドレスはインターネット上ではルーティングできません。Private NAT サブネットのプライマリ IPv4 アドレス範囲の IP アドレスは、Private NAT ゲートウェイでのみ使用できます。Private NAT サブネットを作成するには、Google Cloud CLI と --purpose=PRIVATE_NAT フラグを使用して IPv4 専用サブネットを追加します。

Network Connectivity Center ハブに接続されている VPC ネットワーク内のサブネットに NAT サービスを提供するように Private NAT ゲートウェイを設定した後、そのサブネット内のネットワーク インターフェースを持つ VM は、このハブの他の VPC スポークにあるリソースにパケットを送信できます。外向きの場合、Google Cloud は送信元 IP アドレスを、ゲートウェイに関連付けられている Private NAT サブネットの IP アドレスに変更します。

Private NAT IP アドレスの特性は次のとおりです。

  • Private NAT ゲートウェイに Private NAT IP アドレスを自動的に割り当てることはできません。代わりに、Private NAT ゲートウェイでルールを作成するときに、Private NAT サブネットを手動で指定します。Private NAT サブネットは、ゲートウェイと同じ VPC ネットワークとリージョンにある必要があります。ゲートウェイは、Private NAT サブネットのプライマリ IPv4 アドレス範囲の IP アドレスのみを使用します。
  • 各 Private NAT サブネットで指定できる NAT IP アドレスの数を確認するには、2(32 - PREFIX_LENGTH) - 4 という式を使用します。ここで、PREFIX_LENGTH は Private NAT サブネットのプライマリ IPv4 アドレス範囲のサブネット マスク長です。すべてのサブネットのプライマリ IPv4 アドレス範囲で、4 つの IP アドレスが使用不能になります。

ポート

Cloud NAT ゲートウェイ(Public NAT と Private NAT の両方)の各 NAT IP アドレスは、64,512 個の TCP 送信元ポートと 64,512 個の UDP 送信元ポートをサポートします。TCP と UDP は、それぞれ IP アドレスあたり 65,536 個のポートをサポートしていますが、Cloud NAT は先頭の 1,024 個のよく知られた(特権)ポートを使用しません。

Cloud NAT ゲートウェイは、VM から送信されたパケットに対して送信元ネットワーク アドレス変換(送信先 NAT または SNAT)を実行するときに、パケットの NAT 送信元 IP アドレスと送信元ポートを変更します。

Cloud NAT ゲートウェイを作成する際、静的ポートの割り当て動的ポートの割り当てのどちらを使用するかを選択します。 ポート割り当てモードを変更すると、Public NAT ゲートウェイを使用する既存の接続がすべて閉じられるため、再確立する必要があります。

Public NAT ゲートウェイに、複数の静的(予約済み)リージョン外部 IP アドレスを手動で割り当てた場合、ゲートウェイを使用する単一の VM は、割り当てられた NAT IP アドレスのいずれかから必要なポートを取得できます。これは、同時に複数の NAT IP アドレスからポートを取得する場合も同様です。

静的ポートの割り当て

静的ポートの割り当てを構成する場合は、VM インスタンスあたりの最小ポート数を指定します。VM あたりの最小ポート数を指定しない場合、Google Cloud はデフォルト値を使用します。

Public NAT では、静的ポートの割り当てがデフォルトで有効になっています。一方、Private NAT では、デフォルトで動的ポートの割り当てが使用されます。

すべての VM に同じ数のポートが割り当てられるため、すべての VM で下り(外向き)の使用量が類似している場合は、静的ポートの割り当てが最適です。一部の VM で他の VM よりも多くのポートが使用されている場合、Cloud NAT ゲートウェイのポートが十分に活用されていない可能性があります。下り(外向き)の使用量が変動する場合は、動的ポートの割り当てを構成することを検討してください。

Public NAT ゲートウェイでエンドポイントに依存しないマッピングを構成する場合は、静的ポートの割り当てを使用する必要があります。Private NAT ゲートウェイにエンドポイントに依存しないマッピングは使用できません。

動的ポートの割り当て

動的ポートの割り当てを構成するときは、VM インスタンスあたりの最小ポート数と VM インスタンスあたりの最大ポート数を指定します。

Private NAT では、動的ポートの割り当てがデフォルトで有効になっています。Public NAT の場合は、手動で動的ポートの割り当てを構成する必要があります。

動的ポートの割り当てを構成すると、同じ Cloud NAT ゲートウェイが VM の使用量に基づいて、VM ごとに異なるポート数を割り当てることができます。最初は、VM に VM インスタンスあたりの最小ポート数が割り当てられます。VM が割り当てられたすべてのポートを使い切りそうになると、VM に割り当てられるポート数が 2 倍に増えます。 VM は、VM インスタンスあたりの最大ポート数まで、追加のポートを繰り返しリクエストできます。ポートの使用量が大幅に減少すると、ポートの割り当てが解除され、同じ NAT ゲートウェイを使用する他の VM に割り当てることができます。

動的ポートの割り当てには以下の利点があります。

  • 割り当てられているが使用されていないポートの数が減ります。

  • NAT ゲートウェイは、各 VM のポート使用状況をモニタリングし、必要に応じて各 VM に割り当てられたポートの数を変更します。ポートの使用状況のモニタリングや、NAT ゲートウェイの構成の調整は必要ありません。

動的ポートの割り当てを使用する前に、次の点を考慮してください。

  • Cloud NAT ゲートウェイでエンドポイントに依存しないマッピングが有効になっている場合、動的ポートの割り当ては構成できません。エンドポイントに依存しないマッピングが必要な場合は、静的ポートの割り当てを使用します。

  • 追加のポートが VM に割り当てられている間、接続タイムアウトやレイテンシが発生することがあります。接続の切断を防ぐ方法については、動的ポート割り当てを使用して接続の切断を減らすをご覧ください。

ポートの割り当て方式を切り替える

特定の Cloud NAT ゲートウェイでは、静的ポートの割り当てと動的ポートの割り当てを切り替えることができます。

動的ポート割り当て方式に切り替えると、次のいずれかの条件が満たされた場合にのみ、既存の NAT 接続が切断されます。

  • VM あたりの最大ポート数を、以前の NAT 構成(VM の静的ポートの割り当て)で指定されている VM あたりの最小ポート数よりも小さい値に設定した場合。

    以前の構成では、VM あたりの最小ポート数が 1024 を超え、1024 が新しい構成の VM あたりの最大ポート数として指定されている場合は、最初の条件を優先するため、既存の接続が切断されます。

  • VM あたりの最大ポート数を 1024 より小さい値に設定した場合。

次のいずれかの条件が満たされない限り、動的ポートの割り当てに切り替えても既存の NAT 接続は中断されません

動的ポートの割り当てを無効にして静的ポートの割り当てに切り替えると、中断が発生し、すべてのアクティブな NAT 接続が切断されます。

ポートの予約手順

Cloud NAT は、次の手順を使用して、Cloud NAT(Public NAT と Private NAT の両方)ゲートウェイが処理する VM ごとに NAT の送信元 IP アドレスと送信元ポートのタプルをプロビジョニングします。

  1. Cloud NAT により、NAT を実行する VM 内部 IP アドレスが決まります。VM の内部 IP アドレスは、ゲートウェイが提供するように構成されたサブネット IP アドレス範囲によって決まります。

    • VM のネットワーク インターフェースで使用されるサブネットのプライマリ IP アドレス範囲に対して NAT を実行するように Public NAT ゲートウェイが構成されている場合、ゲートウェイは、VM のプライマリ内部 IP アドレスと、サブネットのプライマリ IP アドレス範囲からの VM のエイリアス IP 範囲の両方に NAT を実行します。

    • VM のネットワーク インターフェースで使用されるサブネットのセカンダリ IP アドレス範囲に NAT を実行するように Public NAT ゲートウェイが構成されている場合、ゲートウェイは、そのサブネットのセカンダリ IP アドレス範囲からのエイリアス IP 範囲に対して NAT を実行します。

    Private NAT ゲートウェイは、VM のネットワーク インターフェースで使用されるサブネットのすべての IP アドレス範囲に NAT を実行するように構成されているため、そのサブネットからのすべての IP 範囲に対して NAT が実行されます。

  2. Cloud NAT は、必要に応じて VM インスタンスあたりの最小ポート数を調整します。静的ポートの割り当てが構成され、ゲートウェイが、複数のアドレス(/32 より小さいネットマスク)を持つエイリアス IP 範囲に対して NAT を実行する場合、Cloud NAT は VM あたりの最小ポート数を次の 2 つの値の大きい方になるように調整します。

    • 指定した VM インスタンスあたりの最小ポート数

    • 1,024

    動的ポートの割り当てが構成されているなど、それ以外の場合、Cloud NAT ゲートウェイは VM インスタンスごとに指定された最小ポートを入力として使用し、次のステップに進みます。VM インスタンスあたりの最小ポート数を指定しない場合は、デフォルト値が使用されます。静的ポートの割り当ての場合は 64、動的ポートの割り当ての場合は 32 です。

  3. Cloud NAT は、各 VM に NAT の送信元 IP アドレスと送信元ポートのタプルを予約します。Cloud NAT ゲートウェイは、前のステップで特定した VM インスタンスごとに指定または調整された最小ポートを使用して、VM に割り当てる NAT 送信元 IP アドレスと送信元ポートのタプルの数を計算します。

    Public NAT の場合、Google Cloud は NAT 送信元 IP アドレスと送信元ポートのタプルの数を、2 のべき乗を使用して割り当てるため、NAT 送信元アドレスと送信元ポートのタプルの数は、指定した VM インスタンスあたりの最小ポート数以上になります。

    Private NAT では、信頼性を確保するために、VM ごとに必要な最小ポート数の 2 倍が Google Cloud によって割り当てられます。Private NAT で IP アドレスとポートを割り当てるサブネットのサイズが適切に設定されていることを確認します。

    • Cloud NAT ゲートウェイが 2 つ以上の NAT IP アドレスを使用する場合、NAT の送信元 IP アドレスと送信元ポートのタプルは、複数の NAT IP アドレスにまたがる場合があります。1 つの NAT IP アドレスでは、VM に必要な NAT 送信元 IP アドレスと送信元ポートのタプルに対応する十分な送信元ポートがない可能性があります。

    • Cloud NAT ゲートウェイは、各 VM に送信元 IP アドレスと送信元ポートのタプルを割り当てます。

      • 静的ポートの割り当てを構成した場合、送信元 IP アドレスと送信元ポートのタプルの数は固定されます。トラフィック バーストであっても、各 VM で割り当てられた送信元 IP アドレスと送信元ポートのタプルの数を使用できます。

      • 動的ポートの割り当てを構成している場合、送信元 IP アドレスと送信元ポートのタプルの数は需要に応じて変わります。VM が現在のポート割り当てをほぼ使い切ると、Cloud NAT は、指定された VM インスタンスあたりの最大ポート数の値まで、追加のポートを割り当てます。VM のポート使用量がしきい値を下回ると、ポートは解放され、他の VM に割り振られます。

VM あたりのポート数を増やす

静的ポート割り当てを使用して Cloud NAT ゲートウェイを構成した場合、ゲートウェイ上の VM あたりの最小ポートを増やしても、トラフィックの中断は発生しません。

動的ポート割り当てを使用して Cloud NAT ゲートウェイを構成している場合、VM あたりの最小ポート数、最大ポート数、または両方のポート数を増やしても、既存の NAT 接続が切断されることや、NAT ゲートウェイを流れるトラフィックが中断されることはありません

VM 用のポート数を増やす場合は、次の点を考慮してください。

  • NAT IP アドレスの手動割り当てで Public NAT を使用する場合は、必要な NAT 送信元 IP アドレスの数を算出する必要があります。VM あたりの最小ポートを増やす前に、少なくともその数の NAT IP アドレスを Public NAT ゲートウェイに割り当てます。

  • NAT IP アドレスの自動割り当てで Public NAT を使用する場合、VM あたりの最小ポート数を増やすと、Public NAT ゲートウェイが自動的にリージョン外部 IP アドレスを自動的に取得して割り振ります。

  • Private NAT を使用する場合は、ゲートウェイが IP アドレスを割り当てるサブネットに十分な数の IP アドレスがあることを確認してください。

VM あたりのポート数を減らす

静的ポート割り当てを使用して Cloud NAT ゲートウェイを構成しているときに、ゲートウェイの VM あたりの最小ポートを減らしても、コネクション ドレインは発生しません。確立された NAT 接続は切断されるため、クライアントは新しい TCP 接続を確立する必要があります。

動的ポート割り当てで Cloud NAT ゲートウェイを構成している場合、以下のことが成り立ちます。

  • VM あたりの最小ポート数を減らしても、既存の NAT 接続が切断されることや、NAT ゲートウェイを通過するトラフィックが中断されることはありません。
  • VM あたりの最大ポート数を減らすと、既存のすべての NAT 接続が直ちに切断され、すべての VM に割り当てられたポート数が、VM あたりの最小ポート数で指定された値に一時的にリセットされます。

ポートと接続

Cloud NAT ゲートウェイが VM 用に予約する NAT 送信元 IP アドレスと送信元ポートのタプルの数によって、VM が固有の宛先に接続できる接続数が制限されます。

  • 固有の宛先とは、宛先 IP アドレス、宛先ポート、IP プロトコル(TCP、UDP など)で構成される固有の 3 タプルのことです。

  • 接続とは、NAT の送信元 IP アドレスと送信元ポートのタプルと、固有の宛先の 3 タプルで構成される固有の 5 タプルを意味します。UDP プロトコルはコネクションレスのため、接続は固有の UDP データグラムに関連付けられた 5 タプルになります。

Cloud NAT ゲートウェイが、ポート予約手順に従って VM のポートの固定数を 1,024 で計算したとします。Cloud NAT ゲートウェイは、VM の NAT 送信元 IP アドレスと送信元ポートのタプルを 1,024 個の固有の組み合わせで予約します。Cloud NAT ゲートウェイは、固有の宛先の 3 タプルごとに 1,024 の同時接続を処理できます。ただし、Cloud NAT は、接続が終了してから 120 秒間、閉じた接続を使用不能とみなすため、同時に使用する接続数に影響する場合があります。

例:

  • ゲートウェイは、TCP プロトコルを使用するポート 80 で宛先 IP アドレス 203.0.113.99 に対して 1,024 の同時接続をサポートします。

  • ゲートウェイは、TCP プロトコルを使用するポート 443 で同じ宛先 IP アドレスに対してさらに 1,024 の同時接続をサポートします。

  • ゲートウェイは、TCP プロトコルを使用するポート 80 で異なる宛先 IP アドレスに対してさらに 1,024 の同時接続をサポートします。

複数のポートの同時再利用とエンドポイントに依存しないマッピング

宛先 IP アドレス、宛先ポート、プロトコルの宛先 3 タプルのうち、少なくとも 1 つの情報が変更されていれば、同じ NAT 送信元アドレスと送信元ポートのタプルを他の接続にも同時に使用できます。

Public NAT は、RFC 5128 のセクション 2.3 で定義されているエンドポイントに依存しないマッピングを使用します。その結果、Public NAT が、クライアント VM の複数の内部 IP アドレスとエフェメラル送信元ポート同じ NAT の送信元 IP アドレスと送信元ポートのタプルを割り当てると、クライアント VM が固有の宛先 3 タプルに対して同時に接続できる数が減る可能性があります。この状態は、クライアント VM の内部 IP アドレスが多く、同じ宛先 3 タプルに対して多数の接続が行われた場合に発生する可能性が高くなります。クライアント VM が内部 IP アドレスとエフェメラル送信元ポートから最初にパケットを送信するときに、Public NAT は次の間に多対 1 のエンドポイントに依存しないマッピングを作成します。

  • 内部 IP アドレスとエフェメラル送信元ポートのタプル
  • 固有の NAT 送信元 IP アドレスと送信元ポートのタプル

たとえば、クライアント VM がエフェメラル送信元ポート 10001 を使用して内部 IP アドレス 10.0.0.2 からパケットを送信すると、Public NAT は 10.0.0.2:10001 を割り当てます。この NAT 送信元 IP アドレスと送信元ポートのタプルは、10.0.0.2:10001 から任意の宛先 3 タプルへの後続のすべての接続に使用されます。

同じ VM が異なるエフェメラル送信元ポートを使用してパケットを送信した場合(たとえば 10.0.0.2:20002)、Public NAT は、それ以降に発生した 10.0.0.2:20002 から宛先 3 タプルへのすべての接続に NAT 送信元 IP アドレスと送信元ポートのタプルを割り当てます。Public NAT が、これらの内部 IP アドレスとエフェメラル送信元ポートのタプルの両方に、同じ NAT 送信元 IP アドレスと送信元ポートのタプルを割り当てることで、エンドポイントに依存しない競合が発生する可能性があります

より詳しい例については、エンドポイントに依存しないマッピングの競合例をご覧ください。

エンドポイントに依存しない競合を減らす

構成を変更することによって、エンドポイントに依存しない競合を減らすことができます。詳しくは、エンドポイントに依存しない競合によってパケットがドロップされるをご覧ください。

TCP 送信元ポートの再利用の遅延

Cloud NAT ゲートウェイが TCP 接続を終了した後、ゲートウェイが同じ NAT 送信元 IP アドレスと送信元ポートのタプルを同じ宛先(宛先 IP アドレス、宛先ポート、プロトコル)に再利用する前に、Google Cloud は遅延を適用します。遅延の長さは、TCP TIME_WAIT タイムアウト設定によって制御されます。

必要に応じて、この遅延を減らすか、次のいずれかの変更を行います。

  • ポート予約手順で、VM に NAT の送信元 IP アドレスと送信元ポートのタプルをより多く割り当てられるように、VM インスタンスあたりのポートの最小数を増やします。

  • VM が、同じ宛先 IP アドレスと宛先ポートへの TCP 接続を、同じプロトコルを使用して高速に開閉する必要がある場合は、Cloud NAT の代わりに、外部 IP アドレスを VM に割り当てファイアウォール ルールを使用して未承諾の上り(内向き)接続を制限します。

送信元ポートとセキュリティ

セキュリティ対策として送信元ポートのランダム化を使用する場合は、次の点を考慮する必要があります。

  • ポート予約手順で、VM に NAT の送信元 IP アドレスと送信元ポートのタプルをより多く割り当てられるように、VM インスタンスあたりのポートの最小数を増やします。VM インスタンスあたりの最小ポート数を増やすと、各 VM にポート範囲がランダムに割り当てられますが、その範囲から選択される送信元ポートは連続しています。

  • Public NAT を使用する代わりに、外部 IP アドレスを VM に割り当てます

次の例では、Cloud NAT で VM に NAT の送信元 IP アドレスと送信元ポートを予約する方法と、インターネットに送信されるパケットに NAT を実行する方法を説明します。

ポートの予約

次の例は、ポート予約手順の適用方法を示しています。

サブネットのプライマリ IP アドレス範囲に NAT を行うように Public NAT ゲートウェイが構成されているときに、そのサブネットを使用する VM にサブネットのプライマリ IP アドレス範囲のエイリアス IP 範囲が設定されていないとします。除算の結果は、最も近い整数に切り捨てます。⌊⌋ は floor(最大整数)関数で、除算の小数点以下を切り捨てます。

  • 手動割り当てを使用して 1 つの NAT IP アドレスを持つ Public NAT ゲートウェイを構成し、VM インスタンスあたりの最小ポート数を 64 と構成した場合、ゲートウェイは最大 1,008 の VM に対して NAT サービスを提供できます。

    ⌊(1 NAT IP アドレス) × (アドレスあたり 64,512 ポート) ÷ (VM あたり 64 ポート)⌋ = 1,008 VM

  • 1,008 個を超える VM をサポートする場合は、Cloud NAT ゲートウェイに 2 つ目の NAT IP アドレスを割り当てることができます。2 つの NAT IP アドレスを使用し、VM あたりの最小ポート数を 64 に維持することで、2,016 の VM をサポートできます。

    ⌊(2 NAT IP アドレス) × (アドレスあたり 64,512 ポート) ÷ (VM あたり 64 ポート)⌋ = 2,016 VM

  • VM あたりの最小ポート数を 4,096 に設定すると、各 NAT IP アドレスは 15 個の VM をサポートできます。この計算は、最も近い整数に切り捨てられます。

    ⌊(1 NAT IP アドレス) × (アドレスあたり 64,512 ポート) ÷ (VM あたり 4,096 ポート)⌋ = 15 VM

サブネットのすべての IP アドレスに NAT を実行するように、Private NAT ゲートウェイを構成するとします。

  • 作成できるサブネットの最小サイズは 8 つの IPv4 アドレスで、サブネット マスクは /29 です。最小サイズの NAT サブネットで Private NAT ゲートウェイを構成し、VM インスタンスあたりの最小ポート数を 64 に設定した場合、ゲートウェイは最大 2,016 個の VM に対して NAT サービスを提供できます。

    ⌊(2(32-29) - 4) の NAT IP アドレス × (アドレスあたり 64,512 ポート) ÷ (VM あたり 64 ポート × 2)⌋ = 2,016 VM

    前の例では、VM インスタンスあたりの最小ポート数を 1,024 に設定すると、ゲートウェイは最大 126 個の VM に NAT サービスを提供できます。

    ⌊(2(32-29) - 4) の NAT IP アドレス × (アドレスあたり 64,512 ポート) ÷ (VM あたり 1,024 ポート × 2)⌋ = 126 VM

  • NAT サブネット マスクを /28 に設定して Private NAT ゲートウェイを構成し、VM インスタンスあたりの最小ポート数を 64 と構成した場合、ゲートウェイは最大 6,048 個の VM に対して NAT サービスを提供できます。

    ⌊(2(32-28) - 4) の NAT IP アドレス × (アドレスあたり 64,512 ポート) ÷ (VM あたり 64 ポート × 2)⌋ = 6,048 VM

エンドポイントに依存しないマッピングの競合

次の例では、クライアント VM に十分な数の NAT 送信元 IP アドレスと送信元ポートのタプルがある場合でも、エンドポイントに依存しないマッピングにより、クライアント VM から同じ宛先 3 タプルへの同時接続数が減少する可能性があることを示します。

サブネットのプライマリ IP アドレス範囲に NAT を実行するように Public NAT ゲートウェイを構成したとします。そのサブネットに、プライマリ内部 IP アドレスが 10.0.0.2 のネットワーク インターフェースを持つクライアント VM を作成しました。この VM のネットワーク インターフェースには外部 IP アドレスが割り当てられていません。

  1. VM が次の特性の接続を開始します。

    • 送信元の内部 IP アドレスとポート: 10.0.0.2:10001
    • 宛先 3 タプル: 203.0.113.1:80(TCP を使用)
    • Public NAT が使用する NAT 送信元 IP アドレスと送信元ポートのタプル: 192.0.2.10:30009
  2. VM が次の特性の 2 番目の接続を開始します。

    • 送信元の内部 IP アドレスとポート: 10.0.0.2:10002
    • 宛先 3 タプル: 203.0.113.2:80(TCP を使用)
    • Public NAT は、この接続に同じ NAT 送信元 IP アドレスと送信元ポートのタプル 192.0.2.10:30009 を使用する可能性があります。異なるクライアント IP アドレスとエフェメラル送信元ポートに同じ NAT 送信元 IP アドレスと送信元ポートのタプルを使用することは可能です。
  3. 最初と 2 番目の接続はともにアクティブですが、Public NAT は次の特性の TCP 接続を開始することはできません。

    • 最初の接続と同じ送信元の内部 IP アドレスとポート: 10.0.0.2:10001
    • 2 番目の接続と同じ宛先 3 タプル: 203.0.113.2:80(TCP を使用)

    最初の接続で確立されたエンドポイントに依存しないマッピングによって、10.0.0.2:10001 からのすべての接続は、同じ NAT 送信元 IP アドレスと送信元ポートのタプル 192.0.2.10:30009 を使用する必要があるため、3 番目の接続の試行はエンドポイントに依存しない競合エラーで失敗します。しかし、192.0.2.10:30009 は、すでに 203.0.113.2:80 への 2 番目の TCP 接続によってすでに使用されています。

  4. この例の後続の接続が正常に確立するには、次のいずれかの条件を満たす必要があります。

    • 最初の TCP 接続が終了している。接続を終了すると、10.0.0.2:10001192.0.2.10:30009 の間のエンドポイントに依存しないマッピングが解除されるため、3 番目の接続を別の NAT 送信元 IP アドレスと送信元ポートのタプルにマッピングし、TCP を使用して 203.0.113.2:80 と通信できます。
    • 2 番目の TCP 接続が終了している。接続を終了すると、10.0.0.2:10001 が解放され、NAT 送信元 IP アドレスと送信元ポート 192.0.2.10:30009 を使用して、TCP で 203.0.113.2:80 と通信できるようになります。
    • 3 番目の接続で別のエフェメラル(内部)送信元ポートを選択する。この例では、エンドポイントに依存しないマッピングにより、内部 NAT 送信元 IP アドレスと送信元ポート 10.0.0.2:1000110.0.0.2:10002 に多対 1 のマッピングが確立され、203.0.113.2:80 との TCP 接続で 192.0.2.10:30009 が使用されています。3 番目の接続が 1000110002 の両方と異なるエフェメラル送信元ポートを使用する場合、別の NAT 送信元 IP アドレスと送信元ポートを 203.0.113.2:80 との TCP 接続に使用できる可能性があります。
    • エンドポイントの依存性をオフに切り替えます。この切り替えにより、10.0.0.2:10001 からの新しい接続では 192.0.2.10:30009 を使用する必要がなくなり、別の NAT 送信元 IP アドレスとポートを使用できるようになります。

競合を回避する手法については、エンドポイントに依存しない競合の低減をご覧ください。

次のステップ