Cloud NAT ルール
このページでは、Public NAT の Cloud NAT ルールの概要について説明します。これらのルールを使用して、インターネットに接続するために Cloud NAT をどのように使用するかを定義できます。
Public NAT の Cloud NAT ルールは、送信元アドレス(プレビュー)または宛先アドレスに基づく送信元ネットワーク アドレス変換(SNAT)をサポートしています。
NAT ルール
デフォルトでは、Public NAT 用に Cloud NAT ゲートウェイを構成すると、その NAT ゲートウェイによって変換されるパケットでは、宛先のインターネット アドレスにかかわらず同じ NAT IP アドレスのセットが使用されます。Cloud NAT によって変換されるパケットをより細かく制御する場合は、NAT ルールを追加します。
NAT ルールは、一致条件と対応するアクションを定義します。NAT ルールを指定した後、各パケットが各 NAT ルールと照合されます。パケットがルールに設定された条件と一致する場合、その一致に対応するアクションが行われます。
Public NAT の NAT ルールは、送信元アドレスと宛先アドレスの両方の照合をサポートしています。
- 送信元ベースのルール(プレビュー)では、パケットは送信元 IP アドレスによって照合されます。IPv4 送信元アドレスのみがサポートされています。
- 宛先ベースのルールでは、パケットは宛先 IP アドレスによって照合されます。IPv4 宛先アドレスのみがサポートされます。
1 つの NAT ルールで送信元ベースの条件と宛先ベースの条件を組み合わせることはできません。詳細については、NAT ルールの仕様をご覧ください。
Cloud NAT ルールの構成例
このセクションでは、送信元ベースと宛先ベースの NAT ルールの構成例を示します。
送信元ベースのルール
以下の例では、送信元ベースの NAT ルールの使用方法を示します。
デフォルトでは、Cloud NAT ゲートウェイがサブネット内の IPv4 トラフィック用に構成されている場合、ゲートウェイは、そのサブネット内の VM インスタンスのプライマリ内部 IP アドレスとエイリアス IP 範囲について NAT を実行します。送信元ベースの NAT ルールを使用することで、IP 転送が有効になっている VM インスタンスのために NAT を構成することもできます。
この例では、Cloud NAT は Subnet A で構成されています。このサブネットでは、プライマリ内部 IP アドレス 10.1.1.2 とエイリアス IP 範囲 10.2.1.0/24 を持つ VM インスタンスがインターネットにトラフィックを送信します。この VM インスタンスには次の要件があります。
- パケットが IP 範囲
192.168.1.0/24から送信される場合は、NAT IP アドレス203.0.113.10を使用して、インターネット上の宛先にトラフィックを送信する必要があります。 - パケットが IP 範囲
192.168.2.0/24から送信される場合は、NAT IP アドレス203.0.113.20を使用して、インターネット上の宛先にトラフィックを送信する必要があります。 - パケットが IP アドレス
10.1.1.2または IP 範囲10.2.1.0/24から送信される場合は、NAT IP アドレス203.0.113.30を使用して、インターネット上の宛先にトラフィックを送信する必要があります。
これらの要件を満たすには、転送されるパケット用に送信元ベースの NAT ルールを 2 つ作成し、VM インスタンスのプライマリ内部 IP アドレスとエイリアス IP 範囲からのパケット用にデフォルト ルールを作成します。
- 送信元ベースのルール 1: 送信元アドレスが
192.168.1.0/24の場合、203.0.113.10を使用してインターネットにトラフィックを送信します。 - 送信元ベースのルール 2: 送信元アドレスが
192.168.2.0/24の場合、203.0.113.20を使用してインターネットにトラフィックを送信します。 - デフォルト ルール: 他のすべてのパケットについては、
203.0.113.30を使用してインターネットにトラフィックを送信します。
VM インスタンスによって転送されるパケットの送信元アドレスがルール 1 またはルール 2 のいずれにも一致しない場合、そのパケットは破棄されます。
送信元ベースの NAT ルールのその他の使用方法の例については、Cloud WAN の仕組み: 差別化されたネットワーキング機能の詳細をご覧ください。
宛先ベースのルール
以下の例では、宛先で少数の IP アドレスからのアクセスのみが許可されている場合に NAT ルールを使用する方法を示します。プライベート サブネット内の Google Cloud VM からこのような宛先へのトラフィックは、許可された IP アドレスでのみ SNAT 変換することをおすすめします。これらの IP アドレスは、他の宛先には使用しないことをおすすめします。
VPC ネットワーク test のリージョン A にある Subnet-1(10.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 を使用する必要があります。
この例では NAT ルールを使用できますが、サブネット Subnet-1(10.10.10.0/24)には他のサブネットとは異なる NAT ルールがあるため、2 つの NAT ゲートウェイが必要です。この構成は次の手順に沿って作成します。
- NAT IP アドレス
203.0.113.40のSubnet-1用にCloud NAT Gateway 1という名前のゲートウェイを作成し、次のルールを追加します。Cloud NAT Gateway 1の NAT ルール 1: 宛先が198.51.100.20/30の場合、NAT に203.0.113.20を使用します。Cloud NAT Gateway 1の NAT ルール 2: 宛先が198.51.100.30または198.51.100.31の場合、NAT に203.0.113.30を使用します。
- リージョンの他のサブネット用に
Cloud NAT Gateway 2というゲートウェイを作成し、NAT IP アドレスを203.0.113.10として割り当てます。この手順では NAT ルールは必要ありません。
NAT ルールの仕様
- Cloud NAT は、送信元ベースと宛先ベースのルールをサポートしています。各ルールでは、送信元アドレスまたは宛先アドレスのいずれかに基づく条件を定義します。両方に基づく条件は定義できません。
- ルールの優先度は、0(最も高い優先度)から 65,000(最も低い優先度)までの範囲で NAT ルールを一意に識別します。2 つのルールに同じ優先度を設定することはできません。
- 各 NAT 構成にはデフォルトのルールがあります。
- 同じ NAT 構成で他の NAT ルールが一致しない場合、デフォルト ルールが適用されます。
- デフォルト ルールの優先度は
65001です。 - 送信元ベースのルールと宛先ベースのルールのどちらについても、デフォルト ルールの IP CIDR 範囲は
0.0.0.0/0です。 - デフォルト ルールは、転送されるパケットには適用されません。これらのパケットに NAT を使用するには、一致する送信元ベースのルールを NAT 構成に含める必要があります。詳細については、送信元ベースのルールをご覧ください。
- Cloud NAT ルールは、NAT IP 割り振りオプションの値が
MANUAL_ONLYの場合にのみサポートされます。 特定のルールで構成された IP アドレスはすべて同じティアのものである必要があります。
同じルール(デフォルト ルールを含む)内に、プレミアム ティアの IP アドレスとスタンダード ティアの IP アドレスを混在させることはできません。
一致条件の IP CIDR 範囲は、NAT ルールの間で重複しないようにする必要があります。ある特定のパケットに適用できるルールは 1 つだけです。パケットが送信元ベースのルールと宛先ベースのルールの両方に一致する場合は、優先度の高い方のルールが適用されます。
0.0.0.0/0はデフォルト ルールで使用されているため、送信元または宛先範囲として0.0.0.0/0を指定した NAT ルールは作成できません。NAT ルール間で NAT IP アドレスが重複しないようにする必要があります。
ルールには、空でない
ActiveIP アドレスまたは空でないDrainIP アドレスが必要です。ルールに空のActiveIP アドレスがある場合、その NAT ルールに一致する新しい接続は破棄されます。エンドポイントに依存しないマッピング(EIM)が有効になっている NAT ゲートウェイに NAT ルールを追加することはできません。NAT ルールが設定されている NAT ゲートウェイで EIM を有効にすることはできません。
さらに、すべての VM には、Cloud NAT ルールごとに設定された VM あたりの最小ポート数の値から、ポートが割り当てられます。NAT ルールから VM に割り振られたポートを使い切った場合、NAT ルールに一致する新しい接続は破棄されます。
たとえば、VM 1 つあたり 4,096 個のポートを構成し、16 個の VM と 2 個の NAT ルール(IP アドレスは rule1 に 1 つ、rule2 に 2 つ)と、2 つの IP アドレスがあるデフォルト ルール(default)を構成すると、16 個の VM すべてが NAT ルールのバンドルごとに 4,096 個のポートを取得します。この例では、default と rule2 ではすべての VM に対して問題なく処理が行われますが、rule1 ではすべての VM にポートを割り当てることができません。そのため、rule1 を経由する必要がある VM からのトラフィックは破棄され、デフォルト ルールを使用しないことによるリソース不足の兆候が見られることがあります。
ルール式の言語
NAT ルールは Common Expression Language 構文を使用して記述されます。
式には次の 2 つの構成要素が必要です。
- ルール式で検査される属性。
- 式の一部として属性に対して実行される演算。
たとえば、次の式では、演算 inIpRange() で属性 destination.ip と 198.51.100.0/24 が使用されています。この場合、destination.ip が 198.51.100.0/24 の IP アドレス範囲に含まれている場合、式は true を返します。
inIpRange(destination.ip, '198.51.100.0/24')
NAT ルールは、次の属性と演算のみをサポートします。
属性
属性は、送信元 IP アドレスや宛先 IP アドレスなど、送信パケットからの情報を表します。
| 属性名 | 説明 |
|---|---|
source.ip |
パケットの送信元 IP アドレス |
destination.ip |
パケットの宛先 IP アドレス |
オペレーション
次の表では、ルールの式を定義するために、属性と一緒に使用できる演算子について説明します。
| オペレーション | 説明 |
|---|---|
inIpRange(string, string) -> bool |
IP CIDR 範囲 y に IP アドレス x が含まれている場合、inIpRange(x, y) は true を返します。 |
|| |
論理演算子。x または y が true の場合、x || y は true を返します。 |
== |
等号演算子。x と y が等しい場合、x == y は true を返します。 |
式の例
パケットは送信元アドレスまたは宛先アドレスのいずれかに基づいて照合できます。両方に基づいて照合することはできません。
送信元ベースの照合の例
送信元 IP アドレスが 10.0.0.25 であるパケットを照合します。
"source.ip == '10.0.0.25'"
送信元 IP アドレスが 10.0.0.25 または 10.0.0.26 であるパケットを照合します。
"source.ip == '10.0.0.25' || source.ip == '10.0.0.26'"
送信元 IP アドレス範囲が 10.0.2.0/24 であるパケットを照合します。
"inIpRange(source.ip, '10.0.2.0/24')"
送信元 IP アドレスが 10.0.0.25 であるか、送信元 IP アドレス範囲が 10.0.2.0/24 であるパケットを照合します。
"source.ip == '10.0.0.25' || inIpRange(source.ip, '10.0.2.0/24')"
宛先ベースの照合の例
宛先 IP アドレスが 198.51.100.20 であるパケットを照合します。
"destination.ip == '198.51.100.20'"
宛先 IP アドレスが 198.51.100.20 または 198.51.100.21 であるパケットを照合します。
"destination.ip == '198.51.100.20' || destination.ip == '198.51.100.21'"
宛先 IP アドレス範囲が 198.51.100.10/30 であるパケットを照合します。
"inIpRange(destination.ip, '198.51.100.10/30')"
宛先 IP アドレスが 198.51.100.20 であるか、宛先 IP アドレス範囲が 198.51.100.10/30 であるパケットを照合します。
"destination.ip == '198.51.100.20' || inIpRange(destination.ip, '198.51.100.10/30')"
次のステップ
- NAT ルールの構成方法を学習する。