送信接続での送信元ネットワーク アドレス変換 (SNAT)を使用する
特定のシナリオでは、仮想マシンまたはコンピューティング インスタンスからインターネットへのアウトバウンド接続が必要です。 パブリック ロード バランサーのフロントエンド IP を使用して、インターネットへの送信接続をバックエンド インスタンスに提供できます。 この構成では、送信元ネットワーク アドレス変換 (SNAT) を使用して、仮想マシンのプライベート IP がロード バランサーのパブリック IP アドレスに変換されます。 SNAT では、バックエンドの IP アドレスをロード バランサーのパブリック IP アドレスにマップします。 SNAT によって、外部の送信元はバックエンド インスタンスへの直接アドレスを取得できなくなります。
Azure のアウトバウンド接続方法
次の方法は、送信接続を有効にするために Azure で最も一般的に使用される方法です。
# | メソッド | ポート割り当ての種類 | 運用環境グレードか? | Rating |
---|---|---|---|---|
1 | 送信規則による送信には、ロード バランサーのフロントエンド IP アドレスが使用される | 静的、明示的 | はい (ただし大規模ではない) | [OK] |
2 | サブネットへの NAT ゲートウェイの関連付け | 動的、明示的 | はい | 最高 |
3 | 仮想マシンへのパブリック IP の割り当て | 静的、明示的 | はい | [OK] |
4 | 既定の送信アクセス | 暗黙 | いいえ | 最低 |
1. 送信規則による送信には、ロード バランサーのフロントエンド IP アドレスが使用される
送信規則を使用すると、標準パブリック ロード バランサーの SNAT (送信元ネットワーク アドレス変換) を明示的に定義できます。 この構成では、ロード バランサーのパブリック IP または IP をバックエンド インスタンスのアウトバウンド接続に使用できます。
この構成を使用すると、以下が可能になります。
IP マスカレード
許可リストの単純化
デプロイのパブリック IP リソース数の削減。
アウトバウンド規則を使用すると、送信インターネット接続を完全に宣言的に制御できます。 アウトバウンド規則を使用すると、手動のポート割り当てを通じて、特定のニーズに合わせて、この機能をスケーリングおよび調整することができます。 バックエンド プールのサイズと frontendIPConfigurations の数に基づいて SNAT ポートを手動で割り当てると、SNAT のポート不足を回避するのに役立ちます。
"インスタンスあたりのポート数" または "バックエンド インスタンスの最大数" を使用して SNAT ポートを手動で割り当てできます。 バックエンドに仮想マシンがある場合は、SNAT ポートを最大限に使用できるように、[インスタンスあたりのポート数] を使用してポートを割り当てることをお勧めします。
インスタンスあたりのポート数を次のように計算します。
フロントエンド IP の数 x 64K / バックエンド インスタンスの数
バックエンドに仮想マシン スケール セットがある場合は、"バックエンド インスタンスの最大数" を使用してポートを割り当てることをお勧めします。 許可されている残りの SNAT ポートよりも多くの VM がバックエンドに追加されると、仮想マシン スケール セットのスケールアウトががブロックされるか、新しい VM が十分な数の SNAT ポートを取得できなくなるおそれがあります。
アウトバウンド規則を使用して複数のフロントエンド IP が設定されている場合、アウトバウンド接続はバックエンド インスタンスに対して構成されているフロントエンド IP のいずれかから送信される可能性があります。 接続用に選択される可能性があるフロントエンド IP に依存する環境を構築することはお勧めしません。
アウトバウンド規則の詳細については、アウトバウンド規則に関するページを参照してください。
2. サブネットへの NAT ゲートウェイの関連付け
Azure NAT Gateway を使用すると、仮想ネットワークのアウトバウンドのみのインターネット接続が簡単になります。 これをサブネットに対して構成した場合、指定した静的パブリック IP アドレスがすべてのアウトバウンド接続で使用されます。 ロード バランサーや、仮想マシンに直接アタッチされたパブリック IP アドレスがなくても、アウトバウンド接続が可能となります。 NAT Gateway はフル マネージドで、高い回復性を備えています。
アウトバウンド接続には、NAT ゲートウェイを使用することが最善の方法です。 NAT ゲートウェイは、高い拡張性と信頼性を備えており、SNAT ポート不足に関する同じ問題はありません。
NAT ゲートウェイは、ロード バランサー、インスタンス レベルのパブリック IP アドレス、Azure Firewall などの他のアウトバウンド接続方法よりも優先されます。
Azure NAT Gateway の詳細については、「Azure NAT Gateway とは」を参照してください。
3. 仮想マシンへのパブリック IP の割り当て
Associations | Method | IP プロトコル |
---|---|---|
VM の NIC 上のパブリック IP | SNAT (送信元ネットワーク アドレス変換) は使用されません。 |
TCP (伝送制御プロトコル) UDP (ユーザー データグラム プロトコル) ICMP (インターネット制御メッセージ プロトコル) ESP (セキュリティ ペイロードのカプセル化) |
トラフィックは、仮想マシンのパブリック IP アドレス (インスタンス レベル IP) から要求元のクライアントに戻ります。
すべてのアウトバウンド フローについて、インスタンスの NIC の IP 構成に割り当てられたパブリック IP が Azure によって使用されます。 インスタンスには、使用可能なすべてのエフェメラル ポートがあります。 VM が負荷分散されているかどうかは関係ありません。 このシナリオは、NAT Gateway を除き、他のものよりも優先されます。
VM に割り当てられたパブリック IP は (1 対多ではなく) 1 対 1 の関係であり、1 対 1 のステートレス NAT として実装されます。
4. 既定の送信アクセス
Azure では、明示的な送信接続が定義されていない仮想ネットワークで作成された仮想マシンには、既定の送信パブリック IP アドレスが割り当てられます。 この IP アドレスにより、リソースからインターネットへの送信接続が可能になります。 このアクセスは、既定の送信アクセスと呼ばれます。 このアクセス方法は、安全ではなく、IP アドレスが変更される可能性があるため、お勧めしません。
重要
2025 年 9 月 30 日に、新しいデプロイの既定の送信アクセスは廃止されます。 詳細については、公式告知を参照してください。 上記のオプション 1 から 3 に示すように、明示的な形式の接続のいずれかを使用することをお勧めします。
SNAT ポートとは
ポートは、個別のフローを維持するために使用される一意の識別子を生成するために使用されます。 インターネットには、この区別を実現するために 5 タプルが使用されます。
あるポートがインバウンド接続に使用されている場合、そのポートでのインバウンド接続要求用のリスナーがあります。 このポートは、アウトバウンド接続には使用できません。 アウトバウンド接続を確立するには、エフェメラル ポートを使用して、通信と個別のトラフィック フローの維持に使用するポートを宛先に提供します。 このエフェメラル ポートが SNAT に使用される場合、SNAT ポートと呼ばれます。
定義上、すべての IP アドレスには 65,535 個のポートがあります。 各ポートは、TCP (伝送制御プロトコル) および UDP (ユーザー データグラム プロトコル) のインバウンドまたはアウトバウンドの接続のいずれかに使用できます。 パブリック IP アドレスがフロントエンド IP としてロード バランサーに追加されると、64,000 個のポートが SNAT として使用できるようになります。
負荷分散または受信 NAT 規則で使用される各ポートでは、64,000 個の使用可能な SNAT ポートから 8 つのポートの範囲が使用されます。 この使用法により、送信接続に同じフロントエンド IP が使用される場合、SNAT の対象となるポートの数が減ります。 負荷分散規則または受信 NAT 規則で使用されるポートが、別の規則で使用されるものと同じ 8 つのポートのブロック内にある場合、そのルールは追加のポートを必要としません。
注意
Azure Storage、Azure SQL、Azure Cosmos DB などのサポートされている Azure PaaS サービスに接続する必要がある場合は、Azure Private Link を活用して SNAT を完全に回避できます。 Azure Private Link は、インターネット経由ではなく Azure バックボーン ネットワーク経由で仮想ネットワークから Azure サービスにトラフィックを送信します。
Private Link は、Azure でホストされるサービスへのプライベート アクセスにおいて、サービス エンドポイントよりも推奨されるオプションです。 Private Link とサービス エンドポイントの違いの詳細については、「プライベート エンドポイントとサービス エンドポイントの比較」を参照してください。
既定の SNAT の動作
VM がアウトバウンド フローを作成すると、Azure によって送信元 IP アドレスが一時 IP アドレスに変換されます。 この変換は SNAT を介して行われます。
パブリック ロード バランサーを介して送信規則なしで SNAT を使用する場合、SNAT ポートは、以下の既定の SNAT ポート割り当て表で説明するように事前に割り当てられています。
既定のポート割り当て表
既定のポート割り当てを使用するように負荷分散規則が選択されている場合、または "送信ポートの既定の数を使用する" で送信規則が構成されている場合、SNAT ポートはバックエンド プールのサイズに基づいて既定で割り当てられます。 バックエンドは、テーブルによって定義されたポート数 (フロントエンド IP ごと、最大で 1,024 個のポート) を受け取ります。
たとえば、バックエンド プールに 100 個の VM があり、フロントエンド IP が 1 つのみの場合、各 VM は 512 個のポートを受け取ります。 2 つ目のフロントエンド IP が追加された場合、各 VM は追加の 512 個のポートを受け取ります。 つまり、各 VM には合計 1,024 個のポートが割り当てられます。 その結果、3 つ目のフロントエンド IP を追加しても、割り当てられた SNAT ポートの数が 1,024 ポートを超えることはありません。
経験則として、既定のポート割り当てが適用されるときに提供される SNAT ポートの数は、MIN (プール サイズに基づいて提供される既定の SNAT ポートの数 * プールに関連付けられているフロントエンド IP の数 1,024) として計算できます
次の 表は、バックエンド プールのサイズに応じて、1 つのフロントエンド IP の SNAT ポートの事前割り当てを示しています。
プール サイズ (VM インスタンス) | 既定の SNAT ポート |
---|---|
1-50 | 1,024 |
51-100 | 512 |
101-200 | 256 |
201-400 | 128 |
401-800 | 64 |
801-1,000 | 32 |
ポート不足
同じ宛先 IP および宛先ポートへのすべての接続には 1 つの SNAT ポートが使用されます。 この接続を使用して、バックエンド インスタンスまたはクライアントからサーバーに対する個別のトラフィック フローが維持されます。 このプロセスにより、トラフィックを処理できる個別のポートがサーバーに提供されます。 このプロセスがないと、クライアント コンピューターでは、パケットがどのフローに属するかが認識されません。
複数のブラウザーを使用して、次のような https://www.microsoft.com にアクセスする場合について考えてみましょう。
宛先 IP = 23.53.254.142
宛先ポート = 443
プロトコル = TCP
戻りラフィック用の SNAT ポートがなければ、クライアントはあるクエリ結果と別のクエリ結果を分離する方法がありません。
送信接続はバーストする可能性があります。 バックエンド インスタンスに不十分な数のポートが割り当てられる可能性があります。 アプリケーション内で接続の再利用機能を使用します。 接続の再利用を行わない場合、SNAT ポートの枯渇が発生するリスクが高まります。
Azure App Service を使用した接続プールの詳細については、「Azure App Service での断続的な送信接続エラーのトラブルシューティング」を参照してください
ポートの枯渇が発生すると、宛先 IP への新しい送信接続は失敗します。 ポートが使用可能になると、接続は成功します。 この枯渇は、IP アドレスからの 64,000 個のポートが多数のバックエンド インスタンスにわたってまばらに分散されている場合に発生します。 SNAT ポートの枯渇を軽減するためのガイダンスについては、トラブルシューティング ガイドのページを参照してください。
ポートの再利用
TCP 接続の場合、ロード バランサーにはすべての宛先 IP とポートに 1 つの SNAT ポートが使用されます。 同じ宛先 IP への接続の場合、宛先ポートが異なる限り、1 つの SNAT ポートを再利用できます。 同じ宛先 IP とポートへの接続が既に存在する場合は、再利用できません。
UDP 接続の場合、ロード バランサーにはポート制限付きコーン NAT アルゴリズムが使用されます。この場合、宛先ポートに関係なく、宛先 IP ごとに 1 つの SNAT ポートが使用されます。
個々のポートは、再利用が許可されている接続の数の制限なく再利用できます (宛先 IP またはポートが異なる場合)。
次の表の例では、プライベート IP 10.0.0.1 を持つバックエンド インスタンスが宛先 IP 23.53.254.142 および 26.108.254.155 に TCP 接続を行っている一方で、ロード バランサーはフロントエンド IP アドレス 192.0.2.0 で構成されています。 宛先 IP が異なるため、同じ SNAT ポートを複数の接続に再利用できます。
Flow | 送信元のタプル | SNAT 変換の後の送信元タプル | 送信先のタプル |
---|---|---|---|
1 | 10.0.0.1:80 | 192.0.2.0:1 | 23.53.254.142:80 |
2 | 10.0.0.1:80 | 192.0.2.0:1 | 26.108.254.155:80 |
制約
新しいパケットが送信されず、接続がアイドル状態の場合、ポートは 4 から 120 分後に解放されます。
このしきい値は、アウトバウンド規則を使用して構成できます。
各 IP アドレスには、SNAT に使用できる 64,000 個のポートが用意されています。
各ポートは、宛先 IP アドレスへの TCP 接続と UDP 接続の両方に使用できます
宛先ポートが一意であるかどうかに関係なく、UDP SNAT ポートが必要です。 宛先 IP への UDP 接続ごとに、1 つの UDP SNAT ポートが使用されます。
宛先ポートが異なる場合、1 つの TCP SNAT ポートを同じ宛先 IP への複数の接続に使用できます。
SNAT の枯渇は、バックエンド インスタンスが特定の SNAT ポートによって使い果たされたときに発生します。 この場合も、ロード バランサーには未使用の SNAT ポートを使用することができます。 バックエンド インスタンスに使用されている SNAT ポート数が指定された SNAT ポート数を超えると、新しい送信接続を確立できなくなります。
VM の NIC 上のインスタンス レベルのパブリック IP を経由して送信が行われない限り、断片化されたパケットはドロップされます。
ネットワーク インターフェイスのセカンダリ IPv4 構成は、アウトバウンド規則ではサポートされません。 セカンダリ IPv4 構成でのアウトバウンド接続の場合は、インスタンス レベルのパブリック IP を接続するか、代わりに NAT ゲートウェイを利用します。
次のステップ
- SNAT の枯渇による送信接続エラーのトラブルシューティング
- SNAT メトリックを確認し、それらをフィルター処理、分割、および表示する正しい方法を理解します。
- 既存の送信接続の方法を NAT ゲートウェイに移行する方法について確認します