NAT Gateway vs NAT Instance: Qual Usar para Instâncias Privadas Acessarem a Internet?
Você acabou de subir um cluster de instâncias privadas e percebe que o yum update trava — sem rota de saída para a internet. A pergunta imediata é: NAT Gateway gerenciado ou uma instância EC2 fazendo NAT? A escolha errada aqui aparece tarde, geralmente quando o tráfego aumenta ou quando você precisa escalar e descobre que a solução escolhida não acompanha.
TL;DR — NAT Gateway vs NAT Instance
| Critério | NAT Gateway | NAT Instance (EC2) |
|---|---|---|
| Gerenciamento | Totalmente gerenciado pela AWS | Você opera, patcha e monitora |
| Alta disponibilidade | Redundância interna por AZ | Você implementa com Auto Scaling + script |
| Escalabilidade | Automática até limites do serviço | Limitada pelo tipo de instância EC2 |
| Custo base | Cobrança por hora + por GB processado | Custo da instância EC2 + EIP |
| Security Groups | Não suporta | Suporta — controle granular de tráfego |
| Port forwarding / Bastion | Não suporta | Suporta |
| Caso de uso principal | Produção, escala, simplicidade operacional | Custo muito baixo, cenários de lab, controle total |
Como o NAT Funciona na VPC — Fundação Antes de Decidir
Instâncias em sub-redes privadas não têm rota direta para a internet — a tabela de rotas delas não aponta para um Internet Gateway. Para que essas instâncias iniciem conexões de saída (downloads de pacotes, chamadas a APIs externas), o tráfego precisa ser traduzido para um IP público. É exatamente isso que o NAT faz: recebe o pacote da instância privada, substitui o IP de origem pelo seu próprio IP público, encaminha para a internet e devolve a resposta ao remetente original.
O ponto crítico: o NAT só permite conexões iniciadas de dentro da VPC. Tráfego iniciado da internet não atravessa o NAT — ele é descartado. Isso é diferente de um Internet Gateway, que permite tráfego bidirecional para instâncias com IP público.
10.0.1.5"] -->|pacote saída| B["NAT
(Gateway ou Instance)"] B -->|IP substituído
pelo EIP| C["Internet Gateway"] C --> D["Internet"] D -->|resposta| C C --> B B -->|entrega à origem| A style A fill:#f0f4ff,stroke:#4a6fa5 style B fill:#fff3cd,stroke:#d4a017 style C fill:#d4edda,stroke:#28a745 style D fill:#f8d7da,stroke:#dc3545
- Instância privada inicia uma requisição HTTP para um servidor externo.
- A tabela de rotas da sub-rede privada direciona o tráfego
0.0.0.0/0para o NAT (Gateway ou Instance). - O NAT substitui o IP de origem (privado) pelo seu Elastic IP e encaminha ao Internet Gateway.
- O Internet Gateway roteia para a internet pública.
- A resposta retorna pelo caminho inverso — o NAT rastreia a conexão e entrega à instância original.
NAT Gateway — O Caminho Gerenciado
O NAT Gateway é um recurso gerenciado da AWS implantado em uma sub-rede pública. Você associa um Elastic IP, aponta a tabela de rotas das sub-redes privadas para ele, e pronto. A AWS cuida de disponibilidade, patches e escalabilidade de banda dentro dos limites do serviço.
Criando um NAT Gateway via CLI
Primeiro, aloque um Elastic IP. Depois crie o NAT Gateway na sub-rede pública:
# 1. Alocar Elastic IP
aws ec2 allocate-address \
--domain vpc \
--region us-east-1
# Anote o AllocationId retornado, ex: eipalloc-0abc123def456
# 2. Criar o NAT Gateway na sub-rede pública
aws ec2 create-nat-gateway \
--subnet-id subnet-0a1b2c3d4e5f67890 \
--allocation-id eipalloc-0abc123def456 \
--region us-east-1
# 3. Aguardar o estado 'available'
aws ec2 describe-nat-gateways \
--nat-gateway-ids nat-0abc123def456789 \
--query 'NatGateways[*].State' \
--region us-east-1
# 4. Adicionar rota na tabela de rotas da sub-rede privada
aws ec2 create-route \
--route-table-id rtb-0a1b2c3d4e5f67890 \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id nat-0abc123def456789 \
--region us-east-1
NAT Gateway por AZ — Detalhe que Custa Caro Ignorar
O NAT Gateway é um recurso zonal. Se você tem instâncias privadas em us-east-1a e us-east-1b, mas criou apenas um NAT Gateway em us-east-1a, o tráfego de us-east-1b cruza AZs. Isso gera cobrança de transferência de dados entre zonas de disponibilidade — e em volumes altos, esse custo surpreende.
A prática recomendada é criar um NAT Gateway por AZ onde você tem sub-redes privadas, e configurar a tabela de rotas de cada AZ para apontar para o NAT Gateway local.
Pense no NAT Gateway como um porteiro de condomínio por andar: se você mora no 3º andar mas o porteiro só fica no 1º, você desce toda vez — funciona, mas tem custo operacional. Um porteiro por andar resolve o problema.
NAT Instance — O Caminho Manual
Uma NAT Instance é uma instância EC2 comum configurada para fazer IP masquerading. Historicamente, a AWS publicava AMIs específicas para isso (prefixo amzn-ami-vpc-nat), mas o modelo atual é você configurar uma instância Amazon Linux com iptables e desabilitar a verificação de origem/destino.
Configuração da NAT Instance
🔽 Clique para expandir — configuração completa da NAT Instance
# Passo 1: Lançar instância EC2 em sub-rede pública com EIP associado
# (via console ou CLI — escolha o tipo de instância conforme throughput necessário)
# Passo 2: Desabilitar verificação de origem/destino (OBRIGATÓRIO)
aws ec2 modify-instance-attribute \
--instance-id i-0abc123def456789 \
--no-source-dest-check \
--region us-east-1
# Passo 3: Na instância (via SSH), habilitar IP forwarding e configurar iptables
sudo sysctl -w net.ipv4.ip_forward=1
# Tornar persistente
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
# Configurar masquerading (substitua eth0 pela interface de rede correta)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Passo 4: Adicionar rota na tabela de rotas da sub-rede privada
aws ec2 create-route \
--route-table-id rtb-0a1b2c3d4e5f67890 \
--destination-cidr-block 0.0.0.0/0 \
--instance-id i-0abc123def456789 \
--region us-east-1
Security Group da NAT Instance
Diferente do NAT Gateway, a NAT Instance aceita Security Groups. Isso é uma vantagem real quando você precisa restringir quais protocolos ou destinos o tráfego NAT pode usar. A regra mínima de entrada deve permitir tráfego das sub-redes privadas:
# Regra de entrada: permitir tráfego das sub-redes privadas
aws ec2 authorize-security-group-ingress \
--group-id sg-0abc123def456789 \
--protocol -1 \
--cidr 10.0.0.0/16 \
--region us-east-1
# Regra de saída: permitir tráfego para a internet (já é o padrão)
# Verifique se a regra de saída 0.0.0.0/0 está presente
Diagnóstico: Quando o NAT Não Funciona — Sintoma, Diagnóstico Errado e Causa Real
A instância privada não consegue fazer curl https://example.com. O timeout não retorna erro de DNS — retorna simplesmente nada. O primeiro instinto é verificar o Security Group da instância privada, que está correto. O segundo é checar o Network ACL da sub-rede, também correto.
A causa real: a tabela de rotas da sub-rede privada ainda aponta 0.0.0.0/0 para um NAT Gateway que foi deletado durante uma limpeza de ambiente. A rota existe, mas o target está em estado blackhole. O console mostra isso claramente, mas via CLI você precisa checar explicitamente:
# Verificar rotas da tabela — identificar targets em blackhole
aws ec2 describe-route-tables \
--route-table-ids rtb-0a1b2c3d4e5f67890 \
--query 'RouteTables[*].Routes[*].{Dest:DestinationCidrBlock,Target:NatGatewayId,State:State}' \
--region us-east-1
Se o campo State retornar blackhole, o target foi deletado. Corrija apontando para um NAT Gateway ativo ou delete e recrie a rota. Esse estado não gera alarme automático — você precisa monitorar ativamente ou usar AWS Config para detectar rotas em blackhole.
sem resposta na saída"] --> B["Verificar Security Group
da instância privada"] B -->|OK| C["Verificar Network ACL
da sub-rede privada"] C -->|OK| D["Verificar tabela de rotas
da sub-rede privada"] D --> E{"Estado da rota
0.0.0.0/0?"} E -->|active| F["Verificar NAT Gateway
estado e AZ"] E -->|blackhole| G["Target deletado!
Recriar NAT Gateway"] G --> H["Atualizar rota na
tabela de rotas"] H --> I["Conexão restaurada"] style E fill:#fff3cd,stroke:#d4a017 style G fill:#f8d7da,stroke:#dc3545 style I fill:#d4edda,stroke:#28a745
- Instância privada tenta conexão de saída — sem resposta.
- Verificação de SG e NACL não revela problema — ambos permitem o tráfego.
- A rota
0.0.0.0/0existe na tabela, mas o target NAT Gateway foi deletado. - Estado
blackholedescarta silenciosamente todos os pacotes. - Correção: recriar o NAT Gateway e atualizar a rota.
Guia de Decisão — NAT Gateway vs NAT Instance
para internet em
sub-rede privada"]) --> Q1{"Ambiente de produção
ou alta disponibilidade?"} Q1 -->|Sim| Q2{"Preciso de port forwarding
ou Security Group no NAT?"} Q1 -->|Não / Lab| Q3{"Custo é prioridade
máxima?"} Q2 -->|Não| REC1["✅ NAT Gateway
Recomendado"] Q2 -->|Sim| REC2["NAT Instance
com SG configurado"] Q3 -->|Sim| REC3["NAT Instance
tipo t3.micro/t4g.nano"] Q3 -->|Não| REC1 style REC1 fill:#d4edda,stroke:#28a745 style REC2 fill:#fff3cd,stroke:#d4a017 style REC3 fill:#fff3cd,stroke:#d4a017 style START fill:#f0f4ff,stroke:#4a6fa5
Comparação de Custos — O Que Não É Óbvio
O NAT Gateway cobra por hora de existência e por GB de dados processados. Para workloads com alto volume de dados transferidos internamente entre serviços AWS (por exemplo, instâncias privadas acessando S3 na mesma região), o custo de processamento do NAT Gateway pode ser eliminado usando VPC Endpoints — o tráfego não passa pelo NAT.
# Criar VPC Endpoint para S3 (Gateway Endpoint — sem custo adicional)
aws ec2 create-vpc-endpoint \
--vpc-id vpc-0abc123def456789 \
--service-name com.amazonaws.us-east-1.s3 \
--route-table-ids rtb-0a1b2c3d4e5f67890 \
--region us-east-1
Com o Gateway Endpoint para S3, o tráfego das instâncias privadas para o S3 não passa mais pelo NAT Gateway — redução direta no custo de processamento. Pricing e limites variam — sempre verifique a documentação oficial da AWS.
IAM Mínimo para Gerenciar NAT Gateway
Se você usa automação (Lambda, scripts CI/CD) para criar ou modificar NAT Gateways e tabelas de rotas, o conjunto mínimo de permissões necessário:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "NatGatewayManagement",
"Effect": "Allow",
"Action": [
"ec2:CreateNatGateway",
"ec2:DeleteNatGateway",
"ec2:DescribeNatGateways",
"ec2:AllocateAddress",
"ec2:ReleaseAddress",
"ec2:AssociateAddress"
],
"Resource": "*"
},
{
"Sid": "RouteTableManagement",
"Effect": "Allow",
"Action": [
"ec2:CreateRoute",
"ec2:DeleteRoute",
"ec2:DescribeRouteTables"
],
"Resource": "*"
}
]
}
Ações de Describe e List frequentemente exigem "Resource": "*" — verifique o Service Authorization Reference da AWS antes de restringir por ARN.
Monitoramento do NAT Gateway com CloudWatch
O NAT Gateway publica métricas no CloudWatch automaticamente. As mais relevantes para operação:
# Verificar bytes processados pelo NAT Gateway nas últimas 1 hora
aws cloudwatch get-metric-statistics \
--namespace AWS/NATGateway \
--metric-name BytesOutToDestination \
--dimensions Name=NatGatewayId,Value=nat-0abc123def456789 \
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 300 \
--statistics Sum \
--region us-east-1
# Verificar conexões ativas
aws cloudwatch get-metric-statistics \
--namespace AWS/NATGateway \
--metric-name ActiveConnectionCount \
--dimensions Name=NatGatewayId,Value=nat-0abc123def456789 \
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 300 \
--statistics Maximum \
--region us-east-1
Conclusão e Próximos Passos — NAT Gateway vs NAT Instance
Para a grande maioria dos ambientes de produção, o NAT Gateway é a escolha correta: sem overhead operacional, escalabilidade automática e alta disponibilidade por AZ sem configuração adicional. A NAT Instance faz sentido em cenários muito específicos — ambientes de laboratório com custo extremamente restrito, ou quando você precisa de funcionalidades que o NAT Gateway não oferece, como port forwarding ou filtragem de tráfego via Security Group no ponto de saída.
Independente da escolha, lembre-se: um NAT por AZ evita cobrança de transferência entre zonas, e VPC Endpoints eliminam o custo de NAT para serviços AWS que os suportam.
- Documentação oficial — NAT Gateway
- Documentação oficial — NAT Instance
- VPC Endpoints — redução de custo NAT
Glossário
| Termo | Definição |
|---|---|
| NAT (Network Address Translation) | Técnica que substitui o endereço IP de origem de um pacote, permitindo que hosts com IPs privados se comuniquem com a internet usando um IP público. |
| Elastic IP (EIP) | Endereço IPv4 público estático alocado à sua conta AWS, associável a instâncias EC2 ou NAT Gateways. |
| Blackhole Route | Rota em uma tabela de rotas cujo target não existe mais — pacotes são descartados silenciosamente sem erro explícito. |
| Source/Destination Check | Verificação padrão do EC2 que descarta pacotes cujo IP de origem ou destino não corresponde à instância. Deve ser desabilitada em NAT Instances. |
| VPC Endpoint (Gateway) | Recurso que permite tráfego privado entre a VPC e serviços AWS como S3 e DynamoDB, sem passar pelo NAT Gateway ou Internet Gateway. |
Comentários
Postar um comentário