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)
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)
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
NAT gateway basicsAWS 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
NAT gateway metrics and dimensionsAWS 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
Troubleshoot NAT gatewaysAWS 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
Source Network Address Translation (SNAT) with Azure NAT GatewayMicrosoft 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
Metrics and alerts for Azure NAT GatewayMicrosoft Azure SNAT Connection Count filtrado pelo estado Failed acima de 0 indica possível esgotamento de portas SNAT; Dropped Packets
IP addresses and portsGoogle 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
Logs and metricsGoogle 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