ping6.net
Migration

IPv6 in AWS, Azure und GCP

Aktivieren Sie IPv6 in Ihrer Cloud-Infrastruktur. Praktische Konfigurationsanleitungen für AWS, Azure und Google Cloud Platform.

ping6.net14. Dezember 20247 min read
IPv6AWSAzureGCPCloudKubernetes

Die meisten Cloud-Workloads laufen immer noch nur mit IPv4. Das wird zu einem Problem.

TL;DR - Kurzübersicht

Wichtige Punkte:

  • Mobilfunknetze sind IPv6-first: Übersetzungen erzwingen fügt Latenz für die meisten Benutzer hinzu
  • IPv4-Adressen kosten Geld in der Cloud, während IPv6 kostenlos ist
  • Konfiguration ist ähnlich über AWS, Azure und GCP mit Dual-Stack-Unterstützung
  • Kubernetes-Cluster können Dual-Stack auf allen großen Cloud-Providern betreiben

Direkt zu: AWS-Konfiguration | Azure-Konfiguration | GCP-Konfiguration | Kubernetes

Warum IPv6 in der Cloud aktivieren#

Mobilfunknetze sind seit Jahren IPv6-first. Wenn Ihre mobilen Benutzer Ihren Service aufrufen, kommen sie von einer IPv6-Adresse. Nur mit IPv4 zu laufen bedeutet, irgendwo im Pfad eine Übersetzung zu erzwingen, was Latenz und Komplexität hinzufügt.

Einige ISPs sind auf IPv6-only-Netzwerke mit NAT64 für Legacy-IPv4-Dienste umgestiegen. Wenn Sie nicht über IPv6 erreichbar sind, fügen Sie einen zusätzlichen Übersetzungs-Hop für diese Benutzer hinzu.

IPv4-Adressen kosten jetzt Geld. Cloud-Anbieter berechnen öffentliche IPv4-Adressen in den meisten Regionen. IPv6-Adressen sind kostenlos und reichlich vorhanden.

Die Architektur ist auch einfacher. Kein NAT, keine Port-Forwarding-Regeln, keine Adressknappheit zu verwalten. Jede Instanz erhält eine global routbare Adresse.

AWS IPv6-Konfiguration#

AWS hat solide IPv6-Unterstützung über die meisten Services. Beginnen Sie mit Ihrer VPC.

VPC Dual-Stack-Einrichtung#

Fügen Sie einen IPv6-CIDR-Block zu Ihrer bestehenden VPC hinzu:

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

AWS weist einen /56-Block zu. Verknüpfen Sie /64-Subnetze mit jeder Verfügbarkeitszone:

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

Aktualisieren Sie Ihre Routing-Tabellen. IPv6 benötigt seine eigene Route zum Internet-Gateway:

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

EC2 IPv6-Adressierung#

Bestehende Instanzen erhalten nicht automatisch IPv6. Weisen Sie Adressen manuell zu:

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

Neue Instanzen in Dual-Stack-Subnetzen erhalten automatisch IPv6, wenn Sie beim Start --ipv6-address-count 1 setzen.

Innerhalb der Instanz überprüfen Sie, dass IPv6 konfiguriert ist. Amazon Linux und Ubuntu handhaben dies automatisch via cloud-init, aber verifizieren Sie mit ip -6 addr show.

Sicherheitsgruppen#

IPv6-Verkehr verwendet separate Regeln. Wenn Sie eine HTTP-Regel für 0.0.0.0/0 haben, gilt sie nicht für IPv6. Fügen Sie ::/0 hinzu:

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

Häufiger Fehler: IPv6-Regeln zu vergessen und sich zu wundern, warum Verbindungen fehlschlagen.

Load Balancer#

Application und Network Load Balancer unterstützen Dual-Stack. Setzen Sie ip-address-type auf dualstack:

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

Der Load Balancer erhält automatisch sowohl A- als auch AAAA-Records.

Route 53 DNS#

Erstellen Sie AAAA-Records, die auf Ihre IPv6-Adressen zeigen:

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

Route 53 unterstützt IPv6 auch für Alias-Records, was für Load Balancer und CloudFront-Distributionen nützlich ist.

Egress-Only Internet Gateway#

Wenn Sie möchten, dass Instanzen ausgehende IPv6-Verbindungen initiieren, aber keine eingehenden akzeptieren, verwenden Sie ein Egress-Only-Gateway. Dies ist IPv6s Äquivalent zu NAT, aber nur Stateful – es gibt keine Adressübersetzung.

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

Aktualisieren Sie die Routing-Tabelle für private Subnetze, um IPv6-Verkehr dadurch statt durch das reguläre Internet-Gateway zu leiten.

Azure IPv6-Konfiguration#

Azures Ansatz ist ähnlich, verwendet aber andere Terminologie.

Virtual Network Dual-Stack#

Fügen Sie einen IPv6-Adressraum zu Ihrem VNet hinzu. Sie können hier keine Amazon-bereitgestellten Adressen verwenden; Azure weist aus seinen eigenen Bereichen zu.

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

Azure verwendet fd00::/8-Präfixe für seine Dokumentationsbeispiele, aber Sie erhalten öffentliche GUA-Adressen in der Produktion.

Fügen Sie IPv6 zu Subnetzen hinzu:

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

VM IPv6-Konfiguration#

VMs benötigen sowohl IPv4- als auch IPv6-Netzwerkinterface-Konfigurationen. Erstellen Sie eine öffentliche IPv6-Adresse:

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

Hängen Sie sie an das Netzwerkinterface an:

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

Load Balancer mit IPv6#

Azure Load Balancer benötigt separate Frontend-IP-Konfigurationen für IPv4 und IPv6:

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

Konfigurieren Sie Backend-Pools, Gesundheitsprüfungen und Regeln für beide Stacks. Die Konfiguration ist dupliziert, was sich mühsam anfühlt, aber Ihnen volle Kontrolle gibt.

DNS-Zonen#

Fügen Sie AAAA-Records zu Azure DNS hinzu:

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

GCP IPv6-Konfiguration#

Google Cloud war langsamer bei der IPv6-Einführung als AWS und Azure, aber die Unterstützung hat sich deutlich verbessert.

VPC IPv6-Konfiguration#

GCP VPCs unterstützen Dual-Stack, aber IPv6 ist für einige Features noch in der Vorschau. Aktivieren Sie es bei der Subnetz-Erstellung:

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 weist ein /64 aus seinem 2600:1900::/28-Bereich zu.

Compute Engine-Instanzen#

Instanzen in Dual-Stack-Subnetzen erhalten automatisch IPv6. Überprüfen Sie mit:

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

Firewall-Regeln benötigen explizite IPv6-CIDR-Blöcke:

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

Cloud Load Balancing#

Googles globale Load Balancer unterstützen IPv6. Setzen Sie die IP-Version beim Erstellen einer Forwarding-Regel:

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 stellt automatisch eine Anycast-IPv6-Adresse für globale Load Balancer bereit.

Cloud DNS#

Erstellen Sie AAAA-Records:

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

Kubernetes und IPv6#

Große verwaltete Kubernetes-Services unterstützen jetzt Dual-Stack-Cluster.

Dual-Stack-Cluster#

EKS, AKS und GKE können Dual-Stack betreiben. Pods erhalten sowohl IPv4- als auch IPv6-Adressen. Aktivieren Sie während der Cluster-Erstellung:

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

Services können beide Adressfamilien exponieren. Setzen Sie ipFamilyPolicy: RequireDualStack in Ihrem Service-Manifest.

Pod IPv6-Adressierung#

Jeder Pod erhält Adressen aus beiden Familien. CNI-Plugins (VPC CNI, Calico, Cilium) handhaben Adresszuweisung. Prüfen Sie Pod-Adressen:

kubectl get pods -o wide

Anwendungen innerhalb von Pods sollten an :: binden, um auf beiden IPv4 und IPv6 zu hören.

Service IPv6#

Services erhalten ClusterIP-Adressen aus beiden Familien. LoadBalancer-Services stellen Cloud-Load-Balancer mit Dual-Stack-Frontends automatisch bereit, wenn der Cluster es unterstützt.

Ein Haken: Nicht alle Ingress-Controller unterstützen IPv6 noch. Überprüfen Sie die Dokumentation Ihres Controllers.

Häufige Herausforderungen#

Anwendungsunterstützung#

Die meisten modernen Sprachen und Frameworks unterstützen IPv6, aber ältere Anwendungen möglicherweise nicht. Java-Anwendungen benötigen manchmal -Djava.net.preferIPv6Addresses=true, um IPv6 zu bevorzugen.

Datenbanken sind knifflig. MySQL und PostgreSQL unterstützen IPv6, aber Connection-Strings und Client-Bibliotheken benötigen korrekte Klammernotation: psql -h [2001:db8::1] -p 5432.

Überwachungslücken#

Einige Überwachungstools sammeln standardmäßig nur IPv4-Metriken. CloudWatch, Azure Monitor und Cloud Monitoring unterstützen IPv6, aber benutzerdefinierte Dashboards benötigen möglicherweise Updates.

Drittanbieter-APM-Tools (Datadog, New Relic) handhaben Dual-Stack, aber verifizieren Sie, dass Ihre Agenten korrekt konfiguriert sind.

Kostenüberlegungen#

IPv6 selbst ist kostenlos, aber Egress-Kosten bleiben. Tatsächlich berechnen einige Cloud-Anbieter dieselben Egress-Raten für IPv6 wie für IPv4, was keine Kosteneinsparungen bietet – nur architektonische Vorteile.

AWS berechnet Egress-Only-Internet-Gateways in einigen Regionen. Prüfen Sie die Preisseite vor der Bereitstellung.

Ihr Cloud-IPv6 testen#

Nehmen Sie nicht an, dass es funktioniert. Testen Sie von einem IPv6-only-Netzwerk.

Deaktivieren Sie IPv4 auf Ihrer lokalen Maschine temporär:

# Linux
sudo ip addr del <ihre-ipv4-adresse> dev eth0
 
# macOS
sudo ifconfig en0 inet delete

Versuchen Sie, auf Ihren Service zuzugreifen. Wenn es fehlschlägt, haben Sie Konfigurationsprobleme.

Verwenden Sie Online-Tools wie ipv6-test.com, um Erreichbarkeit von verschiedenen Standorten zu verifizieren.

Prüfen Sie DNS-Propagation mit dig AAAA ihredomain.com von mehreren Resolvern.

Testen Sie Load-Balancer-Verhalten unter Dual-Stack-Verkehr. Einige Load Balancer haben subtile Routing-Unterschiede zwischen Adressfamilien, die nur unter Last erscheinen.

Verwandte Artikel#

Testen Sie Cloud-Konnektivität

Verwenden Sie unser Ping-Tool, um zu verifizieren, dass Ihre Cloud-Instanzen über IPv6 erreichbar sind.

Zusätzliche Ressourcen#