Como usar 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 do Azure 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 privado 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

A conectividade de saída com a Internet pode ser habilitada das seguintes maneiras:

# Método Tipo de alocação de porta Grau de produção? Classificação
1 Usar os endereços IP de front-end de um Load Balancer para saída por meio de regras de saída Estático, explícito Sim, mas não em escala OK
2 Associando um gateway NAT à sub-rede Estático, explícito Sim Melhor
3 Atribuindo um IP público à máquina virtual Estático, explícito Sim OK
4 Usar os endereços IP de front-end de um Load Balancer para saída (e entrada) Implícita Não Segundo pior
5 Usar o acesso de saída padrão Implícita Não Pior

Usar 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.

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. Elas permitem que você dimensione e ajuste essa capacidade para suas necessidades específicas.

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

Importante

Quando um pool de back-end é configurado por endereço IP, ele se comporta como um Azure Load Balancer Básico com a saída padrão habilitada. Para proteger por padrão a configuração e os aplicativos com necessidades de saída exigentes, configure o pool de back-end por NIC.

Associando um gateway NAT à sub-rede

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?.

Atribuindo um IP público à máquina virtual

Associações Método Protocolos IP
IP público na NIC da VM SNAT (conversão de endereços de rede de origem)
Não é usado.
TCP (protocolo TCP)
UDP (protocolo UDP)
ICMP (Protocolo ICMP)
ESP (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.

Usar o endereço IP de front-end de um balanceador de carga para saída (e entrada)

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 devido à exaustão de porta do SNAT.

Um recurso no back-end de um balanceador de carga sem o seguinte configurado cria conexões de saída por meio do IP de front-end do balanceador de carga. O recurso usa o SNAT padrão (também conhecido como Acesso de Saída Padrão).

  • Regras de saída
  • Endereço IP público de nível de instância
  • O gateway NAT está configurado

Acesso de saída padrão

Um recurso sem o seguinte configurado cria conexões de saída por meio do SNAT padrão.

  • Regras de saída
  • Endereço IP público de nível de instância
  • O gateway NAT está configurado
  • Balanceador de carga

Esse acesso é conhecido como Acesso de Saída Padrão. Outro exemplo de um cenário usando o SNAT padrão é que uma máquina virtual no Azure (sem 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. O SNAT padrão não é recomendado para cargas de trabalho de produção.

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.

Uma porta usada para um balanceamento de carga ou uma regra NAT de entrada consome oito portas das 64 mil portas. Esse uso reduz o número de portas elegíveis para SNAT. Se uma regra NAT de entrada ou balanceamento de carga estiver no mesmo intervalo de oito que outra, ela não consumirá portas adicionais.

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 estiver usando SNAT por meio de uma regra de balanceamento de carga, as portas SNAT serão previamente alocadas conforme descrito na tabela de alocação de portas SNAT Padrão.

Ao se usar um balanceador de carga Standard interno, um endereço IP efêmero não é usado para SNAT. Esse recurso dá suporte à segurança por padrão. Esse recurso garante que todos os endereços IP usados pelos recursos sejam configuráveis e possam ser reservados.

Para se obter a conectividade de saída para a Internet ao usar um balanceador de carga interno Standard, configure:

  • Um endereço IP público de nível de instância
  • Gateway da NAT
  • Adicione instâncias de back-end para um balanceador de carga Standard público com uma regra de saída configurada.

Qual é o IP para SNAT padrão?

Quando a VM cria um fluxo de saída, o Azure move o endereço IP de origem para um endereço IP de origem pública fornecido dinamicamente. Esse IP não é configurável e não pode ser reservado. Esse endereço não conta em relação ao limite de recursos de IP da assinatura.

O IP será liberado e um novo IP será solicitado se você reimplantar:

  • Máquina Virtual
  • Conjunto de disponibilidade
  • Conjunto de escala de máquina virtual

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.

Tipo Comportamento de saída
Balanceador de carga Standard público Uso de IPs de front-end do balanceador de carga para SNAT
Balanceador de carga Standard interno Nenhuma conectividade com a Internet, segura por padrão
Balanceador de carga público básico Uso de IPs de front-end do balanceador de carga para SNAT
Balanceador de carga interno básico SNAT com endereço IP dinâmico desconhecido

Portas esgotadas

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.

Alocação de porta padrão

Cada IP atribuído como um IP de front-end do balanceador de carga recebe 64.000 portas SNAT para seus membros do pool de back-end. As portas não podem ser compartilhadas com membros do pool de back-end. Um intervalo de portas SNAT só pode ser usado por uma única instância de back-end para garantir que os pacotes de retorno sejam roteados corretamente.

Se você usar a alocação automática de SNAT de saída por meio de uma regra de balanceamento de carga, a tabela de alocação definirá a alocação da porta para cada IP.

A tabela a seguir mostra as pré-alocações de porta SNAT para níveis de 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

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.

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 fazem comunicação de saída (a menos que um IP público esteja associado a ela) por meio do Load Balancer.

Próximas etapas