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 métodos a seguir são usados para habilitar a conectividade de saída no Azure:

# 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 Uso de acesso de saída padrão Implícita Não Pior

Diagrama de opções de saída do Azure.

1. Use o endereço IP de front-end de um balanceador de carga para saída por meio de regras de saída

Diagrama do balanceador de carga público com 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.

As portas por instância devem ser calculadas da maneira abaixo:

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 são adicionadas ao back-end do que as portas SNAT restantes permitidas, é possível que o dimensionamento para cima do conjunto de dimensionamento de máquinas virtuais possa estar bloqueado ou que as novas VMs não obtenham portas SNAT suficientes.

Para obter mais informações sobre regras de saída, confira Regra de saída.

2. Associe um gateway da NAT à sub-rede

Diagrama de um gateway da NAT e de um balanceador de carga público.

A NAT da Rede Virtual 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. A NAT é totalmente gerenciada 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.

Para obter mais informações sobre o NAT da Rede Virtual do Azure, confira O que é o NAT da Rede Virtual do Azure?.

3. Atribuir um IP público à máquina virtual

Diagrama de máquinas virtuais com endereços IP públicos de nível de instância.

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 retornará 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.

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

Diagrama de acesso de saída padrão.

Observação

Esse método NÃO é recomendado para cargas de trabalho de produção à medida que adiciona o risco de esgotar portas. Evite usar esse método para cargas de trabalho de produção para evitar possíveis falhas de conexão.

Qualquer recurso do Azure que não tenha um IP público associado, não tenha um balanceador de carga com regras de saída à frente, não faça parte do modo de orquestração flexível dos conjuntos de dimensionamento de máquinas virtuais ou não tenha um recurso de gateway da NAT associado à sub-rede recebe um número mínimo de portas para saída. Esse acesso é conhecido como acesso de saída padrão e é o pior método para fornecer conectividade de saída para seus aplicativos.

Alguns outros exemplos de acesso de saída padrão são:

  • Uso de um balanceador de carga de SKU básico
  • Uma máquina virtual no Azure (sem as associações mencionadas acima). Nesse caso, a conectividade de saída é fornecida pelo IP de acesso de saída padrão. Esse é um IP dinâmico atribuído pelo Azure que você não pode controlar. A SNAT padrão não é recomendada para cargas de trabalho de produção e pode causar falhas de conectividade.
  • Uma máquina virtual no pool de back-end de um balanceador de carga sem regras de saída. Como resultado, você usa o endereço IP front-end de um balanceador de carga para saída e entrada, e ele é mais propenso a falhas de conectividade devido ao esgotamento da porta SNAT.

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. Embora todos os IPs públicos adicionados como IPs de front-end possam ser alocados, os IPs de front-end são consumidos um por vez. Por exemplo, se duas instâncias de back-end têm alocadas 64.000 portas cada uma, com acesso a dois IPs de front-end, ambas as instâncias de back-end consumirão portas do primeiro IP de front-end até que todas as 64.000 portas tenham sido esgotadas.

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 usadas no balanceamento de carga ou nas regras NAT de entrada estiverem no mesmo bloco de oito portas consumidas por outra regra, não será necessário portas extras.

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

A seguinte tabela mostra as pré-alocações de porta SNAT para tamanhos de pool de back-end:

Tamanho do pool (instâncias VM) Portas SNAT padrão por configuração de IP
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 usarão 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 de destino diferentes para o tráfego de retorno (a porta SNAT usada para estabelecer a conexão), o cliente não terá 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 falharão quando ocorrer o esgotamento de porta. As conexões serão realizadas quando uma porta for 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.

Para conexões TCP, o balanceador de carga usará uma única porta SNAT para cada IP de destino e cada porta. Esse multiuso permite várias conexões ao mesmo IP de destino com a mesma porta SNAT. Esse multiuso será limitado se a conexão não for para portas de destino diferentes.

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, seja qual for a porta de destino.

Uma porta é reutilizada para um número ilimitado de conexões. A porta só será reutilizada se o IP ou a porta de destino for diferente.

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.

  • As configurações de IP secundário de um adaptador de rede não fornecem comunicação de saída (a menos que um IP público esteja associado a ela) por meio de um balanceador de carga.

Próximas etapas