アウトバウンド接続での SNAT の使用Using SNAT for outbound connections

Azure パブリック ロード バランサーのフロントエンド IP を使用して、インターネットへのアウトバウンド接続をバックエンド インスタンスに提供できます。The frontend IPs of an Azure public load balancer can be used to provide outbound connectivity to the internet for backend instances. この構成では、ソース ネットワーク アドレス変換 (SNAT) を使用します。This configuration uses source network address translation (SNAT). SNAT を使用して、バックエンドの IP アドレスをロード バランサーのパブリック IP アドレスに書き換えます。SNAT rewrites the IP address of the backend to the public IP address of your load balancer.

SNAT を使用すると、バックエンド インスタンスの IP マスカレード が可能になります。SNAT enables IP masquerading of the backend instance. このマスカレードによって、外部ソースはバックエンド インスタンスへの直接アドレスを取得できなくなります。This masquerading prevents outside sources from having a direct address to the backend instances. バックエンド インスタンス間で 1 つの IP アドレスを共有すると、静的パブリック IP のコストが削減され、既知のパブリック IP からのトラフィックを含む IP 許可リストを簡略化するなどのシナリオがサポートされます。Sharing an IP address between backend instances reduces the cost of static public IPs and supports scenarios such as simplifying IP allow lists with traffic from known public IPs.

注意

多数のアウトバウンド接続を必要とするアプリケーションや、特定の仮想ネットワークから単一の IP セットを使用する必要がある企業のお客様の場合は、Virtual Network NAT がお勧めのソリューションです。For applications that require large numbers of outbound connections or enterprise customers who require a single set of IPs to be used from a given virtual network, Virtual Network NAT is the recommended solution. その動的割り当てを使用すると、単純な構成が可能になり、各 IP アドレスから SNAT ポートを最も効率的に使用できます。It's dynamic allocation allows for simple configuration and > the most efficient use of SNAT ports from each IP address. また、仮想ネットワーク内のすべてのリソースが一連の IP アドレスを共有できるようになります。これにより、ロード バランサーを共有する必要がなくなります。It also allows all resources in the virtual network to share a set of IP addresses without a need for them to share > a load balancer.

重要

アウトバウンド SNAT が構成されていない場合でも、同じリージョン内の Azure ストレージ アカウントには引き続きアクセスでき、バックエンドのリソースは引き続き Windows Update などの Microsoft サービスにアクセスできます。Even without outbound SNAT configured, Azure storage accounts within the same region will still be accessible and backend resources will still have access to Microsoft services such as Windows Updates.

注意

この記事では、Azure Resource Manager のデプロイのみを対象としています。This article covers Azure Resource Manager deployments only. Azure のすべてのクラシック デプロイメント シナリオについては、「送信接続 (クラシック)」をご覧ください。Review Outbound connections (Classic) for all Classic deployment scenarios in Azure.

バックエンド リソース間でフロントエンド IP アドレスを共有するSharing frontend IP address across backend resources

ロード バランサーのバックエンド リソースにインスタンスレベルのパブリック IP (ILPIP) アドレスがない場合、パブリック ロード バランサーのフロントエンド IP を介して送信接続が確立されます。If the backend resources of a load balancer don't have instance-level public IP (ILPIP) addresses, they establish outbound connectivity via the frontend IP of the public load balancer. ポートは、個別のフローを維持するために使用される一意の識別子を生成するために使用されます。Ports are used to generate unique identifiers used to maintain distinct flows. インターネットには、この区別を実現するために 5 タプルが使用されます。The internet uses a five-tuple to provide this distinction.

5 タプルの構成は次のとおりです。The five-tuple consists of:

  • 宛先 IPDestination IP
  • 宛先ポートDestination port
  • 発信元 IPSource IP
  • この区別を実現するための送信元ポートとプロトコル。Source port and protocol to provide this distinction.

受信接続にポートを使用する場合、そのポートでの受信接続要求には リスナー が使用されます。これは送信接続には使用できません。If a port is used for inbound connections, it will have a listener for inbound connection requests on that port and cannot be used for outbound connections. 送信接続を確立するには、エフェメラル ポート を使用して、通信と個別のトラフィック フローの維持に使用するポートを宛先に提供する必要があります。To establish an outbound connection, an ephemeral port must be used to provide the destination with a port on which to communicate and maintain a distinct traffic flow. これらの一時ポートを使用して SNAT を実行する場合、これらは SNAT ポート と呼ばれます。When these ephemeral ports are used to perform SNAT they are called SNAT ports

定義上、すべての IP アドレスには 65,535 個のポートがあります。By definition, every IP address has 65,535 ports. 各ポートは、TCP (伝送制御プロトコル) および UDP (ユーザー データグラム プロトコル) のインバウンドまたはアウトバウンドの接続のいずれかに使用できます。Each port can either be used for inbound or outbound connections for TCP(Transmission Control Protocol) and UDP(User Datagram Protocol). パブリック IP アドレスがフロントエンド IP としてロード バランサーに追加されると、Azure によって 64,000 個が SNAT ポートとして使用できるようになります。When a public IP address is added as a frontend IP to a load balancer, Azure gives 64,000 eligible for use as SNAT ports.

注意

負荷分散またはインバウンド NAT 規則に使用される各ポートにより、これらの 64,000 のポートから 8 つのポートの範囲が消費され、SNAT の対象となるポートの数が減ります。Each port used for a load-balancing or inbound NAT rule will consume a range of eight ports from these 64,000 ports, reducing the number of ports eligible for SNAT. 負荷分散または NAT 規則が、別のものと同じ 8 個の範囲内にある場合は、追加のポートは使用されません。If a load-> balancing or nat rule is in the same range of eight as another it will consume no additional ports.

アウトバウンド規則と負荷分散の規則を使用すると、これらの SNAT ポートをバックエンド インスタンスに分散し、アウトバウンド接続用のロード バランサーのパブリック IP を共有できるようになります。Through outbound rules and load-balancing rules, these SNAT ports can be distributed to backend instances to enable them to share the public IPs of the load balancer for outbound connections.

下のシナリオ 2 を構成すると、各バックエンド インスタンスのホストによって、アウトバウンド接続の一部であるパケットに対して SNAT が実行されます。When scenario 2 below is configured, the host for each backend instance will perform SNAT on packets that are part of an outbound connection. バックエンド インスタンスからのアウトバウンド接続で SNAT を実行すると、ホストによりソース IP がフロントエンド IP のいずれかに書き換えられます。When performing SNAT on an outbound connection from a backend instance, the host rewrites the source IP to one of the frontend IPs. 一意のフローを維持するために、ホストは、各アウトバウンド パケットの送信元ポートを、バックエンド インスタンスに割り当てられた SNAT ポートの 1 つに書き換えます。To maintain unique flows, the host rewrites the source port of each outbound packet to one of the SNAT ports allocated for the backend instance.

さまざまなシナリオでのアウトバウンド接続の動作Outbound connection behavior for different scenarios

  • パブリック IP を持つ仮想マシン。Virtual machine with public IP.
  • パブリック IP を持たない仮想マシン。Virtual machine without public IP.
  • パブリック IP および標準のロード バランサーを持たない仮想マシン。Virtual machine without public IP and without standard load balancer.

シナリオ 1:パブリック IP を持つ仮想マシン。Scenario 1: Virtual machine with public IP

AssociationsAssociations MethodMethod IP プロトコルIP protocols
パブリック ロード バランサーまたはスタンドアロンPublic load balancer or stand-alone SNAT (送信元ネットワーク アドレス変換)SNAT (Source Network Address Translation)
は使用されません。not used.
TCP (伝送制御プロトコル)TCP (Transmission Control Protocol)
UDP (ユーザー データグラム プロトコル)UDP (User Datagram Protocol)
ICMP (インターネット制御メッセージ プロトコル)ICMP (Internet Control Message Protocol)
ESP (カプセル化セキュリティ ペイロード)ESP (Encapsulating Security Payload)

説明Description

すべてのアウトバウンド フローについて、インスタンスの NIC の IP 構成に割り当てられたパブリック IP が Azure によって使用されます。Azure uses the public IP assigned to the IP configuration of the instance's NIC for all outbound flows. インスタンスには、使用可能なすべてのエフェメラル ポートがあります。The instance has all ephemeral ports available. VM が負荷分散されているかどうかは関係ありません。It doesn't matter whether the VM is load balanced or not. このシナリオは他のシナリオよりも優先されます。This scenario takes precedence over the others.

VM に割り当てられたパブリック IP は (1 対多ではなく) 1 対 1 の関係であり、1 対 1 のステートレス NAT として実装されます。A public IP assigned to a VM is a 1:1 relationship (rather than 1: many) and implemented as a stateless 1:1 NAT.

シナリオ 2:パブリック IP を持たず Standard パブリック Load Balancer の背後にある仮想マシンScenario 2: Virtual machine without public IP and behind Standard public Load Balancer

AssociationsAssociations MethodMethod IP プロトコルIP protocols
Standard パブリック Load BalancerStandard public load balancer SNAT 用のロード バランサー フロントエンド IP の使用。Use of load balancer frontend IPs for SNAT. TCPTCP
UDPUDP

説明Description

ロード バランサー リソースは、既定の SNAT を有効にするアウトバウンド規則または負荷分散規則を使用して構成されます。The load balancer resource is configured with an outbound rule or a load-balancing rule that enables default SNAT. この規則は、パブリック IP フロントエンドとバックエンド プールとの間にリンクを作成するために使用されます。This rule is used to create a link between the public IP frontend with the backend pool.

この規則の構成を完了しない場合の動作は、シナリオ 3 で説明されたとおりになります。If you don't complete this rule configuration, the behavior is as described in scenario 3.

正常性プローブを成功させるために、リスナーを使用した規則は必要ありません。A rule with a listener isn't required for the health probe to succeed.

VM がアウトバウンド フローを作成すると、Azure により、送信元 IP アドレスがパブリック ロード バランサー フロントエンドのパブリック IP アドレスに変換されます。When a VM creates an outbound flow, Azure translates the source IP address to the public IP address of the public load balancer frontend. この変換は SNAT を介して行われます。This translation is done via SNAT.

ロード バランサーのフロントエンド パブリック IP アドレスのエフェメラル ポートを使用して、VM から送信される個々のフローが区別されます。Ephemeral ports of the load balancer frontend public IP address are used to distinguish individual flows originated by the VM. 送信フローが作成されると、事前に割り当てられたエフェメラル ポートが SNAT によって動的に使用されます。SNAT dynamically uses preallocated ephemeral ports when outbound flows are created.

ここでは、SNAT で使用されるエフェメラル ポートを SNAT ポートと呼びます。In this context, the ephemeral ports used for SNAT are called SNAT ports. アウトバウンド規則を明示的に構成することを強くお勧めします。It is highly recommended that an outbound rule is explicitly configured. 負荷分散規則に従って既定の SNAT を使用している場合は、既定の SNAT ポート割り当てテーブルに記載されているように、SNAT ポートが事前に割り当てられます。If using default SNAT through a load-balancing rule, SNAT ports are pre-allocated as described in the Default SNAT ports allocation table.

シナリオ 3:パブリック IP を持たず Standard 内部 Load Balancer の背後にある仮想マシンScenario 3: Virtual machine without public IP and behind Standard internal Load Balancer

AssociationsAssociations MethodMethod IP プロトコルIP protocols
Standard 内部 Load BalancerStandard internal load balancer インターネット接続なし。No internet connectivity. なしNone

説明Description

Standard 内部 Load Balancer を使用する場合、SNAT のために一時 IP アドレスは使用されません。When using a Standard internal load balancer there is no use of ephemeral IP addresses for SNAT. これは、既定でセキュリティをサポートするため、リソースで使用されるすべての IP アドレスを構成および予約できるようにするためです。This is to support security by default and ensure that all IP addresses used by resource are configurable and can be reserved. Standard 内部 Load Balancer の使用時にインターネットへのアウトバウンド接続を実現するには、インスタンス レベルのパブリック IP アドレスを構成して、(シナリオ 1) [#scenario1] の動作に従います。または、内部 Load Balancer に加えて、アウトバウンド規則が構成された Standard パブリック Load Balancer にバックエンド インスタンスを追加して、(シナリオ 2)[#scenario2] の動作に従います。In order to achieve outbound connectivity to the internet when using a Standard internal load balancer, configure an instance level public IP address to follow the behavior in (scenario 1)[#scenario1] or add the backend instances to a Standard public load balancer with an outbound rule configured in additon to the internal load balancer to follow the behavior in (scenario 2)[#scenario2].

シナリオ 4:パブリック IP を持たず Basic Load Balancer の背後にある仮想マシンScenario 4: Virtual machine without public IP and behind Basic Load Balancer

AssociationsAssociations MethodMethod IP プロトコルIP protocols
なしNone
Basic ロード バランサーBasic load balancer
インスタンスレベルの動的 IP アドレスを使用する SNATSNAT with instance-level dynamic IP address TCPTCP
UDPUDP

説明Description

VM がアウトバウンド フローを作成すると、Azure が、送信元 IP アドレスを動的に割り当てられたパブリック送信元 IP アドレスに変換します。When the VM creates an outbound flow, Azure translates the source IP address to a dynamically allocated public source IP address. このパブリック IP アドレスは 構成することができず、予約することもできません。This public IP address isn't configurable and can't be reserved. このアドレスは、サブスクリプションのパブリック IP リソースの制限に対してカウントされません。This address doesn't count against the subscription's public IP resource limit.

次のものを再デプロイすると、パブリック IP アドレスは解放され、新しいパブリック IP が要求されます。The public IP address will be released and a new public IP requested if you redeploy the:

  • 仮想マシンVirtual Machine
  • 可用性セットAvailability set
  • 仮想マシン スケール セットVirtual machine scale set

許可リストに IP を追加するためにこのシナリオを使用しないでください。Don't use this scenario for adding IPs to an allow list. アウトバウンド動作を明示的に宣言するシナリオ 1 または 2 を使用してください。Use scenario 1 or 2 where you explicitly declare outbound behavior. SNAT ポートは、既定の SNAT ポート割り当て表の説明のとおり事前に割り当てられます。SNAT ports are preallocated as described in the Default SNAT ports allocation table.

ポートの枯渇Exhausting ports

同じ宛先 IP および宛先ポートへのすべての接続には 1 つの SNAT ポートが使用されます。Every connection to the same destination IP and destination port will use a SNAT port. この接続を使用して、バックエンド インスタンスまたは クライアント から サーバー に対する個別の トラフィック フロー が維持されます。This connection maintains a distinct traffic flow from the backend instance or client to a server. このプロセスにより、トラフィックを処理できる個別のポートがサーバーに提供されます。This process gives the server a distinct port on which to address traffic. このプロセスがないと、クライアント コンピューターでは、パケットがどのフローに属するかが認識されません。Without this process, the client machine is unaware of which flow a packet is part of.

複数のブラウザーを使用して、次のような https://www.microsoft.com にアクセスする場合について考えてみましょう。Imagine having multiple browsers going to https://www.microsoft.com, which is:

  • 宛先 IP = 23.53.254.142Destination IP = 23.53.254.142
  • 宛先ポート = 443Destination Port = 443
  • プロトコル = TCPProtocol = TCP

リターン トラフィック用の異なる宛先ポート (接続の確立に使用される SNAT ポート) がないと、クライアントでは 1 つのクエリ結果を別のクエリ結果と区別できません。Without different destination ports for the return traffic (the SNAT port used to establish the connection), the client will have no way to separate one query result from another.

送信接続はバーストする可能性があります。Outbound connections can burst. バックエンド インスタンスに不十分な数のポートが割り当てられる可能性があります。A backend instance can be allocated insufficient ports. 接続の再使用 が有効になっていないと、SNAT ポートの枯渇 が発生するリスクが高まります。Without connection reuse enabled, the risk of SNAT port exhaustion is increased.

ポートの枯渇が発生すると、宛先 IP への新しい送信接続は失敗します。New outbound connections to a destination IP will fail when port exhaustion occurs. ポートが使用可能になると、接続は成功します。Connections will succeed when a port becomes available. この枯渇は、IP アドレスからの 64,000 個のポートが多数のバックエンド インスタンスにわたってまばらに分散されている場合に発生します。This exhaustion occurs when the 64,000 ports from an IP address are spread thin across many backend instances. SNAT ポートの枯渇を軽減するためのガイダンスについては、トラブルシューティング ガイドのページを参照してください。For guidance on mitigation of SNAT port exhaustion, see the troubleshooting guide.

TCP 接続の場合、ロード バランサーにはすべての宛先 IP とポートに 1 つの SNAT ポートが使用されます。For TCP connections, the load balancer will use a single SNAT port for every destination IP and port. この複数使用により、同じ SNAT ポートを使用した同じ宛先 IP への複数の接続が可能になります。This multiuse enables multiple connections to the same destination IP with the same SNAT port. 接続が別の宛先ポートに接続されていない場合、この複数使用は制限されます。This multiuse is limited if the connection isn't to different destination ports.

UDP 接続の場合、ロード バランサーには ポート制限コーン NAT アルゴリズムが使用されます。この場合、宛先ポートに関係なく、宛先 IP ごとに 1 つの SNAT ポートが使用されます。For UDP connections, the load balancer uses a port-restricted cone NAT algorithm, which consumes one SNAT port per destination IP whatever the destination port.

無制限の接続数に対して 1 つのポートが再利用されます。A port is reused for an unlimited number of connections. ポートは、宛先 IP またはポートが異なる場合にのみ再利用されます。The port is only reused if the destination IP or port is different.

既定のポート割り当てDefault port allocation

ロード バランサーのフロントエンド IP として割り当てられた各パブリック IP には、バックエンド プール メンバー用に 64,000 個の SNAT ポートが割り当てられています。Each public IP assigned as a frontend IP of your load balancer is given 64,000 SNAT ports for its backend pool members. ポートをバックエンド プール メンバーと共有することはできません。Ports can't be shared with backend pool members. リターン パケットが正しくルーティングされるようにするために、SNAT ポートの範囲は 1 つのバックエンド インスタンスでのみ使用できます。A range of SNAT ports can only be used by a single backend instance to ensure return packets are routed correctly.

明示的なアウトバウンド規則を使用して SNAT ポートの割り当てを構成することをお勧めします。It's recommended you use an explicit outbound rule to configure SNAT port allocation. この規則を使用して、各バックエンド インスタンスが送信接続に使用できる SNAT ポート数を最大限にします。This rule will maximize the number of SNAT ports each backend instance has available for outbound connections.

負荷分散規則を介した送信 SNAT の自動割り当てを使用する場合、割り当てテーブルによってポートの割り当てが定義されます。Should you use the automatic allocation of outbound SNAT through a load-balancing rule, the allocation table will define your port allocation.

次の表は、バックエンド プール サイズのレベルに対する SNAT ポートの事前割り当てを示しています。The following table shows the SNAT port preallocations for tiers of backend pool sizes:

プール サイズ (VM インスタンス)Pool size (VM instances) IP 構成あたりの事前に割り当てられる SNAT ポートPreallocated SNAT ports per IP configuration
1-501-50 1,0241,024
51-10051-100 512512
101-200101-200 256256
201-400201-400 128128
401-800401-800 6464
801-1,000801-1,000 3232

注意

最大サイズが 10 のバックエンド プールがある場合、明示的なアウトバウンド規則を定義すると、各インスタンスには 64,000/10 = 6,400 個のポートを割り当てることができます。If you have a backend pool with a max size of 10, each instance can have 64,000/10 = 6,400 ports if you define an explicit outbound rule. 上の表によると、自動割り当てを選択した場合、それぞれに 1,024 個しかありません。According to the above table each will only have 1,024 if you choose automatic allocation.

アウトバウンド規則と Virtual Network NATOutbound rules and Virtual Network NAT

Azure Load Balancer のアウトバウンド規則と Virtual Network NAT は、仮想ネットワークからのエグレスに使用できるオプションです。Azure Load Balancer outbound rules and Virtual Network NAT are options available for egress from a virtual network.

アウトバウンド規則の詳細については、アウトバウンド規則に関するページを参照してください。For more information about outbound rules, see Outbound rules.

Azure Virtual Network NAT の詳細については、「Azure Virtual Network NAT とは」を参照してください。For more information about Azure Virtual Network NAT, see What is Azure Virtual Network NAT.

制約Constraints

  • 新しいパケットが送信されず、接続がアイドル状態の場合、ポートは 4 から 120 分後に解放されます。When a connection is idle with no new packets being sent, the ports will be released after 4 – 120 minutes.
  • このしきい値は、アウトバウンド規則を使用して構成できます。This threshold can be configured via outbound rules.
  • 各 IP アドレスには、SNAT に使用できる 64,000 個のポートが用意されています。Each IP address provides 64,000 ports that can be used for SNAT.
  • 各ポートは、宛先 IP アドレスへの TCP 接続と UDP 接続の両方に使用できますEach port can be used for both TCP and UDP connections to a destination IP address
  • 宛先ポートが一意であるかどうかに関係なく、UDP SNAT ポートが必要です。A UDP SNAT port is needed whether the destination port is unique or not. 宛先 IP への UDP 接続ごとに、1 つの UDP SNAT ポートが使用されます。For every UDP connection to a destination IP, one UDP SNAT port is used.
  • 宛先ポートが異なる場合、1 つの TCP SNAT ポートを同じ宛先 IP への複数の接続に使用できます。A TCP SNAT port can be used for multiple connections to the same destination IP provided the destination ports are different.
  • SNAT の枯渇は、バックエンド インスタンスが特定の SNAT ポートによって使い果たされたときに発生します。SNAT exhaustion occurs when a backend instance runs out of given SNAT Ports. この場合も、ロード バランサーには未使用の SNAT ポートを使用することができます。A load balancer can still have unused SNAT ports. バックエンド インスタンスに使用されている SNAT ポート数が指定された SNAT ポート数を超えると、新しい送信接続を確立できなくなります。If a backend instance’s used SNAT ports exceed its given SNAT ports, it will be unable to establish new outbound connections.

次のステップNext steps