Use a SNAT (Conversão de Endereços de Rede de Origem) para conexões de saída
Determinados cenários exigem que máquinas virtuais ou instâncias de computação tenham conectividade de saída com a Internet. Os IPs de front-end de um balanceador de carga público podem ser usados para fornecer conectividade de saída à Internet para instâncias de back-end. Essa configuração usa a SNAT (conversão de endereços de rede de origem) para converter IP privado da máquina virtual no endereço IP público do balanceador de carga. A SNAT mapeia o endereço IP do back-end para o IP do balanceador de carga. O SNAT impede que fontes externas tenham um endereço direto para as instâncias de back-end.
Métodos de conectividade de saída do Azure
Os seguintes métodos são os métodos mais usados do Azure para habilitar a conectividade de saída:
# | Método | Tipo de alocação de porta | Grau de produção? | Classificação |
---|---|---|---|---|
1 | Use os endereços IP de front-end de um balanceador de carga para saída por meio de regras de saída | Estático, explícito | Sim, mas não em escala | OK |
2 | Associe um gateway da NAT à sub-rede | Dinâmico, explícito | Sim | Melhor |
3 | Atribuir um IP público à máquina virtual | Estático, explícito | Sim | OK |
4 | Acesso de saída padrão | Implícita | Não | Pior |
1. Use o endereço IP de front-end de um balanceador de carga para saída por meio de regras de saída
As regras de saída permitem que você defina explicitamente o SNAT (conversão de endereços de rede de origem) para um balanceador de carga público standard de SKU padrão. Essa configuração permite que você use o IP público ou os IPs do balanceador de carga para conectividade de saída das instâncias de back-end.
Essa configuração permite:
Representação de IP
Simplificando as listas de permitidos
Reduz o número de recursos IP públicos para implantação
Com as regras de saída, você tem total controle declarativo sobre a conectividade de saída para a Internet. As regras de saída permitem escalar e ajustar essa capacidade às suas necessidades específicas por meio da alocação manual de porta. Alocar manualmente a porta SNAT com base no tamanho do pool de back-end e no número de frontendIPConfigurations pode ajudar a evitar o esgotamento de SNAT.
Você pode alocar manualmente portas SNAT por "portas por instância" ou "número máximo de instâncias de back-end". Se você tiver máquinas virtuais no back-end, é recomendável alocar portas por "portas por instância" para obter o uso máximo da porta SNAT.
Calcule as portas por instância da seguinte maneira:
Número de IPs de front-end * 64K / Número de instâncias de back-end
Se você tiver Conjuntos de Dimensionamento de Máquinas Virtuais no back-end, é recomendável alocar portas por "número máximo de instâncias de back-end". Se mais VMs forem adicionadas ao back-end do que as portas SNAT restantes permitidas, é possível que o escalonamento horizontal dos Conjuntos de Dimensionamento de Máquinas Virtuais esteja bloqueado ou que as novas VMs não receberão portas SNAT suficientes.
Quando vários IPs de front-end são configurados usando regras de saída, as conexões de saída podem vir de qualquer um dos IPs de front-end configurados para a instância de back-end. Não é recomendado a criação de dependências nas quais o IP de front-end pode ser selecionado para conexões.
Para obter mais informações sobre regras de saída, confira Regra de saída.
2. Associe um gateway da NAT à sub-rede
O Gateway da NAT do Azure simplifica a conectividade com a Internet somente de saída para redes virtuais. Quando configurado em uma sub-rede, toda a conectividade de saída usa seus endereços IP públicos estáticos especificados. A conectividade de saída é possível sem endereços IP públicos ou de balanceador de carga conectados diretamente a máquinas virtuais. O Gateway da NAT é totalmente gerenciado e altamente resiliente.
Usar um gateway nat é o melhor método para conectividade de saída. Um gateway nat é altamente extensível, confiável e não tem as mesmas preocupações de esgotamento de porta do SNAT.
O Gateway da NAT tem precedência sobre outros métodos de conectividade de saída, incluindo um balanceador de carga, endereços IP públicos no nível da instância e Firewall do Azure.
Para obter mais informações sobre o Gateway da NAT do Azure, confira O que é o Gateway NAT do Azure.
3. Atribuir um IP público à máquina virtual
Associações | Método | Protocolos IP |
---|---|---|
IP público na NIC da VM | A SNAT (conversão de endereços de rede de origem) não é usada. |
Protocolo TCP protocolo UDP protocolo ICMP protocolo ESP |
O tráfego retorna ao cliente solicitante do endereço IP público da máquina virtual (IP no nível da instância).
O Azure usa o IP atribuído à configuração de IP do NIC da instância para todos os fluxos de saída. A instância possui todas as portas efêmeras disponíveis. Não importa se a VM é ou não de balanceamento de carga. Esse cenário tem precedência sobre os outros, exceto para o Gateway da NAT.
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.
4. Acesso de saída padrão
No Azure, as VM (máquinas virtuais) criadas em uma rede virtual sem conectividade de saída explícita definida são atribuídas a um endereço IP público de saída padrão. Esse endereço IP permite a conectividade de saída dos recursos para a Internet. Esse acesso é conhecido como acesso de saída padrão. Esse método de acesso não é recomendado, pois não é seguro e os endereços IP estão sujeitos a alterações.
Importante
Em 30 de setembro de 2025, o acesso de saída padrão para novas implantações será desativado. Para saber mais, confira o anúncio oficial. Recomendamos usar uma das formas explícitas de conectividade, conforme mostrado nas opções 1 a 3 acima.
O que são portas SNAT?
As portas são usadas para gerar identificadores exclusivos usados para manter fluxos distintos. A Internet usa uma tupla de cinco para fornecer essa distinção.
Se uma porta for usada para conexões de entrada, ela terá um ouvinte para solicitações de conexão de entrada nessa porta. Essa porta não pode ser usada para conexões de saída. Para estabelecer uma conexão de saída, uma porta efêmera é usada para fornecer o destino com uma porta na qual se comunicará e manterá um fluxo de tráfego distinto. Quando essas portas efêmeras são usadas para SNAT, são chamadas de portas SNAT.
Por definição, cada endereço IP tem 65.535 portas. Cada porta pode ser usada para conexões de entrada ou de saída para TCP (protocolo TCP) e UDP (protocolo UDP). Quando um endereço IP público é adicionado como um IP de front-end a um balanceador de carga, o Azure fornece 64 mil portas elegíveis para SNAT.
Cada porta usada em uma regra de balanceamento de carga ou regra NAT de entrada consome um intervalo de oito portas das 64.000 portas SNAT disponíveis. Esse uso reduzirá o número de portas qualificadas para SNAT, se o mesmo IP de front-end for usado para conectividade de saída. Se as portas consumidas de regras NAT de entrada ou de balanceamento de carga estiverem no mesmo bloco de oito portas consumidas por outra regra, as regras não exigirão portas extras.
Observação
Se você precisar se conectar a qualquer serviço de PaaS do Azure compatível, como o Armazenamento do Azure, SQL do Azure ou Azure Cosmos DB, poderá usar o Link Privado do Azure para evitar totalmente o SNAT. O Link Privado do Azure envia o tráfego da rede virtual para os serviços do Azure pela rede de backbone do Azure em vez de pela Internet.
O Link Privado é a opção recomendada em pontos de extremidade de serviço para acesso privado aos serviços hospedados do Azure. Para obter mais informações sobre a diferença entre o Link Privado e os pontos de extremidade de serviço, consulte Comparar pontos de extremidade privados e pontos de extremidade de serviço.
Como funciona o SNAT padrão?
Quando uma VM cria um fluxo de saída, o Azure move o endereço IP de origem para um endereço IP efêmero. Essa conversão é feita pela SNAT.
Se a SNAT for usada sem regras de saída por meio de um balanceador de carga público, as portas SNAT serão pré-alocadas, conforme descrito na tabela de alocação de portas SNAT padrão abaixo:
Tabela de alocação de portas padrão
Quando as regras de balanceamento de carga são selecionadas para usar a alocação de porta padrão ou as regras de saída são configuradas com "Usar o número padrão de portas de saída", as portas do SNAT são alocadas por padrão com base no tamanho do pool de back-end. Os back-ends recebem o número de portas definidas pela tabela, por IP de front-end, até um máximo de 1024 portas.
Por exemplo, com 100 VMs em um pool de back-end e apenas um IP de front-end, cada VM recebe 512 portas. Se um segundo IP de front-end for adicionado, cada VM receberá 512 portas extras. Isso significa que cada VM é alocada em um total de 1.024 portas. Como resultado, adicionar um terceiro IP de front-end NÃO aumentará o número de portas do SNAT alocadas além de 1.024 portas.
Como regra geral, o número de portas do SNAT fornecidas quando a alocação de porta padrão é aplicada pode ser calculado como: MIN(número de portas do SNAT padrão fornecidas com base no tamanho do pool * número de IPs de front-end associados ao pool, 1024)
A tabela a seguir mostra as pré-alocações de porta do SNAT para um único IP de front-end, dependendo do tamanho do pool de back-end:
Tamanho do pool (instâncias VM) | Portas do SNAT padrão |
---|---|
1-50 | 1\.024 |
51-100 | 512 |
101-200 | 256 |
201-400 | 128 |
401-800 | 64 |
801-1,000 | 32 |
Esgotamento de porta
Todas as conexões com o mesmo IP de destino e a mesma porta de destino usam uma porta SNAT. Essa conexão mantém um fluxo de tráfego distinto da instância de back-end ou do cliente para um servidor. Esse processo fornece ao servidor uma porta distinta para endereçar o tráfego. Sem esse processo, o computador cliente não estará ciente do fluxo do qual um pacote faz parte.
Imagine ter vários navegadores indo para https://www.microsoft.com, que é:
IP de destino: 23.53.254.142
Porta de destino = 443
Protocolo = TCP
Sem portas SNAT para o tráfego de retorno, o cliente não tem como separar um resultado de consulta de outro.
Conexões de saída podem ser intermitentes. Uma instância de back-end pode ser alocada em portas insuficientes. Use a funcionalidade de reutilização de conexão em seu aplicativo. Sem a reutilização de conexão, o risco de esgotamento da porta SNAT aumenta.
Para obter mais informações sobre o pool de conexões com o Serviço de Aplicativo do Azure, confira Solução de problemas de erros de conexão de saída intermitentes no Serviço de Aplicativo do Azure
Novas conexões de saída para um IP de destino falham quando o esgotamento de porta ocorre. As conexões são realizadas quando uma porta é disponibilizada. Esse esgotamento ocorre quando as 64 mil portas de um endereço IP são espalhadas de modo dinâmico em várias instâncias de back-end. Para obter orientação sobre a mitigação do esgotamento de porta SNAT, confira o Guia de solução de problemas.
Reutilização de porta
Para conexões TCP, o balanceador de carga usa uma única porta SNAT para cada IP de destino e cada porta. Para conexões com o mesmo IP de destino, uma única porta SNAT pode ser reutilizado, desde que a porta de destino seja diferente. A reutilização não é possível quando já existe uma conexão com o mesmo IP e porta de destino.
Para conexões UDP, o balanceador de carga usa um algoritmo NAT de cone com restrição de porta, que consome uma porta SNAT por IP de destino, independentemente da porta de destino.
As portas individuais podem ser reutilizadas para um número ilimitado de conexões em que a reutilização é permitida (quando o IP de destino ou a porta é diferente).
No exemplo na tabela a seguir, uma instância de back-end com IP privado 10.0.0.1 está fazendo conexões TCP para IPs de destino 23.53.254.142 e 26.108.254.155, enquanto o balanceador de carga está configurado com o endereço IP de front-end 192.0.2.0. Como os IPs de destino são diferentes, a mesma porta SNAT pode ser reutilizado para várias conexões.
Flow | Tupla de origem | Tupla de origem após a SNAT | Tupla de destino |
---|---|---|---|
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 |
Restrições
Quando uma conexão estiver ociosa sem que nenhum novo pacote seja enviado, as portas serão liberadas após 4 a 120 minutos.
Esse limite pode ser configurado pelas regras de saída.
Cada endereço IP fornece 64.000 portas que podem ser usadas para SNAT.
Cada porta pode ser usada para conexões TCP e UDP a um endereço IP de destino
Uma porta UDP SNAT é necessária, independentemente se a porta de destino for exclusiva ou não. Para cada conexão UDP com um IP de destino, é usada uma porta UDP SNAT.
Uma porta TCP SNAT pode ser usada em várias conexões com o mesmo IP de destino, desde que as portas de destino sejam diferentes.
O esgotamento de SNAT ocorre quando uma instância de back-end é executada a partir de determinadas portas SNAT. Um balanceador de carga ainda pode ter portas SNAT não utilizadas. Se as portas SNAT usadas de uma instância de back-end excederem as portas SNAT determinadas, não será possível estabelecer novas conexões de saída.
Os pacotes fragmentados serão descartados, a menos que a saída seja feita por meio de um IP público em nível de instância no NIC da VM.
Não há suporte para configurações IPv4 secundárias de um adaptador de rede com regras de saída. Para conectividade de saída em configurações IPv4 secundárias, anexe IPs públicos no nível da instância ou aproveite o Gateway da NAT.
Próximas etapas
- Solucionar problemas de falhas de conexão de saída devido ao esgotamento de SNAT
- Examine as métricas SNAT e familiarize-se com a maneira correta de filtrá-las, dividi-las e exibi-las.
- Saiba como migrar o método de conectividade de saída existente para o Gateway da NAT