Cloud NAT の概要

Cloud NAT(ネットワーク アドレス変換)を使用すると、外部 IP アドレスを持たない特定のリソースからインターネットへの送信接続が可能になります。

Cloud NAT を使用すると、次のリソースからの発信接続が可能になります。

アーキテクチャ

Cloud NAT はソフトウェア定義の分散マネージド サービスです。プロキシ VM やアプライアンスをベースにしていません。Cloud NAT は、Virtual Private Cloud(VPC)ネットワークを強化する Andromeda ソフトウェアを構成します。これにより、外部 IP アドレスを持たない VM に送信元ネットワーク アドレス変換(送信元 NAT または SNAT)を提供します。また、Cloud NAT は、確立された受信レスポンス パケットに対してのみ宛先ネットワーク アドレス変換(宛先 NAT または DNAT)を提供します。

従来の NAT と Cloud NAT の比較(クリックして拡大)
従来の NAT と Cloud NAT の比較(クリックして拡大)

Cloud NAT により、ネクストホップがデフォルトのインターネット ゲートウェイである VPC の静的ルートとともに送信 NAT が実装されます。基本的な構成では、VPC ネットワークのデフォルト ルートがこの要件を満たしています。

Cloud NAT では、インターネットからの未承諾の受信接続は実装されません。DNAT は、送信パケットへの応答として受信するパケットに対してのみ実行されます。

利点

Cloud NAT には次の利点があります。

  • セキュリティ

    個々の VM に外部 IP アドレスを割り振る必要がなくなります。下り(外向き)ファイアウォール ルールに従い、外部 IP アドレスを持たない VM はインターネット上の宛先にアクセスできます。たとえば、更新のダウンロードやプロビジョニングを完了するためだけに VM にインターネット アクセスが必要な場合です。

    手動 NAT IP アドレス割り当てで Cloud NAT ゲートウェイを構成すると、共通する外部の送信元 IP アドレスのセットを宛先と安全に共有して Google Cloud Storage とやり取りできます。たとえば、宛先のサービスが既知の外部 IP アドレスからの接続のみを許可できます。

  • 可用性サービス提供状況

    Cloud NAT はソフトウェア定義の分散マネージド サービスです。プロジェクト内の VM や単一の物理ゲートウェイ デバイスには依存しません。Cloud Router に NAT ゲートウェイを構成します。これにより、指定した構成パラメータを保持する、NAT のコントロール プレーンが提供されます。Google Cloud は、Google Cloud VM を実行する物理マシンでプロセスを実行して維持します。

  • スケーラビリティ

    Cloud NAT は、使用する NAT IP アドレスの数を自動的にスケーリングするように構成できます。Cloud NAT は、自動スケーリングが有効になっている VM など、マネージド インスタンス グループに属する VM をサポートします。

  • パフォーマンス

    Cloud NAT は VM ごとのネットワーク帯域幅を縮小しません。Cloud NAT は、Google の Andromeda ソフトウェア定義ネットワーキングによって実装されています。詳細については、Compute Engine のドキュメントのネットワーク帯域幅をご覧ください。

仕様

Cloud NAT は、次の送信元からのインターネットに送信されるパケットに NAT を実行するようにインターネットを構成できます。

  • Compute Engine VM のネットワーク インターフェースのプライマリ内部 IP アドレス(ネットワーク インターフェースに外部 IP アドレスが割り振られていない場合)。ネットワーク インターフェースに外部 IP アドレスが割り振られている場合、Google Cloud は、送信元がネットワーク インターフェースのプライマリ内部 IP アドレスに一致するパケットに対して 1 対 1 の NAT を自動的に実行します。これは、ネットワーク インターフェースが Google Cloud のインターネット アクセス要件を満たしているためです。外部 IP アドレスを持つインターフェースがある場合は、常にそれが優先され、Cloud NAT を使用せずに常に 1 対 1 の NAT が実行されます。

  • VM のネットワーク インターフェースに割り当てられたエイリアス IP 範囲。ネットワーク インターフェースに外部 IP アドレスが割り当てられている場合でも、インターフェースのエイリアス IP 範囲から送信されるパケットに NAT を実行するように、Cloud NAT ゲートウェイを構成できます。インターフェースの外部 IP アドレスでは、エイリアス IP アドレスに対して 1 対 1 の NAT は実行されません。

  • GKE クラスタの場合、特定の状況下でクラスタに外部 IP アドレスがある場合でも Cloud NAT のサービスを利用できることがあります。詳細については、GKE の相互作用をご覧ください。

Cloud NAT により、送信接続とそれに対する受信レスポンスが可能になります。各 Cloud NAT ゲートウェイは、下り(外向き)に送信元 NAT を実行し、確立済みのレスポンス パケットに宛先 NAT を実行します。

Cloud NAT では、ファイアウォール ルールで許可されている場合でも、インターネットからの未承諾の受信リクエストは許可されません。詳細については、該当する RFC をご覧ください。

各 Cloud NAT ゲートウェイは、1 つの VPC ネットワーク、リージョン、Cloud Router に関連付けられます。Cloud NAT ゲートウェイと Cloud Router は、データプレーンに関与していないコントロール プレーンを提供するため、パケットは Cloud NAT ゲートウェイまたは Cloud Router を通過しません。

ルートとファイアウォール ルール

Cloud NAT は、ネクストホップがデフォルトのインターネット ゲートウェイであるカスタム静的ルートに依存します。Cloud NAT ゲートウェイを完全に使用するには、VPC には、ネクストホップがデフォルトのインターネット ゲートウェイであるデフォルト ルートが必要です。詳細については、ルートの相互作用をご覧ください。

Cloud NAT には Google Cloud のファイアウォール ルールの要件はありません。ファイアウォール ルールは、Cloud NAT ゲートウェイではなく、Compute Engine VM のネットワーク インターフェースに直接適用されます。

NAT IP アドレスとの間の接続を許可する特別なファイアウォール ルールを作成する必要はありません。Cloud NAT ゲートウェイが VM のネットワーク インターフェースに NAT を提供する場合、NAT の前に、ネットワーク インターフェースのパケットに対して該当する下り(外向き)ファイアウォール ルールが評価されます。また、NAT によって処理された後に、上り(内向き)ファイアウォール ルールが評価されます。

サブネット IP アドレス範囲の適用範囲

Cloud NAT ゲートウェイは、Compute Engine VM のネットワーク インターフェースに外部 IP アドレスが割り当てられていない限り、そのネットワーク インターフェースから送信されたパケットに NAT サービスを提供できます。GKE クラスタの場合、特定の状況でクラスタノードに外部 IP アドレスがある場合でも Cloud NAT のサービスを利用できることがあります。詳細については、GKE の相互作用をご覧ください。

Cloud NAT ゲートウェイは、VM ネットワーク インターフェースのプライマリ内部 IP アドレス、エイリアス IP 範囲、またはその両方に NAT を実施するように構成できます。この構成を行うには、ゲートウェイが適用されるサブネット IP アドレス範囲を選択します。

次のものに対して NAT を実施提供するように Cloud NAT ゲートウェイを構成できます。

  • リージョン内のすべてのサブネットのプライマリおよびセカンダリ IP アドレス範囲。ネットワーク インターフェースがリージョンのサブネットを使用している対象 VM のプライマリ内部 IP アドレスとすべてのエイリアス IP 範囲に対して、単一の Cloud NAT ゲートウェイが NAT を実施します。このオプションは、リージョンごとに、正確に 1 つの NAT ゲートウェイを使用します。

  • リージョン内のすべてのサブネットのプライマリ IP アドレス範囲。ネットワーク インターフェースがリージョンのサブネットを使用している対象 VM のプライマリ内部 IP アドレスとエイリアス IP 範囲に対して、単一の Cloud NAT ゲートウェイが NAT を提供します。リージョン内に追加の Cloud NAT ゲートウェイを作成して、対象 VM のサブネットのセカンダリ IP アドレス範囲からエイリアス IP 範囲に NAT を実施できます。

  • カスタム サブネット IP アドレス範囲。Cloud NAT の割り当てと上限に従い、必要な数の Cloud NAT ゲートウェイを作成できます。各ゲートウェアで処理するサブネットのプライマリ IP アドレスまたはセカンダリ IP アドレス範囲を選択します。

帯域幅

Cloud NAT ゲートウェイを使用しても、VM が使用できる送信または受信帯域幅の総量は変わりません。帯域幅の仕様はマシンタイプによって異なります。詳しくは、Compute Engine のドキュメントでのネットワーク帯域幅をご覧ください。

複数のネットワーク インターフェースを持つ VM

VM に複数のネットワーク インターフェースを構成する場合、各インターフェースは別々の VPC ネットワークに属している必要があります。その結果、次のようになります。

  • Cloud NAT ゲートウェイは、VM の 1 つの単一のネットワーク インターフェースにのみ適用されます。個別の Cloud NAT ゲートウェイは同じ VM に NAT を提供できます。この場合、各ゲートウェイが個々の別個のインターフェースに適用されます。

  • 複数のネットワーク インターフェースを持つ VM の場合、外部 IP アドレスが割り振られているインターフェースは Cloud NAT の対象外となります。適切なサブネット IP アドレス範囲に適用されるように Cloud NAT ゲートウェイを構成している場合、外部 IP アドレスを持たないインターフェースは NAT の対象になります。

NAT IP アドレスとポート

Cloud NAT ゲートウェイを作成するときに、ゲートウェイがリージョン外部 IP アドレスを自動的に割り振るように選択できます。また、ゲートウェイに一定数のリージョン外部 IP アドレスを手動で割り当てることもできます。各メソッドの詳細については、NAT IP アドレスをご覧ください。

各 Cloud NAT ゲートウェイが NAT サービスを提供する各 VM に予約する送信元ポートの数を構成できます。静的ポートの割り当てを構成できます。この場合、各 VM に同じ数のポートが予約されます。あるいは、動的ポートの割り当てプレビュー)を構成できます。この場合、予約済みポートの数は、指定した上限と下限の間で変更できます。

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

詳細については、ポートとポートの予約手順をご覧ください。

適用される RFC

Cloud NAT は、RFC 5128 で定義されているエンドポイントに依存しないマッピングとエンドポイントに依存するフィルタリングをサポートしています。エンドポイントに依存しないマッピングを有効または無効にすることができます。NAT ゲートウェイを作成すると、エンドポイントに依存しないマッピングはデフォルトで無効になっています。

エンドポイントに依存しないマッピングでは、VM が特定の内部 IP アドレスとポートのペアから複数の異なる宛先にパケットを送信すると、ゲートウェイはパケットの宛先に関係なくそれらすべてのパケットを同じ NAT IP アドレスとポートのペアにマッピングします。エンドポイントに依存しないマッピングの詳細と影響については、同時ポートの再利用とエンドポイントに依存しないマッピングをご覧ください。

エンドポイント依存のフィルタリングでは、インターネットからのレスポンス パケットは、VM がパケットを送信した IP アドレスとポートから受信した場合にのみ許可されます。フィルタリングは、エンドポイントのマッピングの種類に関係なく、エンドポイントに依存します。この機能は常にオンになっており、ユーザーが構成することはできません。

ポートと接続の関係の詳細については、ポートと接続NAT フローの例をご覧ください。

Cloud NAT は、RFC 3489 で定義されているポート制限付きコーン NAT です。

NAT トラバーサル

エンドポイントに依存しないマッピングが有効で、独自の STUN サーバーまたは TURN サーバーをデプロイしている場合、Cloud NAT は STUN や TURN などの一般的な NAT 走査プロトコルと互換性があります。

  • STUN(NAT のセッション走査ユーティリティ、RFC 5389)は、通信チャネルが確立された NAT の背後にある VM 間の直接通信を可能にします。
  • TURN(NAT 周辺のリレーを使用する走査、RFC 5766)は、サーバーが外部 IP アドレスを持つ 3 番目のサーバーを経由して NAT の背後にある VM 間の通信を許可します。各 VM はサーバーの外部 IP アドレスに接続し、そのサーバーが 2 つの VM 間の通信をリレーします。TURN はより堅牢ですが、より多くの帯域幅とリソースを消費します。

NAT タイムアウト

Cloud NAT ゲートウェイは次のタイムアウトを使用します。デフォルトのタイムアウト値を変更して、ポートの再利用率を増減できます。タイムアウト値は、Cloud NAT リソースの効率的な使用と、アクティブな接続、フロー、セッションの中断とのバランスを取るものです。

タイムアウト 説明 Cloud NAT のデフォルト 構成可能

UDP マッピングのアイドル タイムアウト

RFC 4787 REQ-5

UDP フローによってエンドポイントへのトラフィック送信が停止するまでの時間を秒単位で指定します。これにより、Cloud NAT マッピングが削除されます。

UDP マッピングのアイドル タイムアウトは、トラフィックの送受信を停止する 2 つのエンドポイントに影響します。また、レスポンスに時間がかかるエンドポイントや、ネットワーク レイテンシが増加した場合にも影響します。

指定したタイムアウト値を増やすと、ポートの再利用率を下げることができます。タイムアウト値を大きくすると、ポートで長時間接続が維持され、特定の UDP ソケット経由のトラフィックの一時停止を防ぐことができます。

30 秒

TCP 確立済み接続のアイドル タイムアウト

RFC 5382 REQ-5

接続がアイドル状態になるまでの秒数を指定します。この期間が経過すると Cloud NAT マッピングが削除されます。

TCP 確立済み接続のアイドル タイムアウトは、応答に時間がかかるエンドポイントや、ネットワークのレイテンシが増加した場合に影響します。

TCP 接続を開き、キープアライブ メカニズムを使用せずに接続を長時間開いたままにする場合は、タイムアウト値を増やすことができます。

1,200 秒(20 分)

TCP 一時接続のアイドル タイムアウト

RFC 5382 REQ-5

TCP 接続を半開状態で維持できる時間を指定します。この期間が経過すると Cloud NAT マッピングを削除できます。

外部エンドポイントが指定された時間よりも時間がかかる場合、またはネットワーク レイテンシが増加した場合、TCP 一時接続のアイドル タイムアウトはエンドポイントに影響します。TCP 接続確立時のアイドル タイムアウトとは異なり、TCP 一時接続のアイドル タイムアウトは半開接続にのみ影響します。

30 秒

注: このタイムアウトに設定した値に関係なく、Cloud NAT では、NAT 送信元 IP アドレスと送信元ポートのタプルで新しい接続が処理されるようになるまでに最大で 30 秒ほどかかります。

TCP TIME_WAIT タイムアウト

RFC 5382 REQ-5

接続の有効期限が切れた後に、完全に閉じた TCP 接続を Cloud NAT マッピングに維持する時間を秒単位で指定します。

TCP TIME_WAIT タイムアウトにより、閉じた TCP 接続に属し、再送信された無効なパケットを内部エンドポイントが受信しないようにすることができます。

タイムアウト値を減らすと、無関係な閉じた接続から再送信されるパケットを受信する可能性がありますが、Cloud NAT ポートの再利用率を改善できます。

120 秒

注: このタイムアウトに設定した値に関係なく、Cloud NAT では、NAT 送信元 IP アドレスと送信元ポートのタプルで新しい接続が処理されるようになるまでに最大で 30 秒ほどかかります。

ICMP のマッピングのアイドル タイムアウト

RFC 5508 REQ-2

トラフィック フローがない Internet Control Message Protocol(ICMP)の Cloud NAT マッピングが終了するまでの時間を秒単位で指定します。

ICMP のマッピングのアイドル タイムアウトは、指定した時間よりもエンドポイントが応答するのに時間がかかる場合か、ネットワーク レイテンシが増加した場合に、エンドポイントに影響します。

30 秒

プロダクトの相互作用

以下のセクションでは、Cloud NAT と他の Google Cloud プロダクト間の重要なやり取りについて説明します。

ルートの相互作用

Cloud NAT ゲートウェイは、ネクストホップがデフォルトのインターネット ゲートウェイであるルートのみを使用できます。各 VPC ネットワークはデフォルト ルートで始まり、宛先は 0.0.0.0/0、ネクストホップはデフォルトのインターネット ゲートウェイです。重要な基本背景情報については、ルートの概要をご覧ください。

次の例は、Cloud NAT ゲートウェイが動作しなくなる原因を示します。

  • ネクストホップが他のタイプのカスタム静的ルートのネクストホップに設定されたカスタム静的ルートを作成すると、宛先 IP アドレスがルートの宛先と一致するパケットは、デフォルトのインターネット ゲートウェイではなく、ネクストホップに送信されます。たとえば、NAT、ファイアウォール、プロキシ ソフトウェアを実行する VM インスタンスを使用する場合は、ネクストホップとして VM にトラフィックを転送するカスタム静的ルートを作成する必要があります。ネクストホップ VM には外部 IP アドレスが必要です。したがって、ネクストホップ VM を信頼する VM からのトラフィックも、ネクストホップ VM 自体も、Cloud NAT を使用できません。

  • ネクストホップが Cloud VPN トンネルのカスタム静的ルートを作成した場合、Cloud NAT はそのルートを使用しません。たとえば、宛先 0.0.0.0/0 を指定したカスタムの静的ルートとネクストホップ Cloud VPN トンネルは、デフォルトのインターネット ゲートウェイではなく、そのトンネルにトラフィックを転送します。その結果、Cloud NAT ゲートウェイはそのルートを使用できなくなります。これは、0.0.0.0/1128.0.0.0/1 など、具体的な宛先でも同様です。

  • オンプレミス ルーターが Cloud VPN トンネルまたは Cloud 相互接続のアタッチメント(VLAN)を管理する Cloud Router にカスタムの動的ルートをアドバタイズする場合、Cloud NAT ゲートウェイはそのルートを使用できません。たとえば、オンプレミス ルーターが宛先 0.0.0.0/0 のカスタム動的ルートをアドバタイズする場合、0.0.0.0/0 は Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)に転送されます。これは、0.0.0.0/1128.0.0.0/1 など、具体的な宛先でも同様です。

限定公開の Google アクセスの相互作用

Cloud NAT は、選択した Google API とサービスの外部 IP アドレスに送信されたトラフィックに対して NAT を実行しません。Cloud NAT ゲートウェイをプライマリまたはセカンダリのサブネット範囲に適用するように構成すると、Google Cloud によって、サブネット IP アドレス範囲での限定公開の Google アクセスが自動的に有効になります。ゲートウェイがサブネットの範囲に NAT を実施している限り、限定公開の Google アクセスはその範囲に対して有効であり、手動で無効にすることはできません。

Cloud NAT ゲートウェイは、限定公開の Google アクセスの動作を変更しません。詳細については、限定公開の Google アクセスをご覧ください。

共有 VPC の相互作用

共有 VPC を使用すると、1 つの組織内の複数のサービス プロジェクトで、ホスト プロジェクト内の共通の共有 VPC ネットワークを使用できます。共有 VPC ネットワークを使用するサービス プロジェクトで VM に NAT を実施するには、ホスト プロジェクトに Cloud NAT ゲートウェイを作成する必要があります。

VPC ネットワーク ピアリングの相互作用

Cloud NAT ゲートウェイは、単一のリージョンと単一 VPC ネットワーク内のサブネット IP アドレス範囲にと関連付けられています。1 つの VPC ネットワークで作成された Cloud NAT ゲートウェイは、VPC ネットワーク ピアリングで接続された他の VPC ネットワーク内の VM に、NAT を提供できません。ピア ネットワーク内の VM がゲートウェイと同じプロジェクトに存在する場合も同様です。ピアリングされている場合も含む)。ネットワークはゲートウェイと同じリージョンにあります。

GKE の相互作用

Cloud NAT ゲートウェイは、限定公開クラスタのノードと Pod に対して NAT を実行できます。これは VPC ネイティブ クラスタの一種です。クラスタが使用するサブネットのために、少なくとも次のサブネット IP アドレス範囲に適用するように Cloud NAT ゲートウェイを構成する必要があります。

  • サブネットのプライマリ IP アドレス範囲(ノードで使用)
  • サブネット クラスタ内の Pod に使用されるセカンダリ IP アドレス範囲
  • クラスタ内のサービスに使用されるサブネット セカンダリ IP アドレス範囲

限定公開クラスタ全体に NAT を提供する最も簡単な方法は、クラスタのサブネットのすべての IP アドレス範囲に適用するように Cloud NAT ゲートウェイを構成することです。

VPC ネイティブ クラスタでサブネット IP アドレス範囲を使用する方法に関する背景情報については、VPC ネイティブ クラスタの IP 範囲をご覧ください。

Cloud NAT ゲートウェイは、限定公開クラスタに対して NAT を実施するように構成されている場合、各ノード VM に NAT の送信元 IP アドレスと送信元ポートを予約します。Pod IP アドレスは各ノード VM に割り当てられたエイリアス IP 範囲として実装されるため、これらの NAT 送信元アドレスと送信元ポートは Pod で使用できます。GKE VPC ネイティブ クラスタは、複数の IP アドレス(/32 より小さいネットマスク)を含むエイリアス IP 範囲を各ノードに常に割り振ります。したがって、Cloud NAT のポート予約手順では、ノードあたり 1,024 個以上の NAT 送信元 IP アドレスと送信元ポートを予約します。Pod IP アドレス範囲と VPC ネイティブ クラスタについては、Pod のサブネット セカンダリ IP アドレス範囲をご覧ください。

Cloud NAT とは独立して、クラスタの IP マスカレード構成を変更していない限り、Pod がインターネットにパケットを送信したときに、GKE は各ノードで実行されているソフトウェアを使用して SNAT を実行します。Pod からの下り(外向き)トラフィックを細かく制御する必要がある場合は、ネットワーク ポリシーを使用できます。

一定の条件のもとでは、Cloud NAT は限定公開以外の VPC ネイティブ クラスタにも役立ちます。限定公開以外のクラスタ内のノードには外部 IP アドレスがあるため、ノードのプライマリ内部 IP アドレスから送信されたパケットは Cloud NAT で処理されません。ただし、次の条件に該当する場合、非プライベート クラスタ内の Pod ポッドから送信されたパケットは、Cloud NAT ゲートウェイで処理できます。

  • VPC ネイティブ クラスタの場合、Cloud NAT ゲートウェイがクラスタの Pod ポッドのセカンダリ IP アドレス範囲に適用されます。

  • クラスタの IP マスカレード構成は、Pod からインターネットに送信されるパケットのクラスタ内で SNAT を実行するように構成されていません。

Cloud Load Balancing の相互作用

Google Cloud の外部ロードバランサとヘルスチェック システムは特別なルートを使用して VM と通信します。バックエンド VM は外部 IP アドレスを必要とせず、Cloud NAT ゲートウェイはロードバランサとヘルスチェックの通信を管理しません。詳細については、Cloud Load Balancing の概要ヘルスチェックの概要をご覧ください。

次の例は、Cloud NAT のコンセプトを示しています。

基本 NAT 構成

Cloud NAT(クリックして拡大)
Cloud NAT(クリックして拡大)

この例では、

  • nat-gw-us-east ゲートウェイは、us-east1 リージョンの subnet-1 のプライマリ IP アドレス範囲に適用するために構成されています。外部 IP アドレスを持たないネットワーク インターフェースの VM は、プライマリ内部 IP アドレスを使用するか、subnet-110.240.0.0/16 のプライマリ IP アドレス範囲からエイリアス IP 範囲を使用して、インターネットにトラフィックを送信できます。

  • ネットワーク インターフェースが外部 IP アドレスを持たず、プライマリ内部 IP アドレスが subnet-2 に置かれている VM は、Cloud NAT ゲートウェイがそのサブネットの IP アドレス範囲に適用されないため、インターネットにアクセスできません。

  • nat-gw-eu ゲートウェイは、europe-west1 リージョンの subnet-3 のプライマリ IP アドレス範囲に適用するために構成されています。外部 IP アドレスを持たないネットワーク インターフェースの VM は、プライマリ内部 IP アドレスを使用するか、subnet-3192.168.1.0/24 のプライマリ IP アドレス範囲からエイリアス IP 範囲を使用して、インターネットにトラフィックを送信できます。

GKE の例

Cloud NAT と GKE(クリックして拡大)
Cloud NAT と GKE(クリックして拡大)

この例では、コンテナで NAT 変換を行います。すべてのコンテナと GKE ノードで NAT を有効にするには、NAT 候補としてサブネット 1 のすべての IP アドレス範囲を選択する必要があります。container1 または container2 に対してのみ NAT を有効にすることはできません。

次のステップ