Utilizar a Tradução de Endereços de Rede de Origem (SNAT) para ligações de saída
Determinados cenários requerem máquinas virtuais ou instâncias de computação para terem conectividade de saída à Internet. Os IPs de front-end de um balanceador de carga público podem ser utilizados para fornecer conectividade de saída à Internet para instâncias de back-end. Esta configuração utiliza a tradução de endereços de rede de origem (SNAT) para traduzir o IP privado da máquina virtual para o endereço IP público do balanceador de carga. A SNAT mapeia o endereço IP do back-end para o endereço IP público do balanceador de carga. A SNAT impede que origens 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 utilizados do Azure para permitir a conectividade de saída:
# | Método | Tipo de alocação de portas | Nota de produção? | Classificação |
---|---|---|---|---|
1 | Utilize o endereço IP de front-end de um balanceador de carga para saída através de regras de saída | Estático, explícito | Sim, mas não em escala | OK |
2 | Associar um nat gateway à sub-rede | Dinâmico, explícito | Yes | Melhor |
3 | Atribuir um IP público à máquina virtual | Estático, explícito | Yes | OK |
4 | Utilização de acesso de saída predefinida | Implícito | No | Pior |
1. Utilize o endereço IP de front-end de um balanceador de carga para saída através de regras de saída
As regras de saída permitem-lhe definir explicitamente SNAT (tradução de endereços de rede de origem) para um balanceador de carga público de SKU padrão. Esta configuração permite-lhe utilizar o IP público ou os IPs do balanceador de carga para conectividade de saída das instâncias de back-end.
Esta configuração permite:
Mascaramento de IP
Simplificar as listas de permissões
Reduz o número de recursos ip públicos para implementação
Com as regras de saída, tem controlo declarativo total sobre a conectividade à Internet de saída. As regras de saída permitem-lhe dimensionar e ajustar esta capacidade às suas necessidades específicas através da alocação manual de portas. A alocar manualmente a porta SNAT com base no tamanho do conjunto de back-end e no número de frontendIPConfigurations pode ajudar a evitar o esgotamento do SNAT.
Pode alocar manualmente portas SNAT por "portas por instância" ou "número máximo de instâncias de back-end". Se tiver máquinas virtuais no back-end, recomenda-se que aloque portas por "portas por instância" para obter a utilização máxima da porta SNAT.
Calcule as portas por instância da seguinte forma:
Número de IPs de front-end * 64K/Número de instâncias de back-end
Se tiver Conjuntos de Dimensionamento de Máquinas Virtuais no back-end, é recomendado alocar portas por "número máximo de instâncias de back-end". Se forem adicionadas mais VMs ao back-end do que as restantes portas SNAT permitidas, o aumento horizontal do Conjuntos de Dimensionamento de Máquinas Virtuais poderá ser bloqueado ou as novas VMs não receberão portas SNAT suficientes.
Para obter mais informações sobre regras de saída, veja Regras de saída.
2. Associar um nat gateway à sub-rede
Rede Virtual NAT simplifica a conectividade à Internet apenas de saída para redes virtuais. Quando configurada numa sub-rede, toda a conectividade de saída utiliza os endereços IP públicos estáticos especificados. A conectividade de saída é possível sem balanceador de carga ou endereços IP públicos diretamente ligados a máquinas virtuais. O NAT é totalmente gerido e altamente resiliente.
Utilizar um nat gateway é o melhor método para conectividade de saída. Um nat gateway é altamente extensível, fiável e não tem as mesmas preocupações com o esgotamento da porta SNAT.
Para obter mais informações sobre o NAT de Rede Virtual do Azure, veja O que é o NAT Rede Virtual do Azure.
3. Atribuir um IP público à máquina virtual
Associações | Método | Protocolos IP |
---|---|---|
IP Público na NIC da VM | O SNAT (Tradução de Endereços de Rede de Origem) não é utilizado. | TCP (Protocolo de Controlo de Transmissão) UDP (User Datagram Protocol) ICMP (Internet Control Message Protocol) ESP (Encapsular Payload de Segurança) |
O tráfego regressa ao cliente requerente a partir do endereço IP público da máquina virtual (IP de Nível de Instância).
O Azure utiliza o IP público atribuído à configuração ip do NIC da instância para todos os fluxos de saída. A instância tem todas as portas efémeras disponíveis. Não importa se a VM tem ou não balanceamento de carga. Este 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 um NAT sem estado 1:1.
4. Acesso de saída predefinido
Nota
Este método NÃO é recomendado para cargas de trabalho de produção, uma vez que aumenta o risco de esgotamento de portas. Evite utilizar este método para cargas de trabalho de produção para evitar potenciais falhas de ligação.
O acesso de saída predefinido é quando um recurso do Azure é alocado a um número mínimo de portas para saída. Este acesso ocorre quando o recurso cumpre qualquer uma das seguintes condições:
- não tem um IP público associado ao mesmo.
- não tem um balanceador de carga com regras de saída à sua frente.
- não faz parte de Conjuntos de Dimensionamento de Máquinas Virtuais modo de orquestração flexível.
- não tem um recurso nat gateway associado à respetiva sub-rede.
Alguns outros exemplos de acesso de saída predefinido são:
- Utilização de um balanceador de carga de SKU básico
- Uma máquina virtual no Azure (sem as associações mencionadas acima). Neste caso, a conectividade de saída é fornecida pelo IP de acesso de saída predefinido. Este IP é um IP dinâmico atribuído pelo Azure que não pode controlar. O SNAT predefinido não é recomendado para cargas de trabalho de produção e pode causar falhas de conectividade.
- Uma máquina virtual no conjunto de back-end de um balanceador de carga sem regras de saída. Como resultado, utiliza o endereço IP de front-end de um balanceador de carga para saída e entrada e é mais propenso a falhas de conectividade devido ao esgotamento da porta SNAT.
O que são portas SNAT?
As portas são utilizadas para gerar identificadores exclusivos utilizados para manter fluxos distintos. A Internet utiliza uma cadeia de cinco cadeias de identificação para proporcionar esta distinção.
Se for utilizada uma porta para ligações de entrada, tem um serviço de escuta para pedidos de ligação de entrada nessa porta. Essa porta não pode ser utilizada para ligações de saída. Para estabelecer uma ligação de saída, é utilizada uma porta efémera para fornecer ao destino uma porta na qual comunicar e manter um fluxo de tráfego distinto. Quando estas portas efémeras são utilizadas para SNAT, são denominadas portas SNAT.
Por definição, cada endereço IP tem 65.535 portas. Cada porta pode ser utilizada para ligações de entrada ou saída para TCP (Protocolo de Controlo de Transmissão) e UDP (User Datagram Protocol). Quando um endereço IP público é adicionado como um IP de front-end a um balanceador de carga, 64 000 portas são 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 de cada vez. Por exemplo, se duas instâncias de back-end forem alocadas 64 000 portas cada, com acesso a dois IPs de front-end, ambas as instâncias de back-end consomem portas do primeiro IP de front-end até que todas as 64.000 portas tenham sido esgotadas.
Cada porta utilizada numa regra NAT de balanceamento de carga ou de entrada consome um intervalo de oito portas das 64 000 portas SNAT disponíveis. Esta utilização reduz o número de portas elegíveis para SNAT, se for utilizado o mesmo IP de front-end para conectividade de saída. Se as portas consumidas das regras NAT de balanceamento de carga ou de entrada estiverem no mesmo bloco de oito portas consumidas por outra regra, as regras não necessitam de portas adicionais.
Como funciona o SNAT predefinido?
Quando uma VM cria um fluxo de saída, o Azure traduz o endereço IP de origem para um endereço IP efémero. Esta tradução é efetuada através do SNAT.
Se utilizar o SNAT sem regras de saída através de um balanceador de carga público, as portas SNAT são pré-alocadas conforme descrito na seguinte tabela de alocação de portas SNAT predefinida:
Tabela de alocação de portas predefinida
A tabela seguinte mostra as pré-instalações da porta SNAT para tamanhos de conjuntos de back-end:
Tamanho do conjunto (instâncias de VM) | Portas SNAT predefinidas 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 das portas
Cada ligação ao mesmo IP de destino e porta de destino utiliza uma porta SNAT. Esta ligação mantém um fluxo de tráfego distinto da instância de back-end ou do cliente para um servidor. Este processo dá ao servidor uma porta distinta para lidar com o tráfego. Sem este processo, o computador cliente não tem conhecimento do fluxo do qual um pacote faz parte.
Imagine ter vários browsers a aceder a https://www.microsoft.com, ou seja:
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.
As ligações de saída podem rebentar. Uma instância de back-end pode ser alocada portas insuficientes. Utilize a funcionalidade de reutilização da ligação na sua aplicação. Sem reutilização da ligação, o risco de esgotamento da porta SNAT é aumentado.
Para obter mais informações sobre o conjunto de ligações com Serviço de Aplicações do Azure, veja Resolver problemas de erros intermitentes de ligação de saída no Serviço de Aplicações do Azure
As novas ligações de saída para um IP de destino falham quando ocorre o esgotamento da porta. As ligações são bem-sucedidas quando uma porta fica disponível. Este esgotamento ocorre quando as 64 000 portas de um endereço IP são distribuídas por várias instâncias de back-end. Para obter orientações sobre a mitigação do esgotamento da porta SNAT, veja o guia de resolução de problemas.
Para ligações TCP, o balanceador de carga utiliza uma única porta SNAT para cada IP e porta de destino. Esta multiuso permite várias ligações ao mesmo IP de destino com a mesma porta SNAT. Esta multiuso é limitada se a ligação não for para portas de destino diferentes.
Para ligações UDP, o balanceador de carga utiliza um algoritmo NAT de cone restrito 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 ligações. A porta só é reutilizada se o IP ou a porta de destino forem diferentes.
Restrições
Quando uma ligação está inativa e não são enviados novos pacotes, as portas serão libertadas após 4 a 120 minutos.
Este limiar pode ser configurado através de regras de saída.
Cada endereço IP fornece 64 000 portas que podem ser utilizadas para SNAT.
Cada porta pode ser utilizada para ligações TCP e UDP a um endereço IP de destino
É necessária uma porta SNAT UDP, quer a porta de destino seja exclusiva ou não. Para cada ligação UDP a um IP de destino, é utilizada uma porta SNAT UDP.
Uma porta SNAT TCP pode ser utilizada para várias ligações ao mesmo IP de destino, desde que as portas de destino sejam diferentes.
O esgotamento do SNAT ocorre quando uma instância de back-end fica sem determinadas Portas SNAT. Um balanceador de carga ainda pode ter portas SNAT não utilizadas. Se as portas SNAT utilizadas de uma instância de back-end excederem as portas SNAT especificadas, não será possível estabelecer novas ligações de saída.
Os pacotes fragmentados são removidos, a menos que a saída seja através de um IP público ao nível da instância no NIC da VM.
As configurações de IP secundário de uma interface de rede não fornecem comunicação de saída (a menos que esteja associado um IP público) através de um balanceador de carga.
Passos seguintes
- Resolver problemas de falhas de ligação de saída devido ao esgotamento do SNAT
- Reveja as métricas SNAT e familiarize-se com a forma correta de filtrar, dividir e vê-las.
- Saiba como migrar o método de conectividade de saída existente para o NAT Gateway