ping6.net

IPv6 sur AWS : VPC, EC2, ELB et au-delà

Guide complet pour déployer IPv6 sur Amazon Web Services. Configurez VPCs, sous-réseaux, groupes de sécurité, répartiteurs de charge et passerelles de sortie uniquement.

ping6.net14 décembre 202415 min read
IPv6AWScloudVPCEC2networking

AWS dispose d'un support IPv6 complet sur la plupart des services, mais il n'est pas activé par défaut. Vous devez l'activer manuellement, et la configuration est répartie sur plusieurs couches.

TL;DR - Résumé rapide

Points clés :

  • AWS fournit IPv6 en dual-stack (pas IPv6 uniquement pour la plupart des services)
  • Vous obtenez des blocs /56 assignés par Amazon de la plage 2600::/12
  • Toutes les adresses IPv6 sont globalement uniques et routables (pas de NAT)
  • Les passerelles de sortie uniquement fournissent un filtrage avec état sans traduction d'adresse

Aller à : Configuration VPC | Instances EC2 | Groupes de sécurité | Load Balancers | Exemple Terraform


Vue d'ensemble de l'architecture IPv6 AWS#

AWS fournit IPv6 dans une configuration double pile. Vos ressources obtiennent à la fois des adresses IPv4 et IPv6. Vous ne pouvez pas exécuter IPv6 uniquement sur la plupart des services (sauf certaines charges de travail conteneurisées et serverless).

Amazon attribue des blocs CIDR IPv6 à partir de leur pool public. Vous ne pouvez pas choisir votre préfixe — AWS alloue un bloc /56 à votre VPC à partir de la plage 2600::/12.

Contrairement à IPv4 où vous utilisez des adresses privées RFC1918 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), toutes les adresses IPv6 AWS sont globalement uniques et routables (GUA). Il n'y a pas de NAT pour IPv6 au sens traditionnel — si vous voulez une connectivité sortante uniquement, vous utilisez une passerelle Internet de sortie uniquement.

Configuration IPv6 du VPC#

Commencez avec votre VPC. L'ajout d'IPv6 ne perturbe pas les ressources IPv4 existantes.

Associer un bloc CIDR IPv6#

Ajoutez un CIDR IPv6 fourni par Amazon à votre VPC :

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

AWS attribue un bloc /56. La réponse montre votre plage attribuée :

{
  "Ipv6CidrBlockAssociation": {
    "Ipv6CidrBlock": "2600:1f13:1234:5600::/56",
    "Ipv6CidrBlockState": {
      "State": "associating"
    }
  }
}

Attendez que l'état passe à associated :

aws ec2 describe-vpcs --vpc-ids vpc-0abc123def456 \
  --query 'Vpcs[0].Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlockState.State'

Vous pouvez également utiliser « bring your own IP » (BYOIP) si vous avez un espace IPv6 indépendant du fournisseur et souhaitez maintenir des adresses entre comptes AWS ou migrations. La plupart des utilisateurs s'en tiennent aux adresses fournies par Amazon.

Configuration IPv6 du sous-réseau#

Les sous-réseaux ont besoin de leurs propres tranches /64 du bloc /56 du VPC.

Listez le CIDR IPv6 de votre VPC :

aws ec2 describe-vpcs --vpc-ids vpc-0abc123def456 \
  --query 'Vpcs[0].Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock'

Sortie : 2600:1f13:1234:5600::/56

Attribuez des blocs /64 aux sous-réseaux. Utilisez des valeurs hexadécimales 00-FF pour la partie sous-réseau :

# Public subnet A - 2600:1f13:1234:5600::/64
aws ec2 associate-subnet-cidr-block \
  --subnet-id subnet-0abc111 \
  --ipv6-cidr-block 2600:1f13:1234:5600::/64
 
# Public subnet B - 2600:1f13:1234:5601::/64
aws ec2 associate-subnet-cidr-block \
  --subnet-id subnet-0abc222 \
  --ipv6-cidr-block 2600:1f13:1234:5601::/64
 
# Private subnet A - 2600:1f13:1234:5610::/64
aws ec2 associate-subnet-cidr-block \
  --subnet-id subnet-0abc333 \
  --ipv6-cidr-block 2600:1f13:1234:5610::/64

Activez l'attribution automatique d'adresses IPv6 pour les instances lancées dans les sous-réseaux publics :

aws ec2 modify-subnet-attribute \
  --subnet-id subnet-0abc111 \
  --assign-ipv6-address-on-creation

Tables de routage#

Le routage IPv6 est séparé d'IPv4. Créez des routes pour vos blocs CIDR IPv6.

Pour les sous-réseaux publics, routez tout le trafic IPv6 (::/0) vers la passerelle Internet :

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

Les passerelles Internet gèrent à la fois IPv4 et IPv6 sans modification.

Pour les sous-réseaux privés, vous utiliserez une passerelle Internet de sortie uniquement (expliquée plus tard) :

aws ec2 create-route \
  --route-table-id rtb-0abc789 \
  --destination-ipv6-cidr-block ::/0 \
  --egress-only-internet-gateway-id eigw-0ghi012

Vérifiez les routes :

aws ec2 describe-route-tables --route-table-ids rtb-0abc123 \
  --query 'RouteTables[0].Routes'

Configuration IPv6 des instances EC2#

Les instances EC2 nécessitent une attribution d'adresse IPv6 explicite.

Lancer de nouvelles instances avec IPv6#

Spécifiez --ipv6-address-count lors du lancement :

aws ec2 run-instances \
  --image-id ami-0abc123 \
  --instance-type t3.medium \
  --subnet-id subnet-0abc111 \
  --ipv6-address-count 1 \
  --key-name mykey \
  --security-group-ids sg-0abc456

Ou attribuez une adresse IPv6 spécifique de votre plage de sous-réseau :

aws ec2 run-instances \
  --image-id ami-0abc123 \
  --instance-type t3.medium \
  --subnet-id subnet-0abc111 \
  --ipv6-addresses Ipv6Address=2600:1f13:1234:5600::a \
  --key-name mykey \
  --security-group-ids sg-0abc456

Ajouter IPv6 aux instances existantes#

Obtenez l'ID de l'interface réseau (ENI) :

aws ec2 describe-instances --instance-ids i-0abc123 \
  --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId'

Attribuez une adresse IPv6 :

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

Ou spécifiez des adresses exactes :

aws ec2 assign-ipv6-addresses \
  --network-interface-id eni-0def456 \
  --ipv6-addresses 2600:1f13:1234:5600::b

Configuration du système d'exploitation de l'instance#

La plupart des AMI modernes (Amazon Linux 2023, Amazon Linux 2, Ubuntu 20.04+) configurent IPv6 automatiquement via cloud-init et DHCPv6.

Connectez-vous en SSH à votre instance et vérifiez :

ip -6 addr show

Vous devriez voir votre adresse IPv6 attribuée sur l'interface eth0 :

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001
    inet6 2600:1f13:1234:5600::a/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::4a2:c9ff:fe12:3456/64 scope link
       valid_lft forever preferred_lft forever

Testez la connectivité :

ping6 google.com
curl -6 https://ifconfig.co

Si IPv6 n'est pas configuré, vérifiez les journaux cloud-init :

sudo cat /var/log/cloud-init.log | grep -i ipv6

Certaines AMI plus anciennes peuvent nécessiter une configuration manuelle. Ajoutez à /etc/network/interfaces (Debian/Ubuntu) ou /etc/sysconfig/network-scripts/ifcfg-eth0 (RHEL/CentOS).

Groupes de sécurité#

Les groupes de sécurité nécessitent des règles IPv6 explicites. Les règles IPv4 ne s'appliquent pas au trafic IPv6.

Créer des règles de groupe de sécurité double pile#

Autoriser HTTP/HTTPS de n'importe où (à la fois IPv4 et IPv6) :

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

Autoriser SSH depuis un préfixe IPv6 spécifique :

aws ec2 authorize-security-group-ingress \
  --group-id sg-0abc123 \
  --ip-permissions IpProtocol=tcp,FromPort=22,ToPort=22,Ipv6Ranges='[{CidrIpv6=2001:db8::/32,Description="Office IPv6"}]'

Autoriser tout ICMPv6 (requis pour le fonctionnement d'IPv6) :

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

ICMPv6 est essentiel pour IPv6. Ne le bloquez pas. Il est utilisé pour la découverte de voisins, PMTUD et autres fonctions essentielles.

Bonnes pratiques pour les groupes de sécurité#

  1. Dupliquer les règles IPv4 vers IPv6 sauf si vous avez des raisons spécifiques de ne pas le faire
  2. Toujours autoriser ICMPv6 depuis les mêmes sources que votre trafic applicatif
  3. Utiliser des listes de préfixes pour gérer des ensembles de règles complexes sur les deux familles
  4. Étiqueter les groupes de sécurité pour identifier double pile vs. IPv4 uniquement

Exemple : Créez une liste de préfixes gérés pour les plages IPv6 de votre organisation :

aws ec2 create-managed-prefix-list \
  --prefix-list-name org-ipv6-ranges \
  --address-family IPv6 \
  --max-entries 10 \
  --entries Cidr=2001:db8:100::/40,Description=HQ \
           Cidr=2001:db8:200::/40,Description=DataCenter

Référencez-la dans les règles de groupe de sécurité :

aws ec2 authorize-security-group-ingress \
  --group-id sg-0abc123 \
  --ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,PrefixListIds='[{PrefixListId=pl-0abc123}]'

Répartition de charge élastique#

Les Application Load Balancers (ALB) et Network Load Balancers (NLB) prennent en charge la double pile. Les Classic Load Balancers ne le font pas.

Application Load Balancer double pile#

Créez ou modifiez un ALB pour utiliser la double pile :

aws elbv2 create-load-balancer \
  --name my-alb \
  --subnets subnet-0abc111 subnet-0abc222 \
  --security-groups sg-0abc123 \
  --ip-address-type dualstack

Pour les répartiteurs de charge existants :

aws elbv2 set-ip-address-type \
  --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/1234567890abcdef \
  --ip-address-type dualstack

Le répartiteur de charge obtient automatiquement des enregistrements DNS A et AAAA :

dig my-alb-1234567890.us-east-1.elb.amazonaws.com A
dig my-alb-1234567890.us-east-1.elb.amazonaws.com AAAA

Les clients peuvent se connecter via IPv4 ou IPv6. Le répartiteur de charge transmet le trafic aux cibles en utilisant leur famille d'adresses configurée (généralement IPv4 pour les instances backend).

Network Load Balancer double pile#

NLB prend en charge la double pile de manière similaire :

aws elbv2 create-load-balancer \
  --name my-nlb \
  --type network \
  --subnets subnet-0abc111 subnet-0abc222 \
  --ip-address-type dualstack

NLB préserve les adresses IP des clients, donc les cibles voient les adresses sources IPv6 réelles. Assurez-vous que vos journaux d'application et groupes de sécurité gèrent les deux familles d'adresses.

Groupes cibles#

Les groupes cibles enregistrent les instances par leurs adresses IPv4 (le plus courant) ou IPv6. Vous ne pouvez pas mélanger les familles d'adresses dans un seul groupe cible.

Créer un groupe cible IPv4 :

aws elbv2 create-target-group \
  --name my-targets-ipv4 \
  --protocol HTTP \
  --port 80 \
  --vpc-id vpc-0abc123 \
  --ip-address-type ipv4

Créer un groupe cible IPv6 :

aws elbv2 create-target-group \
  --name my-targets-ipv6 \
  --protocol HTTP \
  --port 80 \
  --vpc-id vpc-0abc123 \
  --ip-address-type ipv6

La plupart des déploiements utilisent des groupes cibles IPv4 même avec des répartiteurs de charge double pile. Le répartiteur de charge gère la traduction de protocole de manière transparente.

Passerelle Internet de sortie uniquement#

Les passerelles Internet de sortie uniquement permettent les connexions IPv6 sortantes depuis les sous-réseaux privés tout en bloquant les connexions entrantes. C'est similaire au NAT pour IPv4, mais sans traduction d'adresse — les adresses IPv6 restent globalement uniques.

Créer une passerelle de sortie uniquement#

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

Notez l'ID de la passerelle :

{
  "EgressOnlyInternetGateway": {
    "EgressOnlyInternetGatewayId": "eigw-0abc123"
  }
}

Router le trafic du sous-réseau privé#

Ajoutez une route dans votre table de routage de sous-réseau privé :

aws ec2 create-route \
  --route-table-id rtb-0abc789 \
  --destination-ipv6-cidr-block ::/0 \
  --egress-only-internet-gateway-id eigw-0abc123

Les instances dans les sous-réseaux privés peuvent maintenant initier des connexions IPv6 sortantes mais n'accepteront pas le trafic entrant depuis Internet.

Cas d'usage :

  • Serveurs de bases de données qui nécessitent des mises à jour logicielles
  • Serveurs applicatifs accédant à des API externes
  • Services internes appelant les API AWS (S3, DynamoDB, etc.) via IPv6

Considérations de sécurité#

Les passerelles de sortie uniquement n'offrent pas d'anonymat. Votre adresse IPv6 est toujours visible pour les services externes. C'est du pare-feu avec état, pas du NAT.

Si vous avez besoin d'une sortie uniquement avec masquage d'adresse, vous aurez besoin d'une passerelle NAT64 (configuration plus complexe, rarement nécessaire).

DNS Route 53#

Route 53 prend entièrement en charge IPv6 avec les enregistrements AAAA.

Créer des enregistrements AAAA#

Ajoutez un enregistrement AAAA pour votre instance ou répartiteur de charge :

aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "AAAA",
        "TTL": 300,
        "ResourceRecords": [{"Value": "2600:1f13:1234:5600::a"}]
      }
    }]
  }'

Enregistrements Alias pour les répartiteurs de charge#

Utilisez des enregistrements alias pour ALB/NLB (meilleur que les enregistrements AAAA — mis à jour automatiquement si les IP du LB changent) :

aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890ABC \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "app.example.com",
        "Type": "AAAA",
        "AliasTarget": {
          "HostedZoneId": "Z35SXDOTRQ7X7K",
          "DNSName": "my-alb-1234567890.us-east-1.elb.amazonaws.com",
          "EvaluateTargetHealth": true
        }
      }
    }]
  }'

Le HostedZoneId dans AliasTarget est la zone hébergée canonique pour ELB dans cette région (voir la documentation AWS pour la valeur correcte).

Vérifications de santé#

Les vérifications de santé Route 53 prennent en charge IPv6 :

aws route53 create-health-check \
  --health-check-config \
    IPAddress=2600:1f13:1234:5600::a,Port=443,Type=HTTPS,ResourcePath=/health,RequestInterval=30,FailureThreshold=3 \
  --caller-reference $(uuidgen)

Utilisez les vérifications de santé avec des stratégies de routage de basculement ou pondérées pour une haute disponibilité.

CloudFront IPv6#

Les distributions CloudFront prennent en charge IPv6 par défaut (ne peut pas être désactivé dans la plupart des cas).

Le réseau périphérique global de CloudFront utilise la double pile. Les clients se connectant via IPv6 atteignent les mêmes emplacements périphériques que les clients IPv4.

Vérifiez le support IPv6 :

dig d111111abcdef8.cloudfront.net AAAA

CloudFront gère la traduction de protocole. Si votre origine est IPv4 uniquement, CloudFront sert toujours le contenu aux clients IPv6.

La configuration de l'origine n'a pas besoin de changements :

aws cloudfront create-distribution \
  --distribution-config file://distribution-config.json

Exemple distribution-config.json (abrégé) :

{
  "Origins": {
    "Items": [{
      "Id": "my-origin",
      "DomainName": "example.com",
      "CustomOriginConfig": {
        "OriginProtocolPolicy": "https-only"
      }
    }]
  },
  "Enabled": true,
  "Comment": "My distribution"
}

CloudFront provisionne automatiquement les adresses IPv6 pour votre distribution. Aucune configuration supplémentaire requise.

NAT64 pour les charges de travail IPv6 uniquement#

Certaines charges de travail (Lambda, Fargate) peuvent s'exécuter en IPv6 uniquement. Si elles doivent accéder à des ressources IPv4 uniquement, utilisez NAT64.

AWS ne fournit pas de NAT64 géré. Vous devez exécuter votre propre passerelle NAT64/DNS64 sur EC2.

Exemple utilisant Tayga (NAT64) et BIND (DNS64) :

  1. Lancez une instance EC2 avec à la fois IPv4 et IPv6
  2. Installez et configurez Tayga pour la traduction NAT64
  3. Installez et configurez BIND avec le module DNS64
  4. Routez les ressources IPv6 uniquement via la passerelle NAT64

C'est complexe et rarement nécessaire. La plupart des déploiements utilisent la double pile à la place.

Exemple Terraform#

Infrastructure as code pour une configuration AWS double pile :

# VPC with IPv6
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
  assign_generated_ipv6_cidr_block = true
  enable_dns_support   = true
  enable_dns_hostnames = true
 
  tags = {
    Name = "main-vpc"
  }
}
 
# Internet Gateway
resource "aws_internet_gateway" "main" {
  vpc_id = aws_vpc.main.id
}
 
# Egress-Only Internet Gateway
resource "aws_egress_only_internet_gateway" "main" {
  vpc_id = aws_vpc.main.id
}
 
# Public Subnet
resource "aws_subnet" "public" {
  vpc_id                  = aws_vpc.main.id
  cidr_block              = "10.0.1.0/24"
  ipv6_cidr_block         = cidrsubnet(aws_vpc.main.ipv6_cidr_block, 8, 1)
  assign_ipv6_address_on_creation = true
  availability_zone       = "us-east-1a"
 
  tags = {
    Name = "public-subnet"
  }
}
 
# Route Table for Public Subnet
resource "aws_route_table" "public" {
  vpc_id = aws_vpc.main.id
 
  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.main.id
  }
 
  route {
    ipv6_cidr_block = "::/0"
    gateway_id      = aws_internet_gateway.main.id
  }
 
  tags = {
    Name = "public-rt"
  }
}
 
resource "aws_route_table_association" "public" {
  subnet_id      = aws_subnet.public.id
  route_table_id = aws_route_table.public.id
}
 
# Security Group
resource "aws_security_group" "web" {
  name        = "web-sg"
  description = "Allow HTTP/HTTPS"
  vpc_id      = aws_vpc.main.id
 
  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
 
  ingress {
    from_port   = -1
    to_port     = -1
    protocol    = "ipv6-icmp"
    ipv6_cidr_blocks = ["::/0"]
  }
 
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
}
 
# EC2 Instance with IPv6
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"  # Amazon Linux 2023
  instance_type = "t3.medium"
  subnet_id     = aws_subnet.public.id
  ipv6_address_count = 1
 
  vpc_security_group_ids = [aws_security_group.web.id]
 
  tags = {
    Name = "web-server"
  }
}
 
# Application Load Balancer
resource "aws_lb" "main" {
  name               = "main-alb"
  internal           = false
  load_balancer_type = "application"
  security_groups    = [aws_security_group.web.id]
  subnets            = [aws_subnet.public.id]  # Add more subnets for HA
  ip_address_type    = "dualstack"
 
  tags = {
    Name = "main-alb"
  }
}
 
# Output IPv6 CIDR
output "vpc_ipv6_cidr" {
  value = aws_vpc.main.ipv6_cidr_block
}
 
output "instance_ipv6" {
  value = aws_instance.web.ipv6_addresses
}

Appliquez avec :

terraform init
terraform plan
terraform apply

Exemple CloudFormation#

Modèle YAML pour VPC double pile :

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Dual-stack VPC with IPv6'
 
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true
 
  IPv6CidrBlock:
    Type: AWS::EC2::VPCCidrBlock
    Properties:
      VpcId: !Ref VPC
      AmazonProvidedIpv6CidrBlock: true
 
  PublicSubnet:
    Type: AWS::EC2::Subnet
    DependsOn: IPv6CidrBlock
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      Ipv6CidrBlock: !Select [0, !Cidr [!GetAtt VPC.Ipv6CidrBlock, 256, 64]]
      AssignIpv6AddressOnCreation: true
      AvailabilityZone: !Select [0, !GetAZs '']
 
  InternetGateway:
    Type: AWS::EC2::InternetGateway
 
  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
 
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
 
  PublicRoute:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
 
  PublicRouteIPv6:
    Type: AWS::EC2::Route
    DependsOn: AttachGateway
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationIpv6CidrBlock: ::/0
      GatewayId: !Ref InternetGateway
 
  SubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTable
 
Outputs:
  VPCId:
    Value: !Ref VPC
  IPv6CidrBlock:
    Value: !GetAtt VPC.Ipv6CidrBlock

Déployez avec :

aws cloudformation create-stack \
  --stack-name ipv6-vpc \
  --template-body file://template.yaml

Tester votre déploiement IPv6 AWS#

Vérifiez la connectivité de bout en bout :

# Test DNS resolution
dig app.example.com AAAA
 
# Test HTTP/HTTPS access
curl -6 https://app.example.com
 
# Test from instance
ssh ec2-user@<instance-ipv6>
ping6 google.com
curl -6 https://ifconfig.co

Utilisez AWS Reachability Analyzer pour vérifier les chemins réseau :

aws ec2 create-network-insights-path \
  --source <instance-eni> \
  --destination <alb-eni> \
  --protocol tcp \
  --destination-port 443
 
aws ec2 start-network-insights-analysis \
  --network-insights-path-id <path-id>

Vérifiez les erreurs de configuration qui pourraient bloquer IPv6.

Problèmes courants et solutions#

Problème : L'instance a une adresse IPv6 mais ne peut pas atteindre Internet Solution : Vérifiez que la table de routage a une route ::/0 vers l'IGW, vérifiez que le groupe de sécurité autorise le trafic IPv6 sortant

Problème : Le répartiteur de charge n'a pas d'enregistrement AAAA Solution : Assurez-vous que ip-address-type est défini sur dualstack, vérifiez que les sous-réseaux ont des blocs CIDR IPv6

Problème : Impossible de se connecter en SSH à l'instance via IPv6 Solution : Ajoutez une règle de groupe de sécurité autorisant TCP port 22 depuis ::/0 ou un CIDR IPv6 spécifique

Problème : La passerelle de sortie uniquement ne fonctionne pas Solution : Vérifiez l'association de la table de routage, vérifiez que l'instance a une adresse IPv6 attribuée

Problème : CloudFront ne sert pas via IPv6 Solution : IPv6 CloudFront est automatique et ne peut pas être désactivé — vérifiez la résolution DNS et la connectivité du client

Considérations de coût#

IPv6 lui-même est gratuit sur AWS. Vous ne payez pas pour les blocs CIDR IPv6 ou les adresses.

Les coûts de transfert de données sont les mêmes pour IPv4 et IPv6. Il n'y a pas d'avantage tarifaire à IPv6 — l'avantage est la simplicité architecturale et l'évitement de l'épuisement IPv4.

Les passerelles Internet de sortie uniquement sont gratuites (contrairement aux passerelles NAT qui coûtent ~$0.045/heure plus les frais de traitement de données).

Articles connexes#

Vérifier la connectivité IPv6 AWS

Utilisez notre outil Ping pour tester vos ressources AWS, et l'outil DNS pour vérifier vos enregistrements AAAA Route 53.

Ressources supplémentaires#