ping6.net
Migração

IPv6 em AWS, Azure e GCP

Habilite IPv6 em sua infraestrutura de nuvem. Guias práticos de configuração para AWS, Azure e Google Cloud Platform.

ping6.net14 de dezembro de 20248 min read
IPv6AWSAzureGCPnuvemKubernetes

A maioria das cargas de trabalho em nuvem ainda roda apenas IPv4. Isso está se tornando um problema.

TL;DR - Resumo rápido

Pontos-chave:

  • Redes móveis são IPv6-first: Forçar traduções adiciona latência para a maioria dos usuários
  • Endereços IPv4 custam dinheiro na nuvem enquanto IPv6 é gratuito
  • Configuração é similar entre AWS, Azure e GCP com suporte dual-stack
  • Clusters Kubernetes podem rodar dual-stack em todos os principais provedores de nuvem

Ir para: Configuração AWS | Configuração Azure | Configuração GCP | Kubernetes


Por Que Habilitar IPv6 na Nuvem#

Redes móveis têm sido IPv6-first há anos. Quando seus usuários móveis acessam seu serviço, eles vêm de um endereço IPv6. Executar apenas IPv4 significa forçar uma tradução em algum lugar no caminho, adicionando latência e complexidade.

Alguns ISPs mudaram para redes apenas IPv6 com NAT64 para serviços IPv4 legados. Se você não é acessível via IPv6, está adicionando um salto de tradução extra para esses usuários.

Endereços IPv4 custam dinheiro agora. Provedores de nuvem cobram por endereços IPv4 públicos na maioria das regiões. Endereços IPv6 são gratuitos e abundantes.

A arquitetura é mais simples também. Sem NAT, sem regras de encaminhamento de porta, sem esgotamento de endereços para gerenciar. Cada instância recebe um endereço globalmente roteável.

Configuração IPv6 na AWS#

A AWS tem suporte sólido de IPv6 na maioria dos serviços. Comece com sua VPC.

Configuração Dual-Stack da VPC#

Adicione um bloco CIDR IPv6 à sua VPC existente:

aws ec2 associate-vpc-cidr-block \
  --vpc-id vpc-abc123 \
  --amazon-provided-ipv6-cidr-block

A AWS atribui um bloco /56. Associe sub-redes /64 a cada zona de disponibilidade:

aws ec2 associate-subnet-cidr-block \
  --subnet-id subnet-xyz789 \
  --ipv6-cidr-block 2600:1f13:123:4500::/64

Atualize suas tabelas de rota. IPv6 precisa de sua própria rota para o gateway de internet:

aws ec2 create-route \
  --route-table-id rtb-abc123 \
  --destination-ipv6-cidr-block ::/0 \
  --gateway-id igw-xyz789

Endereçamento IPv6 do EC2#

Instâncias existentes não obtêm IPv6 automaticamente. Atribua endereços manualmente:

aws ec2 assign-ipv6-addresses \
  --network-interface-id eni-abc123 \
  --ipv6-address-count 1

Novas instâncias em sub-redes dual-stack obtêm IPv6 automaticamente se você definir --ipv6-address-count 1 na inicialização.

Dentro da instância, verifique se IPv6 está configurado. Amazon Linux e Ubuntu lidam com isso automaticamente via cloud-init, mas verifique com ip -6 addr show.

Grupos de Segurança#

Tráfego IPv6 usa regras separadas. Se você tem uma regra HTTP para 0.0.0.0/0, ela não se aplicará a IPv6. Adicione ::/0:

aws ec2 authorize-security-group-ingress \
  --group-id sg-abc123 \
  --ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,Ipv6Ranges='[{CidrIpv6=::/0}]'

Erro comum: esquecer de adicionar regras IPv6 e se perguntar por que as conexões falham.

Balanceadores de Carga#

Application e Network Load Balancers suportam dual-stack. Defina ip-address-type para dualstack:

aws elbv2 set-ip-address-type \
  --load-balancer-arn arn:aws:elasticloadbalancing:... \
  --ip-address-type dualstack

O balanceador de carga recebe registros A e AAAA automaticamente.

DNS Route 53#

Crie registros AAAA apontando para seus endereços IPv6:

aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch file://add-aaaa.json

Route 53 suporta IPv6 para registros alias também, o que é útil para balanceadores de carga e distribuições CloudFront.

Gateway de Internet Somente Saída#

Se você quer que instâncias iniciem conexões IPv6 de saída, mas não aceitem de entrada, use um gateway somente saída. Este é o equivalente IPv6 do NAT, mas apenas com estado—não há tradução de endereço.

aws ec2 create-egress-only-internet-gateway \
  --vpc-id vpc-abc123

Atualize a tabela de rota para sub-redes privadas para rotear tráfego IPv6 através dele em vez do gateway de internet regular.

Configuração IPv6 no Azure#

A abordagem do Azure é similar, mas usa terminologia diferente.

Rede Virtual Dual-Stack#

Adicione um espaço de endereçamento IPv6 à sua VNet. Você não pode usar endereços fornecidos pela Amazon aqui; o Azure atribui de seus próprios intervalos.

az network vnet update \
  --resource-group myResourceGroup \
  --name myVNet \
  --address-prefixes "10.0.0.0/16" "fd00:db8::/56"

O Azure usa prefixos fd00::/8 para seus exemplos de documentação, mas você receberá endereços GUA públicos em produção.

Adicione IPv6 a sub-redes:

az network vnet subnet update \
  --resource-group myResourceGroup \
  --vnet-name myVNet \
  --name mySubnet \
  --address-prefixes "10.0.1.0/24" "fd00:db8:1::/64"

Configuração IPv6 de VM#

VMs precisam de configurações de interface de rede tanto IPv4 quanto IPv6. Crie um endereço público IPv6:

az network public-ip create \
  --resource-group myResourceGroup \
  --name myPublicIPv6 \
  --version IPv6 \
  --sku Standard

Anexe-o à interface de rede:

az network nic ip-config create \
  --resource-group myResourceGroup \
  --nic-name myNIC \
  --name ipv6config \
  --private-ip-address-version IPv6 \
  --vnet-name myVNet \
  --subnet mySubnet \
  --public-ip-address myPublicIPv6

Balanceador de Carga com IPv6#

O Azure Load Balancer precisa de configurações de IP frontend separadas para IPv4 e IPv6:

az network lb frontend-ip create \
  --resource-group myResourceGroup \
  --lb-name myLoadBalancer \
  --name LoadBalancerFrontEndIPv6 \
  --public-ip-address myPublicIPv6

Configure pools de backend, sondas de saúde e regras para ambas as pilhas. A configuração é duplicada, o que parece tedioso, mas dá controle total.

Zonas DNS#

Adicione registros AAAA ao Azure DNS:

az network dns record-set aaaa add-record \
  --resource-group myResourceGroup \
  --zone-name example.com \
  --record-set-name www \
  --ipv6-address 2001:db8::1

Configuração IPv6 no GCP#

O Google Cloud tem sido mais lento para adotar IPv6 que AWS e Azure, mas o suporte melhorou significativamente.

Configuração IPv6 da VPC#

VPCs do GCP suportam dual-stack, mas IPv6 ainda está em preview para alguns recursos. Habilite na criação de sub-rede:

gcloud compute networks subnets create mysubnet \
  --network=myvpc \
  --region=us-central1 \
  --range=10.0.1.0/24 \
  --stack-type=IPV4_IPV6 \
  --ipv6-access-type=EXTERNAL

GCP atribui um /64 de seu intervalo 2600:1900::/28.

Instâncias Compute Engine#

Instâncias em sub-redes dual-stack obtêm IPv6 automaticamente. Verifique com:

gcloud compute instances describe myinstance \
  --zone=us-central1-a \
  --format="get(networkInterfaces[0].ipv6Address)"

Regras de firewall precisam de blocos CIDR IPv6 explícitos:

gcloud compute firewall-rules create allow-ipv6-http \
  --network myvpc \
  --allow tcp:80 \
  --source-ranges ::/0

Cloud Load Balancing#

Balanceadores de carga globais do Google suportam IPv6. Defina a versão IP ao criar uma regra de encaminhamento:

gcloud compute forwarding-rules create ipv6-lb-forwarding-rule \
  --load-balancing-scheme=EXTERNAL \
  --ip-protocol=TCP \
  --ports=443 \
  --address=myipv6address \
  --ip-version=IPV6 \
  --target-https-proxy=mytargetproxy \
  --global

Google provisiona automaticamente um endereço IPv6 anycast para balanceadores de carga globais.

Cloud DNS#

Crie registros AAAA:

gcloud dns record-sets create www.example.com \
  --zone=myzone \
  --type=AAAA \
  --ttl=300 \
  --rrdatas=2001:db8::1

Kubernetes e IPv6#

Principais serviços gerenciados de Kubernetes agora suportam clusters dual-stack.

Clusters Dual-Stack#

EKS, AKS e GKE podem executar dual-stack. Pods recebem endereços tanto IPv4 quanto IPv6. Habilite durante a criação do cluster:

# EKS
eksctl create cluster --name mycluster --ip-family ipv4,ipv6
 
# GKE
gcloud container clusters create mycluster \
  --enable-ip-alias \
  --stack-type=IPV4_IPV6

Services podem expor ambas as famílias de endereço. Defina ipFamilyPolicy: RequireDualStack em seu manifesto de Service.

Endereçamento IPv6 de Pod#

Cada pod recebe endereços de ambas as famílias. Plugins CNI (VPC CNI, Calico, Cilium) lidam com atribuição de endereços. Verifique endereços de pod:

kubectl get pods -o wide

Aplicativos dentro de pods devem vincular a :: para escutar em ambos IPv4 e IPv6.

Service IPv6#

Services recebem endereços ClusterIP de ambas as famílias. Services LoadBalancer provisionam balanceadores de carga em nuvem com frontends dual-stack automaticamente se o cluster suportar.

Um problema: nem todos os controllers Ingress suportam IPv6 ainda. Verifique a documentação do seu controller.

Desafios Comuns#

Suporte de Aplicativo#

A maioria das linguagens e frameworks modernos suportam IPv6, mas aplicativos mais antigos podem não suportar. Aplicativos Java às vezes precisam de -Djava.net.preferIPv6Addresses=true para preferir IPv6.

Bancos de dados são complicados. MySQL e PostgreSQL suportam IPv6, mas strings de conexão e bibliotecas cliente precisam de notação de colchetes adequada: psql -h [2001:db8::1] -p 5432.

Lacunas de Monitoramento#

Algumas ferramentas de monitoramento coletam apenas métricas IPv4 por padrão. CloudWatch, Azure Monitor e Cloud Monitoring suportam IPv6, mas dashboards personalizados podem precisar de atualizações.

Ferramentas APM de terceiros (Datadog, New Relic) lidam com dual-stack, mas verifique se seus agentes estão configurados corretamente.

Considerações de Custo#

IPv6 em si é gratuito, mas custos de saída permanecem. Na verdade, alguns provedores de nuvem cobram as mesmas taxas de saída para IPv6 que IPv4, o que não fornece economia de custos—apenas benefícios arquiteturais.

AWS cobra por gateways de internet somente saída em algumas regiões. Verifique a página de preços antes de implantar.

Testando Seu IPv6 na Nuvem#

Não assuma que funciona. Teste de uma rede apenas IPv6.

Desabilite IPv4 em sua máquina local temporariamente:

# Linux
sudo ip addr del <seu-endereço-ipv4> dev eth0
 
# macOS
sudo ifconfig en0 inet delete

Tente acessar seu serviço. Se falhar, você tem problemas de configuração.

Use ferramentas online como ipv6-test.com para verificar acessibilidade de diferentes localizações.

Verifique propagação de DNS com dig AAAA seudominio.com de múltiplos resolvers.

Teste comportamento do balanceador de carga sob tráfego dual-stack. Alguns balanceadores de carga têm diferenças sutis de roteamento entre famílias de endereço que só aparecem sob carga.

Artigos Relacionados#

Teste Sua Implantação na Nuvem

Use a ferramenta Ping para verificar conectividade IPv6 de suas instâncias na nuvem.

Recursos Adicionais#