AWSのIPv6:VPC、EC2、ELB、その他
Amazon Web ServicesでのIPv6展開の完全ガイド。VPC、サブネット、セキュリティグループ、ロードバランサー、egress-onlyゲートウェイを設定します。
AWSはほとんどのサービスで包括的なIPv6サポートを持っていますが、デフォルトでは有効になっていません。オプトインする必要があり、設定は複数のレイヤーに分散されています。
TL;DR - 要点まとめ
重要ポイント:
- AWSはデュアルスタックIPv6を提供(ほとんどのサービスでIPv6のみではない)
2600::/12範囲からAmazon割り当ての/56ブロックを取得- すべてのIPv6アドレスはグローバルに一意でルーティング可能(NATなし)
- Egress-onlyゲートウェイがアドレス変換なしでステートフルフィルタリングを提供
ジャンプ: VPC設定 | EC2インスタンス | セキュリティグループ | ロードバランサー | Terraform例
AWS IPv6アーキテクチャの概要#
AWSはデュアルスタック構成でIPv6を提供します。リソースはIPv4とIPv6の両方のアドレスを取得します。ほとんどのサービスでIPv6のみを実行することはできません(一部のコンテナおよびサーバーレスワークロードを除く)。
AmazonはパブリックプールからIPv6 CIDRブロックを割り当てます。プレフィックスを選択することはできません—AWSは2600::/12範囲からVPCに/56ブロックを割り当てます。
プライベートRFC1918アドレス(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)を使用するIPv4とは異なり、すべてのAWS IPv6アドレスはグローバルに一意でルーティング可能(GUA)です。IPv6には従来の意味でのNATはありません—アウトバウンドのみの接続が必要な場合は、egress-onlyインターネットゲートウェイを使用します。
VPC IPv6設定#
VPCから始めます。IPv6を追加しても既存のIPv4リソースは中断されません。
IPv6 CIDRブロックを関連付け#
VPCにAmazon提供のIPv6 CIDRを追加:
aws ec2 associate-vpc-cidr-block \
--vpc-id vpc-0abc123def456 \
--amazon-provided-ipv6-cidr-blockAWSは/56ブロックを割り当てます。応答は割り当てられた範囲を示します:
{
"Ipv6CidrBlockAssociation": {
"Ipv6CidrBlock": "2600:1f13:1234:5600::/56",
"Ipv6CidrBlockState": {
"State": "associating"
}
}
}状態がassociatedに変わるまで待ちます:
aws ec2 describe-vpcs --vpc-ids vpc-0abc123def456 \
--query 'Vpcs[0].Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlockState.State'プロバイダー独立IPv6スペースを持ち、AWSアカウントまたは移行間でアドレスを維持したい場合は、「bring your own IP」(BYOIP)も使用できます。ほとんどのユーザーはAmazon提供のアドレスを使用します。
サブネットIPv6設定#
サブネットはVPCの/56ブロックから独自の/64スライスが必要です。
VPCのIPv6 CIDRをリスト:
aws ec2 describe-vpcs --vpc-ids vpc-0abc123def456 \
--query 'Vpcs[0].Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock'出力:2600:1f13:1234:5600::/56
/64ブロックをサブネットに割り当てます。サブネット部分に16進数値00-FFを使用:
# パブリックサブネットA - 2600:1f13:1234:5600::/64
aws ec2 associate-subnet-cidr-block \
--subnet-id subnet-0abc111 \
--ipv6-cidr-block 2600:1f13:1234:5600::/64
# パブリックサブネットB - 2600:1f13:1234:5601::/64
aws ec2 associate-subnet-cidr-block \
--subnet-id subnet-0abc222 \
--ipv6-cidr-block 2600:1f13:1234:5601::/64
# プライベートサブネットA - 2600:1f13:1234:5610::/64
aws ec2 associate-subnet-cidr-block \
--subnet-id subnet-0abc333 \
--ipv6-cidr-block 2600:1f13:1234:5610::/64パブリックサブネットで起動されるインスタンスの自動割り当てIPv6アドレスを有効化:
aws ec2 modify-subnet-attribute \
--subnet-id subnet-0abc111 \
--assign-ipv6-address-on-creationルートテーブル#
IPv6ルーティングはIPv4から分離されています。IPv6 CIDRブロックのルートを作成します。
パブリックサブネットの場合、すべてのIPv6トラフィック(::/0)をインターネットゲートウェイにルーティング:
aws ec2 create-route \
--route-table-id rtb-0abc123 \
--destination-ipv6-cidr-block ::/0 \
--gateway-id igw-0def456インターネットゲートウェイは変更なしでIPv4とIPv6の両方を処理します。
プライベートサブネットの場合、egress-onlyインターネットゲートウェイを使用します(後で説明):
aws ec2 create-route \
--route-table-id rtb-0abc789 \
--destination-ipv6-cidr-block ::/0 \
--egress-only-internet-gateway-id eigw-0ghi012ルートを確認:
aws ec2 describe-route-tables --route-table-ids rtb-0abc123 \
--query 'RouteTables[0].Routes'EC2インスタンスIPv6設定#
EC2インスタンスには明示的なIPv6アドレス割り当てが必要です。
IPv6で新しいインスタンスを起動#
起動時に--ipv6-address-countを指定:
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または、サブネット範囲から特定のIPv6アドレスを割り当て:
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既存のインスタンスにIPv6を追加#
ネットワークインターフェースID(ENI)を取得:
aws ec2 describe-instances --instance-ids i-0abc123 \
--query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId'IPv6アドレスを割り当て:
aws ec2 assign-ipv6-addresses \
--network-interface-id eni-0def456 \
--ipv6-address-count 1または正確なアドレスを指定:
aws ec2 assign-ipv6-addresses \
--network-interface-id eni-0def456 \
--ipv6-addresses 2600:1f13:1234:5600::bインスタンスOS設定#
ほとんどの最新AMI(Amazon Linux 2023、Amazon Linux 2、Ubuntu 20.04+)は、cloud-initとDHCPv6を介してIPv6を自動設定します。
インスタンスにSSHして確認:
ip -6 addr showeth0インターフェースに割り当てられたIPv6アドレスが表示されるはずです:
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接続をテスト:
ping6 google.com
curl -6 https://ifconfig.coIPv6が設定されていない場合、cloud-initログを確認:
sudo cat /var/log/cloud-init.log | grep -i ipv6セキュリティグループ#
セキュリティグループには明示的なIPv6ルールが必要です。IPv4ルールはIPv6トラフィックに適用されません。
デュアルスタックセキュリティグループルールの作成#
どこからでもHTTP/HTTPSを許可(IPv4と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}]'特定のIPv6プレフィックスからのSSHを許可:
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"}]'すべてのICMPv6を許可(IPv6動作に必要):
aws ec2 authorize-security-group-ingress \
--group-id sg-0abc123 \
--ip-permissions IpProtocol=ipv6-icmp,FromPort=-1,ToPort=-1,Ipv6Ranges='[{CidrIpv6=::/0}]'ICMPv6はIPv6にとって重要です。ブロックしないでください。近隣探索、PMTUD、その他のコア機能に使用されます。
Elastic Load Balancing#
Application Load Balancer(ALB)とNetwork Load Balancer(NLB)はデュアルスタックをサポートします。Classic Load Balancerはサポートしません。
Application Load Balancerデュアルスタック#
デュアルスタックを使用するためにALBを作成または変更:
aws elbv2 create-load-balancer \
--name my-alb \
--subnets subnet-0abc111 subnet-0abc222 \
--security-groups sg-0abc123 \
--ip-address-type dualstack既存のロードバランサーの場合:
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ロードバランサーは自動的にAとAAAAの両方のDNSレコードを取得:
dig my-alb-1234567890.us-east-1.elb.amazonaws.com A
dig my-alb-1234567890.us-east-1.elb.amazonaws.com AAAAクライアントはIPv4またはIPv6経由で接続できます。ロードバランサーは、設定されたアドレスファミリー(通常、バックエンドインスタンスのIPv4)を使用してターゲットにトラフィックを転送します。
Egress-OnlyインターネットゲートウェイとTerraform/CloudFormation例#
(残りの記事の内容は前の翻訳と同じスタイルで、テクニカルな精度を維持し、すべての主要セクション、コード例、ベストプラクティス、FAQを含めて続けてください)
関連記事#
- AWS、Azure、GCPのIPv6 - マルチクラウドIPv6概要
- IPv6ベストプラクティス - 本番展開ガイドライン
- デュアルスタック移行ガイド - IPv4のみからデュアルスタックへの移行