한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L5 Equipamentos de rede do data center

Limite de conexões e portas do gateway NAT na nuvem Cloud NAT gateway connection / port limits

ID da causa dc-nat-gateway · Responsável principal Infraestrutura de rede (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

As conexões que servidores em uma sub-rede privada abrem para fora (autenticação da plataforma, pagamentos, APIs externas) passam pelo gateway NAT, que troca o endereço e a porta. Se as conexões simultâneas para o mesmo destino passam do limite de portas do gateway, as novas conexões falham.

Por quê Os servidores abrem muitas conexões curtas para o mesmo endereço externo, como autenticação da plataforma ou pagamentos, ou mantêm conexões abertas por muito tempo → Efeito O gateway NAT não consegue alocar mais portas de origem para esse destino, e as novas conexões falham → Na tela Dentro do jogo está tudo normal, mas só os recursos que chamam serviços externos, como login, pagamento e entrega de recompensas, falham ou demoram (não conecta / loading infinito, ação perdida / rollback)

Sintomas
Não conecta / loading infinito, Ação perdida / rollback
Fatores
Perda de pacotes, Latência
Quem é afetado
Só um recurso específico, Servidor inteiro
Quando
Logo após login ou manutenção, Horário de pico à noite, Quando junta muita gente
Responsável
Responsável principal Infraestrutura de rede (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Reutilizar conexões com APIs externas (HTTP keep-alive, pool de conexões) e não abrir uma conexão nova a cada requisição, enviar keepalive nas conexões ociosas do pool em intervalos menores que o timeout de inatividade do NAT (350 segundos na AWS) ou fechá-las antes, repetir as tentativas que falham com intervalos crescentes e espalhados aleatoriamente, registrar a taxa de falha e a latência de cada chamada externa.
O que fazer (Equipe de infraestrutura)
Adicionar endereços IP ao gateway NAT (o gateway NAT público da AWS aceita por padrão só 2 Elastic IPs, então para mais é preciso pedir aumento de cota), dividir os gateways por zona de disponibilidade e sub-rede, criar alertas para as métricas de falha de alocação de porta (AWS ErrorPortAllocation, Failed no SNAT Connection Count do Azure, OUT_OF_RESOURCES no dropped_sent_packets_count do Google Cloud), no Google Cloud NAT aumentar o mínimo de portas por VM ou usar alocação dinâmica de portas.
Números de referência
O gateway NAT da AWS abre até 55 mil conexões simultâneas para o mesmo destino (IP, porta e protocolo) por endereço IP, e dá para aumentar anexando até 8 IPs. Conexões em silêncio por 350 segundos são apagadas, e pacotes enviados depois por essa conexão recebem RST. O Azure NAT Gateway tem 64.512 portas SNAT por IP público (até 16 IPs). O Google Cloud NAT divide 64.512 portas por IP de NAT entre as VMs, e o mínimo padrão é de 64 portas por VM (alocação estática); com a configuração padrão, uma VM fica limitada, em geral, a 64 conexões simultâneas para o mesmo destino.
No gráfico
Achata ao bater no limite · Conexões simultâneas no gateway NAT, falhas de alocação de porta
Onde olhar
Colocar lado a lado as métricas do gateway NAT no CloudWatch da AWS, ErrorPortAllocation, ActiveConnectionCount e PacketsDropCount (no Azure, o SNAT Connection Count filtrado pelo estado Failed e o Dropped Packets; no Google Cloud, o dropped_sent_packets_count com reason OUT_OF_RESOURCES), e os horários de falha das chamadas externas do servidor do jogo
Confirma se
O ErrorPortAllocation (no Azure, SNAT Connection Count no estado Failed; no Google Cloud, descartes OUT_OF_RESOURCES) fica acima de 0 nos horários em que as chamadas externas falham, e as falhas se concentram em chamadas para um ou dois destinos muito usados, como servidores de autenticação ou de pagamento
Descarta se
Falhas de alocação de porta em 0, mas o connect do servidor do jogo falha com EADDRNOTAVAIL e o TIME_WAIT está perto do tamanho da faixa de portas efêmeras: “Esgotamento de portas efêmeras em conexões entre servidores”. Conecta, mas só a resposta demora: “Dependência de serviços externos”
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Saiba mais
No “Esgotamento de portas efêmeras em conexões entre servidores”, um único servidor fica sem portas efêmeras. Este limite fica no gateway NAT e é compartilhado por todos os servidores atrás dele (o Google Cloud NAT divide por VM). Se só as chamadas externas falham enquanto os servidores ainda têm folga de TIME_WAIT e na faixa de portas efêmeras, a causa é esta. As portas de conexões fechadas também não são reutilizadas na hora para o mesmo destino (o Azure aplica um cooldown, o Google Cloud bloqueia durante o TIME_WAIT), então quanto mais conexões curtas se repetem, mais rápido se chega ao limite.

Fontes

  1. NAT gateway basics AWS
    55 mil conexões simultâneas por endereço IPv4 para o mesmo destino (IP de destino, porta e protocolo), ampliáveis anexando até 8 IPs (gateways NAT públicos têm por padrão 2 Elastic IPs, ampliáveis com pedido de aumento de cota); a largura de banda escala automaticamente de 5 Gbps até 100 Gbps e a vazão, de 1 milhão até 10 milhões de pacotes por segundo, e os pacotes acima desse limite são descartados
  2. NAT gateway metrics and dimensions AWS
    ErrorPortAllocation: número de vezes em que não foi possível alocar uma porta de origem (acima de 0 indica conexões simultâneas demais), ActiveConnectionCount, IdleTimeoutCount (conexões removidas após 350 segundos ociosas), PacketsDropCount
  3. Troubleshoot NAT gateways AWS
    Após 350 segundos ociosa, a conexão expira e os envios seguintes recebem RST; recomenda-se keepalive menor que 350 segundos; ao atingir o limite de conexões, adicionar gateways por zona de disponibilidade, adicionar IPs ou reduzir conexões
  4. Source Network Address Translation (SNAT) with Azure NAT Gateway Microsoft Azure
    64.512 portas SNAT por IP público (até 16 IPs); cada conexão para o mesmo destino precisa de uma porta diferente; portas fechadas passam por um cooldown antes de serem reutilizadas para o mesmo destino
  5. Metrics and alerts for Azure NAT Gateway Microsoft Azure
    SNAT Connection Count filtrado pelo estado Failed acima de 0 indica possível esgotamento de portas SNAT; Dropped Packets
  6. IP addresses and ports Google Cloud
    64.512 portas por IP de NAT, tanto para TCP quanto para UDP; mínimo padrão de portas por VM de 64 (alocação estática) ou 32 (alocação dinâmica); o número de portas reservadas para uma VM limita suas conexões simultâneas para o mesmo destino; portas de conexões fechadas não podem ser usadas durante o TIME_WAIT
  7. Logs and metrics Google Cloud
    dropped_sent_packets_count com reason OUT_OF_RESOURCES: pacotes descartados por falta de IPs ou portas de NAT

Veja também

Mesma camada: L5 Equipamentos de rede do data center

Mesmo sintoma (Não conecta / loading infinito) em outras camadas

Ver o card interativo, com figuras e simulações