Conexões de saída no AzureOutbound connections in Azure

O Azure fornece conectividade de saída para implantações de clientes através de vários mecanismos diferentes.Azure provides outbound connectivity for customer deployments through several different mechanisms. Este artigo descreve quais são os cenários, quando são aplicáveis, como funcionam e como gerenciá-los.This article describes what the scenarios are, when they apply, how they work, and how to manage them.

Observação

Este artigo aborda apenas as implantações do Gerenciador de Recursos.This article covers Resource Manager deployments only. Confira as Conexões de saída (Clássico) para saber sobre todos os cenários de implantação Clássicos no Azure.Review Outbound connections (Classic) for all Classic deployment scenarios in Azure.

Uma implantação no Azure pode comunicar-se com os pontos de extremidade fora do Azure no espaço de endereços IP público.A deployment in Azure can communicate with endpoints outside Azure in the public IP address space. Quando uma instância inicia um fluxo de saída para um destino no espaço de endereços IP público, o Azure mapeia dinamicamente o endereço IP privado para um endereço IP público.When an instance initiates an outbound flow to a destination in the public IP address space, Azure dynamically maps the private IP address to a public IP address. Depois que esse mapeamento é criado, o tráfego de retorno para esse fluxo originado de saída também pode alcançar o endereço IP privado onde o fluxo foi originado.After this mapping is created, return traffic for this outbound originated flow can also reach the private IP address where the flow originated.

O Azure usa SNAT (conversão de endereço de rede de origem) para realizar essa função.Azure uses source network address translation (SNAT) to perform this function. Quando vários endereços IP privados são disfarçados atrás de um único endereço IP público, o Azure usa a PAT (conversão de endereços de porta) para disfarçar endereços IP privados.When multiple private IP addresses are masquerading behind a single public IP address, Azure uses port address translation (PAT) to masquerade private IP addresses. As portas efêmeras são usadas para PAT e são pré-alocadas com base no tamanho do pool.Ephemeral ports are used for PAT and are preallocated based on pool size.

Há vários cenários de saída.There are multiple outbound scenarios. É possível combinar esses cenários conforme necessário.You can combine these scenarios as needed. Revise-os cuidadosamente para entender os recursos, as restrições e os padrões, e como se aplicam ao seu modelo de implantação e cenário de aplicativo.Review them carefully to understand the capabilities, constraints, and patterns as they apply to your deployment model and application scenario. Revise as diretrizes para gerenciar esses cenários.Review guidance for managing these scenarios.

Importante

O Standard Load Balancer e o IP Público Standard apresentam novas habilidades e comportamentos diferentes da conectividade de saída.Standard Load Balancer and Standard Public IP introduce new abilities and different behaviors to outbound connectivity. Eles não são o mesmo que SKUs Básicos.They are not the same as Basic SKUs. Se quiser ter conectividade de saída ao trabalhar com SKUs Standard, você precisará defini-la explicitamente com endereços IP públicos Standard ou com o Load Balancer Standard público.If you want outbound connectivity when working with Standard SKUs, you must explicitly define it either with Standard Public IP addresses or Standard public Load Balancer. Isso inclui a criação de conectividade de saída ao usar um Standard Load Balancer interno.This includes creating outbound connectivity when using an internal Standard Load Balancer. É recomendável que você sempre use regras de saída em um Load Balancer Standard público.We recommend you always use outbound rules on a Standard public Load Balancer. O Cenário 3 não está disponível com o SKU Standard.Scenario 3 is not available with Standard SKU. Isso significa que, quando um Standard Load Balancer for usado, você precisará executar etapas para criar a conectividade de saída para as VMs no pool de back-end se a conectividade de saída for desejada.That means when an internal Standard Load Balancer is used, you need to take steps to create outbound connectivity for the VMs in the backend pool if outbound connectivity is desired. No contexto da conectividade de saída, uma única VM autônoma, todas as VMs em um conjunto de disponibilidade, todas as instâncias em um VMSS se comportam como um grupo.In the context of outbound connectivity, a single standalone VM, all the VM's in an Availability Set, all the instances in a VMSS behave as a group. Isso significa que, se uma única VM em um conjunto de disponibilidade estiver associada a um SKU Standard, todas as instâncias de VM neste conjunto de disponibilidade agora se comportarão de acordo com as mesmas regras que se aplicariam se elas estivessem associados ao SKU Standard, mesmo se uma instância individual não estivesse diretamente associada a ele.This means, if a single VM in an Availability Set is associated with a Standard SKU, all VM instances within this Availability Set now behave by the same rules as if they are associated with Standard SKU, even if an individual instance is not directly associated with it. Revise atentamente todo este documento para entender os conceitos gerais, revise Standard Load Balancer para ver as diferenças entre as SKUs e revise regras de saída.Carefully review this entire document to understand the overall concepts, review Standard Load Balancer for differences between SKUs, and review outbound rules. Usar regras de saída permite ter um controle refinado sobre todos os aspectos da conectividade de saída.Using outbound rules allows you fine grained control over all aspects of outbound connectivity.

Visão geral do cenárioScenario overview

O Azure Load Balancer e os recursos relacionados são explicitamente definidos ao utilizar o Azure Resource Manager.Azure Load Balancer and related resources are explicitly defined when you're using Azure Resource Manager. Atualmente, o Azure fornece três métodos diferentes para alcançar a conectividade de saída para recursos do Azure Resource Manager.Azure currently provides three different methods to achieve outbound connectivity for Azure Resource Manager resources.

SKUsSKUs CenárioScenario MétodoMethod Protocolos IPIP protocols DESCRIÇÃODescription
Standard, BásicoStandard, Basic 1. VM com um endereço IP Público em Nível de Instância (com ou sem Load Balancer)1. VM with an Instance Level Public IP address (with or without Load Balancer) SNAT, disfarce de porta não usadoSNAT, port masquerading not used TCP, UDP, ICMP, ESPTCP, UDP, ICMP, ESP O Azure usa o IP público atribuído à configuração de IP do NIC da instância.Azure uses the public IP assigned to the IP configuration of the instance's NIC. A instância possui todas as portas efêmeras disponíveis.The instance has all ephemeral ports available. Ao usar o Standard Load Balancer, você precisa usar regras de saída para definir explicitamente a conectividade de saídaWhen using Standard Load Balancer, you should use outbound rules to explicitly define outbound connectivity
Standard, BásicoStandard, Basic 2. Load Balancer público associado a uma VM (sem endereço IP Público em Nível de Instância)2. Public Load Balancer associated with a VM (no Instance Level Public IP address on the instance) SNAT com PAT (disfarce de porta) usando front-ends do Load BalancerSNAT with port masquerading (PAT) using the Load Balancer frontends TCP, UDPTCP, UDP O Azure compartilha o endereço IP público dos front-ends do Load Balancer público com vários endereços IP privados.Azure shares the public IP address of the public Load Balancer frontends with multiple private IP addresses. O Azure usa os portas efêmeras dos front-ends para PAT.Azure uses ephemeral ports of the frontends to PAT.
Nenhuma ou Básiconone or Basic 3. VM autônomo (sem Load Balancer, nenhum endereço IP Público em Nível de Instância) 3. Standalone VM (no Load Balancer, no Instance Level Public IP address) SNAT com disfarce de porta (PAT)SNAT with port masquerading (PAT) TCP, UDPTCP, UDP O Azure designa automaticamente um endereço IP público para SNAT, compartilha esse endereço IP público com vários endereços IP privados do conjunto de disponibilidade e usa portas efêmeras desse endereço IP público.Azure automatically designates a public IP address for SNAT, shares this public IP address with multiple private IP addresses of the availability set, and uses ephemeral ports of this public IP address. Esse cenário é um fallback para os cenários anteriores.This scenario is a fallback for the preceding scenarios. Não é recomendável se você precisar de visibilidade e controle.We don't recommend it if you need visibility and control.

Se você não quiser que uma VM comunique-se com os pontos de extremidade fora do Azure no espaço de endereço IP público, poderá usar NSGs (grupos de segurança de rede) para bloquear o acesso conforme necessário.If you don't want a VM to communicate with endpoints outside Azure in public IP address space, you can use network security groups (NSGs) to block access as needed. A seção Impedir conectividade de saída descreve sobre os NSGs mais detalhadamente.The section Preventing outbound connectivity discusses NSGs in more detail. As diretrizes sobre a projeto, implementação e gerenciamento de uma rede virtual sem qualquer acesso de saída estão fora do escopo deste artigo.Guidance on designing, implementing, and managing a virtual network without any outbound access is outside the scope of this article.

Cenário 1: VM com um endereço IP Público no Nível de InstânciaScenario 1: VM with an Instance Level Public IP address

Nesse cenário, a VM tem um ILPIP (IP Público em Nível de Instância) atribuído a ela.In this scenario, the VM has an Instance Level Public IP (ILPIP) assigned to it. No que diz respeito às conexões de saída, não importa se a VM é com balanceamento de carga ou não.As far as outbound connections are concerned, it doesn't matter whether the VM is load balanced or not. Esse cenário tem precedência sobre os outros.This scenario takes precedence over the others. Quando um ILPIP é usado, a VM usa o ILPIP para todos os fluxos de saída.When an ILPIP is used, the VM uses the ILPIP for all outbound flows.

Um IP público atribuído a uma VM é uma relação 1:1 (em vez de 1:muitos) e implementado como sem estado 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. A PAT (disfarce de porta) não é usada e a VM tem todas as portas efêmeras disponíveis para uso.Port masquerading (PAT) is not used, and the VM has all ephemeral ports available for use.

Se o aplicativo iniciar muitos fluxos de saída e for observado um esgotamento da porta SNAT, considere atribuir um ILPIP para mitigar as restrições SNAT.If your application initiates many outbound flows and you experience SNAT port exhaustion, consider assigning an ILPIP to mitigate SNAT constraints. Revise Gerenciar esgotamento de SNAT completamente.Review Managing SNAT exhaustion in its entirety.

Cenário 2: VM com balanceamento de carga sem um Endereço IP Público em Nível de InstânciaScenario 2: Load-balanced VM without an Instance Level Public IP address

Nesse cenário, a VM faz parte de um pool de back-end do balanceador de carga público.In this scenario, the VM is part of a public Load Balancer backend pool. A VM não tem um endereço IP público atribuído a ela.The VM does not have a public IP address assigned to it. O recurso do Load Balancer deve ser configurado com uma regra de balanceador de carga para criar um link entre o front-end de IP público e o pool de back-end.The Load Balancer resource must be configured with a load balancer rule to create a link between the public IP frontend with the backend pool.

Se você não concluir essa configuração da regra, o comportamento será conforme descrito no cenário para VM autônoma sem IP em Nível de Instância.If you do not complete this rule configuration, the behavior is as described in the scenario for Standalone VM with no Instance Level Public IP. Não é necessário que a regra tenha um ouvinte trabalhando no pool de back-end ou a investigação de integridade para ter êxito.It is not necessary for the rule to have a working listener in the backend pool for the health probe to succeed.

Quando a VM com balanceamento de carga cria um fluxo de saída, o Azure converte o endereço IP de origem particular do fluxo de saída para um endereço IP público do frontend do Balanceador de Carga público.When the load-balanced VM creates an outbound flow, Azure translates the private source IP address of the outbound flow to the public IP address of the public Load Balancer frontend. O Azure usa SNAT para executar essa função.Azure uses SNAT to perform this function. O Azure também usa PAT para disfarçar vários endereços IP privados por trás de um endereço IP público.Azure also uses PAT to masquerade multiple private IP addresses behind a public IP address.

As portas efêmeras do front-end do endereço IP público do balanceador de carga são usadas para distinguir os fluxos individuais originados pela VM.Ephemeral ports of the load balancer's public IP address frontend are used to distinguish individual flows originated by the VM. A SNAT usa dinamicamente ortas efêmeras pré-alocadas quando os fluxos de saída são criados.SNAT dynamically uses preallocated ephemeral ports when outbound flows are created. Neste contexto, as portas efêmeras usadas para SNAT são chamadas de portas SNAT.In this context, the ephemeral ports used for SNAT are called SNAT ports.

As portas SNAT são pré-alocadas, conforme descrito na seção Entendendo SNAT e PAT.SNAT ports are pre-allocated as described in the Understanding SNAT and PAT section. Elas são um recurso finito que pode ser esgotado.They're a finite resource that can be exhausted. É importante entender como elas são consumidas.It's important to understand how they are consumed. Para entender como projetar para esse consumo e mitigar, conforme necessário, revise Gerenciar esgotamento de SNAT.To understand how to design for this consumption and mitigate as necessary, review Managing SNAT exhaustion.

Quando vários endereços IP (públicos) estão associados ao Load Balancer Básico, qualquer um desses endereços IP públicos é um candidato para fluxos de saída e um é selecionado aleatoriamente.When multiple public IP addresses are associated with Load Balancer Basic, any of these public IP addresses are a candidate for outbound flows, and one is selected at random.

Para monitorar a integridade das conexões de saída com o Load Balancer Basic, você pode usar logs de Azure monitor para Load Balancer e logs de eventos de alerta para monitorar mensagens de esgotamento de porta SNAT.To monitor the health of outbound connections with Load Balancer Basic, you can use Azure Monitor logs for Load Balancer and alert event logs to monitor for SNAT port exhaustion messages.

Cenário 3: VM autônoma com um Endereço IP Público em Nível de InstânciaScenario 3: Standalone VM without an Instance Level Public IP address

Nesse cenário, a VM não faz parte de um pool público do Load Balancer (e não faz parte de um pool do Load Balancer Standard interno) e não possui um endereço ILPIP atribuído.In this scenario, the VM is not part of a public Load Balancer pool (and not part of an internal Standard Load Balancer pool) and does not have an ILPIP address assigned to it. Quando a VM cria um fluxo de saída, o Azure converte o endereço IP de origem particular do fluxo de saída para um endereço IP de origem pública.When the VM creates an outbound flow, Azure translates the private source IP address of the outbound flow to a public source IP address. O endereço IP público usado para esse fluxo de saída não é configurável e não conta para o limite de recursos IP públicos da assinatura.The public IP address used for this outbound flow is not configurable and does not count against the subscription's public IP resource limit. Esse endereço IP público não pertence a você e não pode ser reservado.This public IP address does not belong to you and cannot be reserved. Se você reimplantar o conjunto de dimensionamento de VMs ou conjuntos de disponibilidade ou máquinas virtuais, esse endereço IP público será liberado e um novo endereço IP público será solicitado.If you redeploy the VM or Availability Set or virtual machine scale set, this public IP address will be released and a new public IP address requested. Não use esse cenário para endereços IP de lista de permissões.Do not use this scenario for whitelisting IP addresses. Em vez disso, use um dos outros dois cenários para declarar explicitamente o cenário de saída e o endereço IP público a ser usado para conectividade de saída.Instead, use one of the other two scenarios where you explicitly declare the outbound scenario and the public IP address to be used for outbound connectivity.

Importante

Esse cenário também será aplicável quando somente um Load Balancer Básico interno estiver conectado.This scenario also applies when only an internal Basic Load Balancer is attached. O cenário 3 será não disponível quando um Load Balancer Standard interno for anexado a uma VM.Scenario 3 is not available when an internal Standard Load Balancer is attached to a VM. É necessário criar explicitamente o cenário 1 ou cenário 2, além de usar um Load Balancer Standard interno.You must explicitly create scenario 1 or scenario 2 in addition to using an internal Standard Load Balancer.

O Azure usa SNAT com disfarce de porta (PAT) para executar essa função.Azure uses SNAT with port masquerading (PAT) to perform this function. Esse cenário é semelhante ao cenário 2, exceto que não há controle sobre o endereço IP usado.This scenario is similar to scenario 2, except there is no control over the IP address used. Este é um cenário de fallback para quando os cenários 1 e 2 não existirem.This is a fallback scenario for when scenarios 1 and 2 do not exist. Não é recomendável esse cenário, se você quiser controlar o endereço de saída.We don't recommend this scenario if you want control over the outbound address. Se as conexões de saída são uma parte crítica do seu aplicativo, você deve escolher outro cenário.If outbound connections are a critical part of your application, you should choose another scenario.

As portas SNAT são pré-alocadas conforme descrito na seção Entendendo SNAT e PAT.SNAT ports are preallocated as described in the Understanding SNAT and PAT section. O número de VMs que compartilham um Conjunto de Disponibilidade determina qual camada de pré-alocação se aplica.The number of VMs sharing an Availability Set determines which preallocation tier applies. Uma VM autônoma sem um Conjunto de Disponibilidade é efetivamente um pool de 1 para fins de determinação de pré-alocação (portas de SNAT 1024).A standalone VM without an Availability Set is effectively a pool of 1 for the purposes of determining preallocation (1024 SNAT ports). As portas SNAT são um recurso finito que pode ser esgotado.SNAT ports are a finite resource that can be exhausted. É importante entender como elas são consumidas.It's important to understand how they are consumed. Para entender como projetar para esse consumo e mitigar, conforme necessário, revise Gerenciar esgotamento de SNAT.To understand how to design for this consumption and mitigate as necessary, review Managing SNAT exhaustion.

Cenários combinados, váriosMultiple, combined scenarios

É possível combinar os cenários descritos nas seções anteriores para alcançar um resultado específico.You can combine the scenarios described in the preceding sections to achieve a particular outcome. Quando vários cenários estão presentes, uma ordem de precedência se aplica: cenário 1 tem precedência sobre o cenário 2 e 3.When multiple scenarios are present, an order of precedence applies: scenario 1 takes precedence over scenario 2 and 3. Cenário 2 substitui cenário 3.Scenario 2 overrides scenario 3.

Um exemplo é uma implantação do Azure Resource Manager onde o aplicativo depende muito das conexões de saída para um número limitado de destinos, mas também recebe fluxos de entrada em um front-end do balanceador de carga.An example is an Azure Resource Manager deployment where the application relies heavily on outbound connections to a limited number of destinations but also receives inbound flows over a Load Balancer frontend. Nesse caso, é possível combinar cenários 1 e 2 por segurança.In this case, you can combine scenarios 1 and 2 for relief. Para padrões adicionais, revise Gerenciar esgotamento de SNAT.For additional patterns, review Managing SNAT exhaustion.

Vários front-ends para fluxos de saídaMultiple frontends for outbound flows

Standard Load BalancerStandard Load Balancer

O Standard Load Balancer usa todos os candidatos para fluxos de saída ao mesmo tempo em que vários IP (públicos) de front-ends estão presentes.Standard Load Balancer uses all candidates for outbound flows at the same time when multiple (public) IP frontends is present. Cada interface multiplicará o número de portas de SNAT pré-alocadas disponíveis, se uma regra de balanceamento de carga estiver habilitada para conexões de saída.Each frontend multiplies the number of available preallocated SNAT ports if a load balancing rule is enabled for outbound connections.

É possível impedir que um endereço IP de front-end seja utilizado para conexões de saída com uma nova opção de regra de balanceamento de carga:You can choose to suppress a frontend IP address from being used for outbound connections with a new load balancing rule option:

      "loadBalancingRules": [
        {
          "disableOutboundSnat": false
        }
      ]

Normalmente, a opção disableOutboundSnat é padronizada como falso e significa que essa regra programa o SNAT de saída para as VMs associadas no pool de back-end da regra de balanceamento de carga.Normally, the disableOutboundSnat option defaults to false and signifies that this rule programs outbound SNAT for the associated VMs in the backend pool of the load balancing rule. O disableOutboundSnat pode ser alterado para verdadeiro para evitar que o Load Balancer use o endereço IP do frontend associado para conexões de saída para as VMs no pool de back-end dessa regra de balanceamento de carga.The disableOutboundSnat can be changed to true to prevent Load Balancer from using the associated frontend IP address for outbound connections for the VMs in the backend pool of this load balancing rule. Além disso, você também pode designar um endereço IP específico para os fluxos de saída, conforme descrito em Cenários múltiplos e combinados.And you can also still designate a specific IP address for outbound flows as described in Multiple, combined scenarios as well.

Load Balancer BásicoLoad Balancer Basic

O Load Balancer Basic escolhe um único front-end para ser utilizado em fluxos de saída quando vários front-ends de IP (público) forem candidatos para fluxos de saída.Load Balancer Basic chooses a single frontend to be used for outbound flows when multiple (public) IP frontends are candidates for outbound flows. Essa seleção não é configurável e você deverá considerar o algoritmo de seleção como aleatório.This selection is not configurable, and you should consider the selection algorithm to be random. Você pode designar um endereço IP específico para a saída, conforme descrito em Cenários múltiplos e combinados.You can designate a specific IP address for outbound flows as described in Multiple, combined scenarios.

Zonas de DisponibilidadesAvailability Zones

Ao usar o Load Balancer Standard com Zonas de Disponibilidade, os front-ends com redundância de zona podem fornecer conexões de SNAT de saída com redundância de zona e a programação de SNAT sobrevive à falha da zona.When using Standard Load Balancer with Availability Zones, zone-redundant frontends can provide zone-redundant outbound SNAT connections and SNAT programming survives zone failure. Quando front-ends zonais são utilizados, as conexões de SNAT de saída compartilham o destino com a zona à qual pertencem.When zonal frontends are used, outbound SNAT connections share fate with the zone they belong to.

Entendendo SNAT e PATUnderstanding SNAT and PAT

Disfarce de porta SNAT (PAT)Port masquerading SNAT (PAT)

Quando um recurso público do Load Balancer estiver associado a instâncias VM, cada fonte de conexão de saída será reescrita.When a public Load Balancer resource is associated with VM instances, each outbound connection source is rewritten. A origem é regravada do espaço do endereço IP privado da rede virtual para o endereço IP Público de front-end do balanceador de carga.The source is rewritten from the virtual network private IP address space to the frontend Public IP address of the load balancer. No espaço de endereço IP público, as 5 tuplas do fluxo (endereço IP de origem, porta de origem, protocolo de transporte IP, endereço IP de destino, porta de destino) devem ser exclusivas.In the public IP address space, the 5-tuple of the flow (source IP address, source port, IP transport protocol, destination IP address, destination port) must be unique. O SNAT simulado de porta pode ser usado com protocolos TCP ou IP UDP.Port masquerading SNAT can be used with either TCP or UDP IP protocols.

As portas efêmeras (portas SNAT) são usadas para conseguir isso após a regravação do endereço IP de origem privada, já que vários fluxos originam-se de um único endereço IP público.Ephemeral ports (SNAT ports) are used to achieve this after rewriting the private source IP address, because multiple flows originate from a single public IP address. O algoritmo de SNAT de disfarce de porta aloca as portas SNAT de forma diferente para UDP e TCP.The port masquerading SNAT algorithm allocates SNAT ports differently for UDP versus TCP.

Portas SNAT TCPTCP SNAT Ports

Uma porta SNAT é consumida por fluxo para um único endereço IP e porta de destino.One SNAT port is consumed per flow to a single destination IP address, port. Para vários fluxos TCP para o mesmo endereço IP, porta e protocolo de destino, cada fluxo TCP consome uma única porta SNAT.For multiple TCP flows to the same destination IP address, port, and protocol, each TCP flow consumes a single SNAT port. Isso garante que os fluxos sejam exclusivos quando são originados do mesmo endereço IP público e sigam para o mesmo endereço IP, porta e protocolo de destino.This ensures that the flows are unique when they originate from the same public IP address and go to the same destination IP address, port, and protocol.

Vários fluxos, cada um para um endereço IP, porta e protocolo de destino diferente, compartilham uma única porta SNAT.Multiple flows, each to a different destination IP address, port, and protocol, share a single SNAT port. O endereço IP de destino, porta e protocolo tornam os fluxos exclusivos sem a necessidade de portas de origem adicionais para distinguir fluxos no espaço de endereço IP público.The destination IP address, port, and protocol make flows unique without the need for additional source ports to distinguish flows in the public IP address space.

Portas SNAT UDPUDP SNAT Ports

Portas SNAT UDP são gerenciadas por um algoritmo diferente do que as portas SNAT TCP.UDP SNAT ports are managed by a different algorithm than TCP SNAT ports. O Load Balancer usa um algoritmo conhecido como "NAT de cone com restrição de porta" para UDP.Load Balancer uses an algorithm known as "port-restricted cone NAT" for UDP. Uma porta SNAT é consumida para cada fluxo, independentemente do endereço IP e da porta de destino.One SNAT port is consumed for each flow, irrespective of destination IP address, port.

EsgotamentoExhaustion

Quando os recursos da porta SNAT estão esgotados, os fluxos de saída falham até que os fluxos existentes liberem as portas SNAT.When SNAT port resources are exhausted, outbound flows fail until existing flows release SNAT ports. O balanceador de carga recupera as portas SNAT quando o fluxo fecha e usa um tempo limite de ociosidade de 4 minutos para recuperar as portas SNAT dos fluxos ociosos.Load Balancer reclaims SNAT ports when the flow closes and uses a 4-minute idle timeout for reclaiming SNAT ports from idle flows.

Portas SNAT UDP geralmente esgotam-se muito mais rapidamente que as portas SNAT TCP devido à diferença no algoritmo usado.UDP SNAT ports generally exhaust much faster than TCP SNAT ports due to the difference in algorithm used. Você deve projetar e realizar os testes de escala com essa diferença em mente.You must design and scale test with this difference in mind.

Para padrões para mitigar condições que geralmente levam ao esgotamento da porta SNAT, revise a seção Gerenciar SNAT.For patterns to mitigate conditions that commonly lead to SNAT port exhaustion, review the Managing SNAT section.

Pré-alocação de porta efêmera para a porta de disfarce SNAT (PAT)Ephemeral port preallocation for port masquerading SNAT (PAT)

O Azure usa um algoritmo para determinar o número de portas SNAT pré-alocadas disponíveis com base no tamanho do pool do back-end ao usar a porta de disfarce SNAT (PAT).Azure uses an algorithm to determine the number of preallocated SNAT ports available based on the size of the backend pool when using port masquerading SNAT (PAT). As portas SNAT são portas efêmeras disponíveis para um determinado endereço de origem IP público.SNAT ports are ephemeral ports available for a particular public IP source address.

O mesmo número de portas SNAT é pré-alocado respectivamente para TCP e UDP e independentemente consumido por protocolo de transporte IP.The same number of SNAT ports are preallocated for UDP and TCP respectively and consumed independently per IP transport protocol. No entanto, o uso da porta SNAT é diferente dependendo de o fluxo ser UDP ou TCP.However, the SNAT port usage is different depending on whether the flow is UDP or TCP.

Importante

Programação SNAT de SKU Padrão por protocolo de transporte IP e derivada da regra de balanceamento de carga.Standard SKU SNAT programming is per IP transport protocol and derived from the load balancing rule. Se houver uma regra de balanceamento de carga TCP, apenas SNAT só estará disponível para TCP.If only a TCP load balancing rule exists, SNAT is only available for TCP. Se você tiver apenas uma regra balanceamento de carga TCP e precisar de SNAT de saída para UDP, crie uma regra UDP do mesmo front-end para o mesmo pool de back-end de balanceamento de carga.If you have only a TCP load balancing rule and need outbound SNAT for UDP, create a UDP load balancing rule from the same frontend to the same backend pool. Isso vai ativar a programação SNAT para UDP.This will trigger SNAT programming for UDP. Não é necessário uma regra de trabalho ou investigação de integridade.A working rule or health probe is not required. A SNAT do SKU básico sempre programa a SNAT para ambos os protocolo de transporte IP, independentemente do protocolo de transporte especificado na regra de balanceamento de carga.Basic SKU SNAT always programs SNAT for both IP transport protocol, irrespective of the transport protocol specified in the load balancing rule.

O Azure pré-aloca as portas SNAT para a configuração IP do NIC de cada VM.Azure preallocates SNAT ports to the IP configuration of the NIC of each VM. Quando uma configuração IP é adicionada ao pool, as portas SNAT são pré-atribuídas para essa configuração de IP com base no tamanho do pool do back-end.When an IP configuration is added to the pool, the SNAT ports are preallocated for this IP configuration based on the backend pool size. Quando os fluxos de saída são criados, a PAT consome dinamicamente (até o limite pré-alocado) e libera essas portas quando o fluxo fecha ou ocorre tempo limite ocioso.When outbound flows are created, PAT dynamically consumes (up to the preallocated limit) and releases these ports when the flow closes or idle timeouts happen.

A tabela a seguir mostra as pré-alocações de porta SNAT para níveis de tamanhos de pool de back-end:The following table shows the SNAT port preallocations for tiers of backend pool sizes:

Tamanho do pool (instâncias VM)Pool size (VM instances) Portas SNAT pré-alocadas por configuração de IPPreallocated 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

Observação

Ao utilizar o Standard Load Balancer com vários front-ends, cada endereço IP de front-end multiplica o número de portas de SNAT disponíveis na tabela anterior.When using Standard Load Balancer with multiple frontends, each frontend IP address multiplies the number of available SNAT ports in the previous table. Por exemplo, um conjunto de back-end de 50 VMs com 2 regras de balanceamento de carga, cada uma com um endereço IP front-end separado, usará 2048 (2x 1024) portas SNAT por configuração de IP.For example, a backend pool of 50 VM's with 2 load balancing rules, each with a separate frontend IP address, will use 2048 (2x 1024) SNAT ports per IP configuration. Consulte os detalhes para vários front-ends.See details for multiple frontends.

Lembre-se de que o número de portas SNAT disponíveis não movem diretamente em número de fluxos.Remember that the number of SNAT ports available does not translate directly to number of flows. Uma única porta SNAT pode ser reutilizada para vários destinos exclusivos.A single SNAT port can be reused for multiple unique destinations. As portas são consumidas apenas se for necessário fazer fluxos exclusivos.Ports are consumed only if it's necessary to make flows unique. Para diretrizes de projeto e mitigação, consulte a seção sobre como gerenciar esse recurso esgotável e a seção que descreve a PAT.For design and mitigation guidance, refer to the section about how to manage this exhaustible resource and the section that describes PAT.

Alterar o tamanho do pool de back-end pode afetar alguns dos fluxos estabelecidos.Changing the size of your backend pool might affect some of your established flows. Se o tamanho do pool de back-end aumenta e faz transições para a próxima camada, metade das suas portas SNAT pré-alocadas é recuperada durante a transição para a próxima camada maior de pool de back-end.If the backend pool size increases and transitions into the next tier, half of your preallocated SNAT ports are reclaimed during the transition to the next larger backend pool tier. Os fluxos que estão associados a uma porta SNAT recuperada atingirão limite de tempo e deverão ser restabelecidos.Flows that are associated with a reclaimed SNAT port will time out and must be reestablished. Se um novo fluxo for tentado, o fluxo terá êxito imediato, desde que as portas pré-alocadas estejam disponíveis.If a new flow is attempted, the flow will succeed immediately as long as preallocated ports are available.

Se o tamanho do pool de back-end diminuir e fizer transição para uma camada mais baixa, o número de portas SNAT disponíveis aumentará.If the backend pool size decreases and transitions into a lower tier, the number of available SNAT ports increases. Nesse caso, as portas SNAT alocadas existentes e seus respectivos fluxos não são afetados.In this case, existing allocated SNAT ports and their respective flows are not affected.

As alocações de portas SNAT são o protocolo de transporte IP específico (TCP e UDP são mantidas separadamente) e são liberadas sob as seguintes condições:SNAT ports allocations are IP transport protocol specific (TCP and UDP are maintained separately) and are released under the following conditions:

Liberação da porta TCP SNATTCP SNAT port release

  • Se o servidor/cliente enviar FINACK, a porta SNAT será liberada após 240 segundos.If either server/client sends FINACK, SNAT port will be released after 240 seconds.
  • Se um RST for visto, a porta SNAT será liberada após 15 segundos.If a RST is seen, SNAT port will be released after 15 seconds.
  • Se o tempo limite de ociosidade tiver sido atingido, a porta será liberada.If idle timeout has been reached, port is released.

Liberação da porta UDP SNATUDP SNAT port release

  • Se o tempo limite de ociosidade tiver sido atingido, a porta será liberada.If idle timeout has been reached, port is released.

Solução de problemasProblem solving

Esta seção destina-se a ajudar a mitigar o esgotamento de SNAT e que pode ocorrer com conexões de saída no Azure.This section is intended to help mitigate SNAT exhaustion and that can occur with outbound connections in Azure.

Gerenciar esgotamento da porta SNAT (PAT)Managing SNAT (PAT) port exhaustion

As portas efêmeras usadas para PAT são um recurso esgotável, conforme descrito em VM autônoma sem um Endereço IP Público em Nível de Instância e VM com balanceamento de carga sem um Endereço IP Público em Nível de Instância.Ephemeral ports used for PAT are an exhaustible resource, as described in Standalone VM without an Instance Level Public IP address and Load-balanced VM without an Instance Level Public IP address.

Se você sabe que está iniciando muitas conexões TCP ou UDP de saída para o mesmo endereço e porta IP de destino, se você observa as conexões de saída com falha ou é avisado pelo suporte que as portas SNAT (portas efêmeras pré-alocadas usadas pela PAT) estão se esgotando, você terá várias opções gerais de mitigação.If you know that you're initiating many outbound TCP or UDP connections to the same destination IP address and port, and you observe failing outbound connections or are advised by support that you're exhausting SNAT ports (preallocated ephemeral ports used by PAT), you have several general mitigation options. Avalie essas opções e decida o que está disponível e melhor para o seu cenário.Review these options and decide what is available and best for your scenario. É possível que uma ou mais possam ajudar a gerenciar esse cenário.It's possible that one or more can help manage this scenario.

Se você tiver problemas para entender o comportamento da conexão de saída, poderá usar as estatísticas de pilha de IP (netstat).If you are having trouble understanding the outbound connection behavior, you can use IP stack statistics (netstat). Ou pode ser útil observar comportamentos de conexão usando capturas de pacote.Or it can be helpful to observe connection behaviors by using packet captures. Você pode executar essas capturas de pacotes no sistema operacional convidado da sua instância ou usar o Observador de Rede para captura de pacote.You can perform these packet captures in the guest OS of your instance or use Network Watcher for packet capture.

Modificar o aplicativo para reutilizar conexõesModify the application to reuse connections

Você pode reduzir a demanda por portas efêmeras usadas para SNAT, reutilizando as conexões em sua aplicação.You can reduce demand for ephemeral ports that are used for SNAT by reusing connections in your application. Isto é especialmente verdadeiro para protocolos como HTTP/1.1, onde a reutilização de conexão é a padrão.This is especially true for protocols like HTTP/1.1, where connection reuse is the default. E outros protocolos que usam o HTTP como seu transporte (por exemplo, REST) podem se beneficiar por sua vez.And other protocols that use HTTP as their transport (for example, REST) can benefit in turn.

A reutilização é sempre melhor que as conexões TCP individuais e atômicas para cada solicitação.Reuse is always better than individual, atomic TCP connections for each request. A reutilização resulta em transações TCP mais eficazes e muito eficientes.Reuse results in more performant, very efficient TCP transactions.

Modificar o aplicativo para usar o pooling de conexãoModify the application to use connection pooling

Você pode empregar um esquema de pooling de conexão em seu aplicativo, onde as solicitações são distribuídas internamente em um conjunto de conexões fixo (cada reutilização sempre que possível).You can employ a connection pooling scheme in your application, where requests are internally distributed across a fixed set of connections (each reusing where possible). Esse esquema restringe o número de portas efêmeras em uso e cria um ambiente mais previsível.This scheme constrains the number of ephemeral ports in use and creates a more predictable environment. Esse esquema também pode aumentar a taxa de transferência de solicitações, permitindo múltiplas operações simultâneas quando uma única conexão está bloqueando na resposta de uma operação.This scheme can also increase the throughput of requests by allowing multiple simultaneous operations when a single connection is blocking on the reply of an operation.

O pooling de conexão já pode existir dentro da estrutura que você está utilizando para desenvolver o aplicativo ou as configurações para o aplicativo.Connection pooling might already exist within the framework that you're using to develop your application or the configuration settings for your application. É possível combinar pooling de conexão com reuso de conexão.You can combine connection pooling with connection reuse. As várias solicitações, então, consomem um número fixo e previsível de portas para o mesmo endereço e porta IP de destino.Your multiple requests then consume a fixed, predictable number of ports to the same destination IP address and port. As solicitações também beneficiam-se do uso eficiente das transações TCP, reduzindo a latência e a utilização dos recursos.The requests also benefit from efficient use of TCP transactions reducing latency and resource utilization. As transações UDP também podem beneficiar, porque o gerenciamento do número de fluxos UDP pode, por sua vez, evitar condições de esgotamento e gerenciar a utilização da porta SNAT.UDP transactions can also benefit, because managing the number of UDP flows can in turn avoid exhaust conditions and manage the SNAT port utilization.

Modificar o aplicativo para usar uma lógica de repetição menos agressivaModify the application to use less aggressive retry logic

Quando as portas efêmeras pré-alocadas usadas para PAT estão esgotadas ou se ocorrem falhas no aplicativo, repetições de força bruta ou agressivas sem lógica de declínio e retirada fazem com que o esgotamento ocorra ou persista.When preallocated ephemeral ports used for PAT are exhausted or application failures occur, aggressive or brute force retries without decay and backoff logic cause exhaustion to occur or persist. Você pode reduzir a demanda de portas efêmeras usando uma lógica de repetição menos agressiva.You can reduce demand for ephemeral ports by using a less aggressive retry logic.

As portas efêmeras têm um tempo limite de ociosidade de 4 minutos (não ajustável).Ephemeral ports have a 4-minute idle timeout (not adjustable). Se as tentativas forem muito agressivas, o esgotamento não terá oportunidade de limpar por conta própria.If the retries are too aggressive, the exhaustion has no opportunity to clear up on its own. Portanto, considerando como -- e com que frequência -- o aplicativo reage transações é uma parte crítica do projeto.Therefore, considering how--and how often--your application retries transactions is a critical part of the design.

Atribuir um IP Público em Nível de Instância a cada VMAssign an Instance Level Public IP to each VM

Atribuir um ILPIP altera seu cenário para IP Público em Nível de Instância para uma VM.Assigning an ILPIP changes your scenario to Instance Level Public IP to a VM. Todas as portas efêmeras do IP público que são usadas para cada VM estão disponíveis para a VM.All ephemeral ports of the public IP that are used for each VM are available to the VM. (Em oposição aos cenários em que as portas efêmeras de um IP público são compartilhadas com todas as VMs associadas ao respectivo grupo de back-end.) Há compromissos a considerar, tais como o custo adicional dos endereços IP públicos e o potencial impacto da listagem de permissões de um grande número de endereços IP individuais.(As opposed to scenarios where ephemeral ports of a public IP are shared with all the VMs associated with the respective backend pool.) There are trade-offs to consider, such as the additional cost of public IP addresses and the potential impact of whitelisting a large number of individual IP addresses.

Observação

Essa opção não está disponível para as funções de trabalho da Web.This option is not available for web worker roles.

Utilizar vários front-endsUse multiple frontends

Ao utilizar o Load Balancer Standard púbico, você atribui vários endereços IP de front-end para conexões de saída e multiplica o número de portas de SNAT disponíveis.When using public Standard Load Balancer, you assign multiple frontend IP addresses for outbound connections and multiply the number of SNAT ports available. Crie uma configuração IP front-end, uma regra e um pool de back-end para acionar a programação do SNAT para o IP público do frontend.Create a frontend IP configuration, rule, and backend pool to trigger the programming of SNAT to the public IP of the frontend. A regra não precisa funcionar e uma análise de integridade não precisa ter êxito.The rule does not need to function and a health probe does not need to succeed. Se você usar vários frontends para a entrada também (em vez de apenas para saída), use bem os probes de integridade personalizados para garantir a confiabilidade.If you do use multiple frontends for inbound as well (rather than just for outbound), you should use custom health probes well to ensure reliability.

Observação

Na maioria dos casos, o esgotamento das portas de SNAT é um sinal de design inapropriado.In most cases, exhaustion of SNAT ports is a sign of bad design. Antes de utilizar mais front-ends para adicionar portas de SNAT, certifique-se de reconhecer por que as portas estão esgotando.Make sure you understand why you are exhausting ports before using more frontends to add SNAT ports. É possível que esteja mascarando um problema que posteriormente poderá resultar em falha.You may be masking a problem which can lead to failure later.

ExpansãoScale out

As portas pré-designadas são atribuídas com base no tamanho do pool de back-end e agrupadas em camadas para minimizar a interrupção quando algumas das portas precisam ser realocadas para acomodar a próxima camada de tamanho do pool de back-end.Preallocated ports are assigned based on the backend pool size and grouped into tiers to minimize disruption when some of the ports have to be reallocated to accommodate the next larger backend pool size tier. Você pode ter a opção de aumentar a intensidade da utilização da porta SNAT para um determinado frontend, dimensionando o pool de back-end para o tamanho máximo de um determinado nível.You may have an option to increase the intensity of SNAT port utilization for a given frontend by scaling your backend pool to the maximum size for a given tier. Isso requer que o aplicativo dimensione com eficiência.This requires for the application to scale out efficiently.

Por exemplo, duas máquinas virtuais no pool de back-end teriam 1024 portas SNAT disponíveis por configuração de IP, permitindo um total de 2048 portas SNAT para a implantação.For example, two virtual machines in the backend pool would have 1024 SNAT ports available per IP configuration, allowing a total of 2048 SNAT ports for the deployment. Se a implantação for aumentada para 50 máquinas virtuais, mesmo que o número de portas pré-alocas permaneça constante por máquina virtual, um total de portas SNAT 51.200 (50 x 1024) podem ser usadas pela implantação.If the deployment were to be increased to 50 virtual machines, even though the number of preallocated ports remains constant per virtual machine, a total of 51,200 (50 x 1024) SNAT ports can be used by the deployment. Se você deseja expandir sua implantação, verifique o número de portas pré-alocadas por nível para certificar-se que você dimensionou ao máximo para a camada respectiva.If you wish to scale out your deployment, check the number of preallocated ports per tier to make sure you shape your scale out to the maximum for the respective tier. No exemplo anterior, se você tivesse escolhido dimensionar para 51 em vez de 50 instâncias, você progrediria para a próxima camada e acabaria com menos portas SNAT por VM, assim como no total.In the preceding example, if you had chosen to scale out to 51 instead of 50 instances, you would progress to the next tier and end up with fewer SNAT ports per VM as well as in total.

Se você escalar horizontalmente para a próxima camada de tamanho maior de pool de back-end, há potencial para que algumas das conexões de saída atinjam tempo limite se as portas alocadas precisarem ser realocadas.If you scale out to the next larger backend pool size tier, there is potential for some of your outbound connections to time out if allocated ports have to be reallocated. Se você estiver usando apenas algumas das portas SNAT, escalar horizontalmente no próximo tamanho maior de pool de back-end é irrelevante.If you are only using some of your SNAT ports, scaling out across the next larger backend pool size is inconsequential. Metade das portas existentes será realocada cada vez que você mover para a próxima camada de pool de back-end.Half the existing ports will be reallocated each time you move to the next backend pool tier. Se não desejar que isso ocorra, é necessário formatar sua implantação para o tamanho da camada.If you don't want this to take place, you need to shape your deployment to the tier size. Ou, verifique se seu aplicativo pode detectar e repita conforme necessário.Or make sure your application can detect and retry as necessary. TCP keepalives podem ajudá-lo a detectar quando as portas SNAT não funcionam mais devido a terem sido realocadas.TCP keepalives can assist in detect when SNAT ports no longer function due to being reallocated.

Usar keepalives para redefinir o tempo limite ocioso de saídaUse keepalives to reset the outbound idle timeout

Conexões de saída têm um tempo limite de ociosidade de 4 minutos.Outbound connections have a 4-minute idle timeout. Esse tempo limite não é ajustado.This timeout is not adjustable. No entanto, você pode usar o transporte (por exemplo, TCP keepalives) ou keepalives da camada de aplicação para atualizar um fluxo ocioso e redefinir esse tempo limite ocioso, se necessário.However, you can use transport (for example, TCP keepalives) or application-layer keepalives to refresh an idle flow and reset this idle timeout if necessary.

Ao usar TCP keepalives, é suficiente habilitá-los em um lado da conexão.When using TCP keepalives, it is sufficient to enable them on one side of the connection. Por exemplo, é suficiente habilitá-las no lado do servidor apenas para redefinir o timer de ociosidade do fluxo e não é necessário para os dois lados iniciados do TCP keepalives.For example, it is sufficient to enable them on the server side only to reset the idle timer of the flow and it is not necessary for both sides to initiated TCP keepalives. Conceitos semelhantes existem para a camada de aplicativo, incluindo as configurações de cliente-servidor de banco de dados.Similar concepts exist for application layer, including database client-server configurations. Verifique o lado do servidor para as opções existentes para o aplicativo keepalives específico.Check the server side for what options exist for application specific keepalives.

Descobrir o IP público que usa uma VMDiscovering the public IP that a VM uses

Há várias maneiras de determinar o endereço IP público de uma conexão de saída.There are many ways to determine the public source IP address of an outbound connection. O OpenDNS fornece um serviço que pode mostrar o endereço IP público de sua VM.OpenDNS provides a service that can show you the public IP address of your VM.

Usando o comando nslookup, você pode enviar uma consulta DNS para o nome myip.opendns.com para o resolvedor do OpenDNS.By using the nslookup command, you can send a DNS query for the name myip.opendns.com to the OpenDNS resolver. O serviço retornará o endereço IP de origem que foi usado para enviar a consulta.The service returns the source IP address that was used to send the query. Quando você executa a consulta a seguir de sua VM, a resposta será o IP público usado para essa VM:When you run the following query from your VM, the response is the public IP used for that VM:

nslookup myip.opendns.com resolver1.opendns.com

Impedir conectividade de saídaPreventing outbound connectivity

Às vezes, não é desejável que uma VM tenha permissão para criar um fluxo de saída.Sometimes it's undesirable for a VM to be allowed to create an outbound flow. Ou pode haver um requisito para gerenciar quais destinos podem ser alcançados com os fluxos de saída ou quais destinos podem começar os fluxos de entrada.Or there might be a requirement to manage which destinations can be reached with outbound flows, or which destinations can begin inbound flows. Nesse caso, é possível usar os grupos de segurança de rede para gerenciar os destinos que a VM pode acessar.In this case, you can use network security groups to manage the destinations that the VM can reach. Você também pode usar NSGs para gerenciar qual destino público pode iniciar os fluxos de entrada.You can also use NSGs to manage which public destination can initiate inbound flows.

Ao aplicar um NSG a uma VM com balanceamento de carga, atente-se às marcas de serviço e às regras de segurança padrão.When you apply an NSG to a load-balanced VM, pay attention to the service tags and default security rules. Certifique-se de que a VM possa receber solicitações de investigação de integridade do Azure Load Balancer.You must ensure that the VM can receive health probe requests from Azure Load Balancer.

Se um NSG bloquear solicitações de investigação de integridade da marcação padrão AZURE_LOADBALANCER, o teste de integridade da VM falhará e a VM será reduzida.If an NSG blocks health probe requests from the AZURE_LOADBALANCER default tag, your VM health probe fails and the VM is marked down. O Balanceador de Carga interrompe o envio de novos fluxos para a VM.Load Balancer stops sending new flows to that VM.

LimitaçõesLimitations

  • DisableOutboundSnat não está disponível como uma opção ao configurar uma regra de balanceamento de carga no portal.DisableOutboundSnat is not available as an option when configuring a load balancing rule in the portal. Ao invés disso, utilize ferramentas de cliente, modelo ou REST.Use REST, template, or client tools instead.
  • Funções de trabalho sem uma rede virtual e outros serviços da plataforma Microsoft podem ser acessados quando apenas um Standard Load Balancer interno é usado devido a um efeito colateral de como os serviços pré-VNet e outros serviços da plataforma funcionam.Web Worker Roles without a VNet and other Microsoft platform services can be accessible when only an internal Standard Load Balancer is used due to a side effect from how pre-VNet services and other platform services function. Não confie neste efeito colateral como o próprio serviço em si ou a plataforma subjacente pode mudar sem aviso prévio.Do not rely on this side effect as the respective service itself or the underlying platform may change without notice. Você sempre deve supor que precisa criar conectividade de saída explicitamente se desejado ao usar apenas um Standard Load Balancer interno.You must always assume you need to create outbound connectivity explicitly if desired when using an internal Standard Load Balancer only. O cenário SNAT padrão 3 descrito neste artigo não está disponível.The default SNAT scenario 3 described in this article is not available.

Próximas etapasNext steps