Cloud NAT ルール

NAT ルール機能を使用すると、Cloud NAT を使用してインターネットに接続する方法を定義するアクセスルールを作成できます。NAT ルールは、宛先アドレスに基づいて送信元 NAT をサポートします。

NAT ルールを使用せずに NAT ゲートウェイを構成すると、その NAT ゲートウェイを使用する VM は、同じ NAT IP アドレスセットを使用してすべてのインターネット アドレスに到達します。Cloud NAT を通過するパケットをより細かく制御する必要がある場合は、NAT ルールを追加できます。NAT ルールは、一致条件と対応するアクションを定義します。NAT ルールを指定すると、各パケットが NAT ルールと照合されます。パケットがルールに設定された条件と一致する場合、その一致に対応するアクションが行われます。

Cloud NAT ルールの構成例

次の例は、少数の IP アドレスからのアクセスのみが宛先によって許可される場合に、NAT ルールを使用する方法を示しています。プライベート サブネット内の Google Cloud VM からこのような宛先へのトラフィックは、許可された IP アドレスでのみソース NAT 変換することをおすすめします。これらの IP アドレスは他の宛先に使用しないことをおすすめします。

VPC ネットワーク test のリージョン A にある Subnet-110.10.10.0/24)の VM に対しては、次の要件を考慮してください。

  • これらの VM が宛先 198.51.100.20/30 にトラフィックを送信するには、NAT IP アドレス 203.0.113.20 を使用する必要があります。
  • これらの VM が宛先 198.51.100.30 または 198.51.100.31 にトラフィックを送信するには、NAT IP アドレス 203.0.113.30 を使用する必要があります。
  • これらの VM が他のインターネット宛先にトラフィックを送信するには、NAT IP アドレス 203.0.113.40 を使用する必要があります。

この VPC ネットワークには、同じリージョン内に 2 つの追加サブネットが含まれています。これらの VM が宛先にトラフィックを送信するには、NAT IP アドレス 203.0.113.10 を使用する必要があります。

2 つの Cloud NAT ゲートウェイを使用した Cloud NAT の構成。
2 つの Cloud NAT ゲートウェイを使用した Cloud NAT の構成(クリックして拡大)

この例では NAT ルールを使用できますが、サブネット Subnet-110.10.10.0/24)には他のサブネットとは異なる NAT ルールがあるため、2 つの NAT ゲートウェイが必要です。この構成は次の手順に沿って作成します。

  1. NAT IP アドレス 203.0.113.40Subnet-1 用に Cloud NAT Gateway 1 という名前のゲートウェイを作成し、次のルールを追加します。
    1. Cloud NAT Gateway 1 の NAT ルール 1: 宛先が 198.51.100.20/30 の場合、203.0.113.20 で送信元 NAT を使用します。
    2. Cloud NAT Gateway 1 の NAT ルール 2: 宛先が 198.51.100.30 または 198.51.100.31 の場合、203.0.113.30 で送信元 NAT を使用します。
  2. リージョンの他のサブネット用に Cloud NAT Gateway 2 というゲートウェイを作成し、NAT IP アドレスを 203.0.113.10 として割り当てます。この手順では NAT ルールは必要ありません。

NAT ルールの仕様

NAT ルールを使用する前に、次の仕様に注意してください。

  • ルール番号は、NAT ルールを一意に識別するものです。2 つのルールに同じルール番号を設定することはできません。
  • 各 NAT 構成にはデフォルトのルールがあります。
    • 同じ NAT 構成で他の NAT ルールが一致しない場合、デフォルト ルールが適用されます。
    • デフォルト ルールのルール番号は 65001 です。
    • デフォルト ルールの宛先 IP CIDR 範囲は 0.0.0.0/0 です。
  • Cloud NAT ルールは、NAT IP 割り振りオプションの値が MANUAL_ONLY の場合のみサポートされます。
  • 特定のルールで構成された IP アドレスはすべて同じティアのものである必要があります。

    同じルール(デフォルト ルールを含む)内にプレミアム ティアの IP アドレスとスタンダード ティアの IP アドレスを混在させることはできません。

  • 一致条件の宛先 IP CIDR 範囲は、NAT ルール間で重複しないようにする必要があります。任意のパケットに一致するルールは 1 つだけです。

    宛先 IP CIDR 範囲が 0.0.0.0/0 の NAT ルールは、デフォルト ルールで使用されている範囲のため、作成できません。

  • NAT ルール間で NAT IP アドレスが重複しないようにする必要があります。

  • ルールには、空でない Active IP アドレスまたは空でない Drain IP アドレスが必要です。ルールに空の Active IP アドレスがある場合、NAT ルールに一致する新しい接続は破棄されます。

  • エンドポイントに依存しないマッピングが有効になっている NAT ゲートウェイに NAT ルールを追加することはできません。NAT ルールが含まれる NAT ゲートウェイで、エンドポイントに依存しないマッピングを有効にすることはできません。

また、すべての VM は Cloud NAT ルールに応じて、VM 1 つあたりの最小ポート数の値から、割り当てられたポートを取得します。NAT ルールから VM に割り振られたポートを使い切った場合、NAT ルールに一致する新しい接続は破棄されます。

たとえば、VM あたり 4,096 個のポートを構成し、16 個の VM と 2 個の NAT ルール(rule1 が 1 つの IP アドレスで rule2 が 2 つの IP アドレス)と、2 つの IP アドレスがあるデフォルト ルール(default)を構成すると、16 個の VM すべてが NAT ルールのバンドルごとに 4、096 個のポートを取得します。この例では、defaultrule2 ではすべての VM に対して問題なく処理が行われますが、rule1 ではすべての VM にポートを割り当てることができません。そのため、rule1 を経由する必要がある VM からのトラフィックは破棄され、デフォルト ルールを使用しないことによるリソース不足の兆候が見られることがあります。

ルール式の言語

NAT ルールは Common Expression Language 構文を使用して記述されます。

式には次の 2 つの構成要素が必要です。

  • ルール式で検査される属性
  • 式の一部として属性に対して実行される演算

たとえば、次の式では、演算 inIpRange() で属性 destination.ip198.51.100.0/24 が使用されています。この場合、destination.ip198.51.100.0/24 の IP アドレス範囲に含まれている場合、式は true を返します。

inIpRange(destination.ip, '198.51.100.0/24')

NAT ルールは、次の属性と演算のみをサポートします。

属性

属性は、宛先 IP アドレスなどの送信パケットからの情報を表します。

属性名 説明
destination.ip パケットの宛先 IP アドレス

運用

次の表では、ルールの式を定義するために、属性と一緒に使用できる演算子について説明します。

オペレーション 説明
inIpRange(string, string) -> bool inIpRange(X, Y) は、IP CIDR 範囲 Y に IP アドレス X が含まれている場合に true を返します。
|| 論理演算子。x または y が true の場合、x || y は true を返します。
== 等価演算子。x が y と等しい場合、x == y は true を返します。

式の例

トラフィックを宛先 IP アドレス 198.51.100.20 と照合します。

"destination.ip == '198.51.100.20'"

トラフィックを宛先 IP アドレス 198.51.100.10/30 または 198.51.100.20 と照合します。

"inIpRange(destination.ip, '198.51.100.10/30') || destination.ip == '198.51.100.20'"

次のステップ