送信接続での送信元ネットワーク アドレス変換 (SNAT)を使用する

特定のシナリオでは、仮想マシンまたはコンピューティング インスタンスからインターネットへのアウトバウンド接続が必要です。 パブリック ロード バランサーのフロントエンド IP を使用して、インターネットへの送信接続をバックエンド インスタンスに提供できます。 この構成では、送信元ネットワーク アドレス変換 (SNAT) を使用して、仮想マシンのプライベート IP がロード バランサーのパブリック IP アドレスに変換されます。 SNAT では、バックエンドの IP アドレスをロード バランサーのパブリック IP アドレスにマップします。 SNAT によって、外部の送信元はバックエンド インスタンスへの直接アドレスを取得できなくなります。

Azure のアウトバウンド接続方法

Azure での送信接続を有効にするには、次の方法を使用します。

# メソッド ポート割り当ての種類 運用環境グレードか? Rating
1 送信規則による送信には、ロード バランサーのフロントエンド IP アドレスが使用される 静的、明示的 はい (ただし大規模ではない) [OK]
2 サブネットへの NAT ゲートウェイの関連付け 動的、明示的 はい 最高
3 仮想マシンへのパブリック IP の割り当て 静的、明示的 はい [OK]
4 既定の送信アクセスを使用する 暗黙 いいえ 最低

Azure 送信オプションの図。

1. 送信規則による送信には、ロード バランサーのフロントエンド IP アドレスが使用される

送信規則を持つパブリック ロード バランサーの図。

送信規則を使用すると、標準パブリック ロード バランサーの SNAT (送信元ネットワーク アドレス変換) を明示的に定義できます。 この構成では、ロード バランサーのパブリック IP または IP をバックエンド インスタンスのアウトバウンド接続に使用できます。

この構成を使用すると、以下が可能になります。

  • IP マスカレード

  • 許可リストの単純化

  • デプロイのパブリック IP リソース数の削減。

アウトバウンド規則を使用すると、送信インターネット接続を完全に宣言的に制御できます。 アウトバウンド規則を使用すると、手動のポート割り当てを通じて、特定のニーズに合わせて、この機能をスケーリングおよび調整することができます。 バックエンド プールのサイズと frontendIPConfigurations の数に基づいて SNAT ポートを手動で割り当てると、SNAT のポート不足を回避するのに役立ちます。

"インスタンスあたりのポート数" または "バックエンド インスタンスの最大数" を使用して SNAT ポートを手動で割り当てできます。 バックエンドに仮想マシンがある場合は、SNAT ポートを最大限に使用できるように、[インスタンスあたりのポート数] を使用してポートを割り当てることをお勧めします。

インスタンスあたりのポート数は、次のように計算する必要があります。

フロントエンド IP の数 x 64K / バックエンド インスタンスの数

バックエンドに仮想マシン スケール セットがある場合は、"バックエンド インスタンスの最大数" を使用してポートを割り当てることをお勧めします。 許可されている残りの SNAT ポートよりも多くの VM がバックエンドに追加されると、仮想マシン スケール セットのスケールアップがブロックされるか、新しい VM が十分な数の SNAT ポートを取得できなくなるおそれがあります。

アウトバウンド規則の詳細については、アウトバウンド規則に関するページを参照してください。

2. サブネットへの NAT ゲートウェイの関連付け

NAT ゲートウェイとパブリック ロード バランサーの図。

Virtual Network NAT を使用すると、仮想ネットワークでアウトバウンド専用のインターネット接続が簡単になります。 これをサブネットに対して構成した場合、指定した静的パブリック IP アドレスがすべてのアウトバウンド接続で使用されます。 ロード バランサーや、仮想マシンに直接アタッチされたパブリック IP アドレスがなくても、アウトバウンド接続が可能となります。 NAT はフル マネージドで、高い回復性を備えています。

アウトバウンド接続には、NAT ゲートウェイを使用することが最善の方法です。 NAT ゲートウェイは、高い拡張性と信頼性を備えており、SNAT ポート不足に関する同じ問題はありません。

Azure Virtual Network NAT の詳細については、「Azure Virtual Network NAT とは」を参照してください。

3. 仮想マシンへのパブリック IP の割り当て

インスタンス レベルのパブリック IP アドレスを持つ仮想マシンの図。

Associations Method IP プロトコル
VM の NIC 上のパブリック IP SNAT (送信元ネットワーク アドレス変換)
は使用されません。
TCP (伝送制御プロトコル)
UDP (ユーザー データグラム プロトコル)
ICMP (インターネット制御メッセージ プロトコル)
ESP (セキュリティ ペイロードのカプセル化)

トラフィックは、仮想マシンのパブリック IP アドレス (インスタンス レベル IP) から要求元のクライアントに戻ります。

すべてのアウトバウンド フローについて、インスタンスの NIC の IP 構成に割り当てられたパブリック IP が Azure によって使用されます。 インスタンスには、使用可能なすべてのエフェメラル ポートがあります。 VM が負荷分散されているかどうかは関係ありません。 このシナリオは他のシナリオよりも優先されます。

VM に割り当てられたパブリック IP は (1 対多ではなく) 1 対 1 の関係であり、1 対 1 のステートレス NAT として実装されます。

4. 既定の送信アクセス

既定の送信アクセスの図。

Note

この方法は、ポートの枯渇リスクを高めるため、運用環境のワークロードには推奨されません。 接続エラーの可能性を避けるために、運用ワークロードにこの方法を使用しないようにしてください。

パブリック IP が関連付けられていない Azure リソースには、送信規則を備えたロード バランサーが前にはなく、仮想マシン スケール セットのフレキシブル オーケストレーション モードには含まれません。または、サブネットに関連付けられている NAT ゲートウェイ リソースがなく、送信用に最小限の数のポートが割り当てられます。 このアクセスは、既定の送信アクセスと呼ばれ、アプリケーションの送信接続を提供するための最も望ましくない方法です。

既定の送信アクセスのその他の例をいくつか次に示します。

  • 基本 SKU のロードバランサーの使用
  • Azure 上の仮想マシン (上で説明した関連付けはありません)。 この場合、送信接続は既定の送信アクセス IP によって提供されます。 この IP は、Azure によって割り当てられた動的 IP であり、ユーザーが制御することはできません。 既定の SNAT は運用環境のワークロードには推奨されず、接続エラーが発生する可能性があります。
  • 送信規則のないロード バランサーのバックエンド プール内の仮想マシン。 その結果、送信と受信のためにロードバランサーのフロントエンド IP アドレスを使用するため、SNAT ポート不足を原因とする接続エラーが発生しやすくなります。

SNAT ポートとは

ポートは、個別のフローを維持するために使用される一意の識別子を生成するために使用されます。 インターネットには、この区別を実現するために 5 タプルが使用されます。

あるポートがインバウンド接続に使用されている場合、そのポートでのインバウンド接続要求用のリスナーがあります。 このポートは、アウトバウンド接続には使用できません。 アウトバウンド接続を確立するには、エフェメラル ポートを使用して、通信と個別のトラフィック フローの維持に使用するポートを宛先に提供します。 このエフェメラル ポートが SNAT に使用される場合、SNAT ポートと呼ばれます。

定義上、すべての IP アドレスには 65,535 個のポートがあります。 各ポートは、TCP (伝送制御プロトコル) および UDP (ユーザー データグラム プロトコル) のインバウンドまたはアウトバウンドの接続のいずれかに使用できます。 パブリック IP アドレスがフロントエンド IP としてロード バランサーに追加されると、64,000 個のポートが SNAT として使用できるようになります。 フロントエンド IP として追加されるパブリック IP はすべて割り当て可能ですが、フロントエンド IP は一度に 1 つずつ使用されます。 たとえば、2 つのバックエンド インスタンスにそれぞれ 64,000 個のポートが割り当て済みで、2 つのフロントエンド IP にアクセスできる場合、両方のバックエンド インスタンスは、64,000 個のポートすべてを使い切るまで、最初のフロントエンド IP のポートを使用します。

負荷分散または受信 NAT 規則で使用される各ポートでは、64,000 個の使用可能な SNAT ポートから 8 つのポートの範囲が使用されます。 この使用法により、送信接続に同じフロントエンド IP が使用される場合、SNAT の対象となるポートの数が減ります。 負荷分散規則または受信 NAT 規則で使用されるポートが、別の規則で使用されるものと同じ 8 つのポートのブロック内にある場合、追加のポートは必要ありません。

既定の SNAT の動作

VM がアウトバウンド フローを作成すると、Azure によって送信元 IP アドレスが一時 IP アドレスに変換されます。 この変換は SNAT を介して行われます。

パブリック ロード バランサーを介して送信規則なしで SNAT を使用する場合、SNAT ポートは、以下の既定の SNAT ポート割り当て表で説明するように事前に割り当てられています。

既定のポート割り当て表

次の表は、バックエンド プール サイズに対する SNAT ポートの事前割り当てを示しています。

プール サイズ (VM インスタンス) IP 構成あたりの既定の 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 ポート) がないと、クライアントでは 1 つのクエリ結果を別のクエリ結果と区別できません。

送信接続はバーストする可能性があります。 バックエンド インスタンスに不十分な数のポートが割り当てられる可能性があります。 アプリケーション内で接続の再利用機能を使用します。 接続の再利用を行わない場合、SNAT ポートの枯渇が発生するリスクが高まります。

Azure App Service を使用した接続プールの詳細については、「Azure App Service での断続的な送信接続エラーのトラブルシューティング」を参照してください

ポートの枯渇が発生すると、宛先 IP への新しい送信接続は失敗します。 ポートが使用可能になると、接続は成功します。 この枯渇は、IP アドレスからの 64,000 個のポートが多数のバックエンド インスタンスにわたってまばらに分散されている場合に発生します。 SNAT ポートの枯渇を軽減するためのガイダンスについては、トラブルシューティング ガイドのページを参照してください。

TCP 接続の場合、ロード バランサーにはすべての宛先 IP とポートに 1 つの SNAT ポートが使用されます。 この複数使用により、同じ SNAT ポートを使用した同じ宛先 IP への複数の接続が可能になります。 接続が別の宛先ポートに接続されていない場合、この複数使用は制限されます。

UDP 接続の場合、ロード バランサーにはポート制限コーン NAT アルゴリズムが使用されます。この場合、宛先ポートに関係なく、宛先 IP ごとに 1 つの SNAT ポートが使用されます。

無制限の接続数に対して 1 つのポートが再利用されます。 ポートは、宛先 IP またはポートが異なる場合にのみ再利用されます。

制約

  • 新しいパケットが送信されず、接続がアイドル状態の場合、ポートは 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 を経由して送信が行われない限り、断片化されたパケットは破棄されます。

  • ネットワーク インターフェイスのセカンダリ IP 構成は、(パブリック IP が関連付けられていない限り) ロード バランサー経由で送信通信を行いません。

次のステップ