Cloud NAT の概要

クラウド NAT(ネットワーク アドレス変換)により、外部 IP アドレスのない Google Cloud VM インスタンスと非公開の Google Kubernetes Engine(GKE)クラスタが、パケットをインターネットに送信し、対応する応答パケットを受信できるようになります。

アーキテクチャ

Cloud NAT は、分散型でソフトウェア定義のマネージド サービスです。プロキシ VM やアプライアンスには依存しません。Cloud NAT は、VPC ネットワークの機能を支える Andromeda ソフトウェアを構成します。これにより、外部 IP アドレスを持たない VM に対して送信元ネットワーク アドレス変換(SNAT)も行うことができます。Cloud 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 アドレスのセットを宛先のグループと確実に共有できます。たとえば、宛先サービスは既知の外部 IP アドレスからの接続のみを許可します。

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

  • スケーラビリティ: Cloud NAT は、使用する NAT IP アドレスの数を自動的に調整するように構成され、自動スケーリングが有効のものを含め、管理対象インスタンス グループに属する VM をサポートします。

  • パフォーマンス: Cloud NAT は VM ごとのネットワーク帯域幅を縮小しません。Cloud NAT は、Google の Andromeda ソフトウェア定義ネットワーキングと直接連携しています。

仕様

  • クラウド NAT を構成すると、次の送信元からのパケットに NAT を適用してインターネットへ送信できます。

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

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

  • Cloud NAT により、こうした接続への送信と確立済みのインバウンド レスポンスが可能になります。各 Cloud NAT ゲートウェイは、確立済み応答パケットの送信元ネットワーク アドレス変換(SNAT)と宛先ネットワーク アドレス変換(DNAT)を実行します。

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

  • 各 Cloud NAT ゲートウェイは、単一の 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 ゲートウェイは、VM のネットワーク インターフェースに外部 IP アドレスが割り当てられていない限り、そのネットワーク インターフェースから送信されたパケットに NAT サービスを提供できます。Cloud NAT ゲートウェイは、VM ネットワーク インターフェースのプライマリ内部 IP アドレス、エイリアス IP 範囲、またはその両方に NAT を実施するように構成できます。この構成を行うには、ゲートウェイが適用されるサブネット IP アドレス範囲を選択します。

Cloud NAT ゲートウェイを設定して、NAT の対象を次のように設定できます。

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

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

  • カスタム サブネット IP 範囲: Cloud NAT の割り当てと上限に従い、必要に応じて、いくつでも Cloud NAT ゲートウェイを作成できます。サブネットのプライマリ IP 範囲またはセカンダリ IP 範囲は、各ゲートウェイで指定されます。

帯域幅

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

複数の NIC を持つ VM

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

  • Cloud NAT ゲートウェイは、VM の 1 つのネットワーク インターフェースにのみ適用できます。別々の Cloud NAT ゲートウェイで同じ VM に NAT を実施できます。各ゲートウェイは別々のインターフェースに適用されます。

  • マルチ NIC VM の 1 つのインターフェースは外部 IP アドレスを持つため、もう一方のインターフェースに外部 IP アドレスがなく、適切なサブネット IP アドレス範囲に適用する Cloud NAT ゲートウェイが構成されていても Cloud NAT は使用できません。

NAT IP アドレスとポート

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

各 Cloud NAT ゲートウェイが NAT サービスを提供する各 VM に予約する送信元ポートの数を構成できます。NAT を実施する VM は、ゲートウェイが提供するように構成されているサブネット IP アドレス範囲によって決まります。詳細については、ポートポートの予約手順をご覧ください。

適用される RFC

Cloud NAT は、RFC 5128 に基づいてエンドポイント独立マッピング、エンドポイント依存フィルタリング NAT、および RFC 3489 に基づいてポート制限付きコーン NAT に分類されます。

Cloud NAT ゲートウェイは、VM から送信されたパケットの外向きで SNAT を行うときに、一意の宛先(宛先 IP アドレス、宛先ポート、プロトコル)ごとに同じ送信元アドレスと送信元ポートのタプルを再利用できます。Cloud NAT ゲートウェイは、送信元 IP アドレスと送信元ポートが対応する送信リクエスト パケットの宛先 IP アドレスと宛先ポートと一致する、確立された受信レスポンス パケットに対してのみ DNAT を実行します。ポートと接続の関係の詳細については、ポートと接続NAT フローの例をご覧ください。

NAT 走査

Cloud 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 のデフォルト 構成可能
UDP マッピングのアイドル タイムアウト
RFC 4787 REQ-5
30 秒
TCP 確立済みコネクションのアイドル タイムアウト
RFC 5382 REQ-5
1,200 秒(20 分)
TCP 一時的コネクションのアイドル タイムアウト
RFC 5382 REQ-5
30 秒
ICMP マッピング アイドル タイムアウト
RFC 5508 REQ-2
30 秒
新しい TCP コネクションで 5 タプルを再使用する前の保留時間
(送信元アドレスと送信元ポートのタプルと宛先アドレス、宛先ポート、プロトコルの組み合わせ)
120 秒(2 分) ×
詳細については、TCP 接続の送信元ポートの再使用をご覧ください。

サービスの相互作用

以下のセクションでは、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 相互接続のアタッチメント(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 アクセスはその範囲に対して有効であり、手動で無効にすることはできません。

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

共有 VPC の相互作用

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

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

Cloud NAT ゲートウェイは、1 つのリージョンと 1 つの VPC ネットワークのサブネット IP アドレス範囲に関連付けられます。ピアリングされたネットワーク内の VM がゲートウェイと同じリージョンにある場合でも、1 つの VPC ネットワークで作成された Cloud NAT ゲートウェイは、VPC ネットワーク ピアリングを使用して接続された他の VPC ネットワーク内の VM に NAT を実施できません。

GKE の相互作用

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

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

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

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

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

クラスタの IP マスカレード構成を変更していない限り、Cloud NAT に関係なく、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 アドレスまたはプライマリ IP アドレス範囲のエイリアス IP 範囲(subnet-110.240.0.0/16)を使用してインターネットにトラフィックを送信できます。

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

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

GKE の例

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

上記の例では、コンテナを NAT 変換します。すべてのコンテナと GKE ノードで NAT を有効にするには、サブネット 1 のすべての IP 範囲を NAT 候補として選択する必要があります。container1 または container2 のどちらかだけに NAT を適用することはできません。

次のステップ