AWSのVPCは2016年以降、グローバルユニキャストIPv6アドレスの/56ブロックをVPCに無料で割り当てられるようになりました。2024年2月からAWSはパブリックIPv4アドレスの保有に課金(1アドレス月0.005USD)を開始しており、プライベートサブネットからのアウトバウンドをEgress-Only Internet Gateway経由でIPv6化するパターンが実務で増えています。
この記事では、VPCへのIPv6 CIDRブロック付与から始め、パブリック・プライベートの経路設計(IGWとEgress-Only IGW)、EC2インスタンスへのIPv6自動割り当て設定、セキュリティグループのIPv6ルール追加、疎通確認まで、構成設計の実践手順を一通り解説します。
この記事のポイント
・VPCの/56 IPv6 CIDRはAmazon提供の無料ブロック(GUAアドレス)を使う
・パブリックサブネットはIGW、プライベートサブネットはEgress-Only IGWでIPv6経路を分ける
・セキュリティグループのIPv4ルール(0.0.0.0/0)はIPv6に自動適用されない——別途::/0の追加が必須
・EC2へのIPv6自動割り当てはサブネット側でassign-ipv6-address-on-creationを有効化する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜVPCでIPv6対応が求められるのか
IPv4アドレスの枯渇はインフラエンジニアにとって遠い話ではありません。AWSは2024年2月から、使用中のパブリックIPv4アドレスすべてに課金を開始しました(1アドレスあたり月0.005USD。100個保有なら月50USD)。IPv6に移行することでパブリックIPv4の使用本数を削減でき、インフラコストの直接的な削減につながります。もう一つの背景として、クラウドネイティブ設計ではIPv6専用サブネット(IPv4なし)でEC2を動かす構成もAWSが正式サポートしています。ただし、既存のIPv4資産を抱える環境では段階的な移行が現実的なため、デュアルスタック(IPv4とIPv6を同時に使う構成)が今の実務の主流です。
| 構成 | 特徴 | 典型的なユースケース |
|---|---|---|
| IPv4のみ | 既存の多くの構成。パブリックIPv4課金の対象 | レガシーシステム維持。移行前の状態 |
| デュアルスタック | IPv4資産を維持しながらIPv6を追加。段階移行に最適 | 2024年以降の新規VPC構築・既存VPCのIPv6化 |
| IPv6のみ | パブリックIPv4を一切使わない。最大コスト削減 | IPv4依存サービスとの接続が不要なコンテナ環境など |
AWSのIPv6アーキテクチャ概要|デュアルスタックの仕組み
AWS VPCでIPv6を使うために理解すべきコンポーネントは3つです。・VPCの/56 IPv6 CIDRブロック:AWSが管理するグローバルユニキャストアドレス(GUA)空間から自動割り当てされます。/56は最大256個の/64サブネットを含み、1つのVPCに十分な容量があります。Bring Your Own IPv6(BYOIP)でまたは自社の/56を持ち込むことも可能です。
・サブネットの/64 CIDRブロック:各サブネットに/64を割り当てます。IPv6では/64が標準サブネットサイズで、1サブネットに約180京個のアドレスを持てます。
・Egress-Only Internet Gateway(EIGW):IPv6専用のアウトバウンドゲートウェイです。プライベートサブネットのEC2がIPv6でインターネットへアクセスできますが、インターネット側からのインバウンドは受け付けません。IPv4でいうNAT Gatewayと同じ役割を担います。
パブリックサブネットとプライベートサブネットで使うゲートウェイが異なる点が、IPv6経路設計の核心です。
| サブネット種別 | IPv4の経路 | IPv6の経路 |
|---|---|---|
| パブリック | Internet Gateway (IGW):双方向 | Internet Gateway (IGW):双方向(IPv4と同じIGWを使う) |
| プライベート | NAT Gateway:アウトバウンドのみ | Egress-Only Internet Gateway:アウトバウンドのみ |
VPCにIPv6 CIDRブロックを付与する
1. AWS CLIでAmazon提供のIPv6 CIDRを付与する
VPCのIDを確認してから、associate-vpc-cidr-blockコマンドに--amazon-provided-ipv6-cidr-blockオプションを指定して実行します。# VPCのIDを確認する aws ec2 describe-vpcs --region ap-northeast-1 --query 'Vpcs[*].{VpcId:VpcId,Cidr:CidrBlock,Name:Tags[?Key==]|[0].Value}' # VPCにAmazon提供のIPv6 CIDRブロックを割り当てる aws ec2 associate-vpc-cidr-block --vpc-id vpc-0abc1234def567890 --amazon-provided-ipv6-cidr-block --region ap-northeast-1
2. 付与されたIPv6 CIDRブロックを確認する
aws ec2 describe-vpcs --vpc-ids vpc-0abc1234def567890 --query 'Vpcs[0].Ipv6CidrBlockAssociationSet' --region ap-northeast-1
Ipv6CidrBlockの値(例: 2600:1f14:abcd:ef00::/56)が、以降のサブネット割り当てで必要になります。[ { "AssociationId": "vpc-cidr-assoc-0a1b2c3d4e5f67890", "Ipv6CidrBlock": "2600:1f14:abcd:ef00::/56", "Ipv6CidrBlockState": { "State": "associated" }, "Ipv6Pool": "Amazon" } ]
State: associatedになっていれば正常に付与されています。associatingのまま数秒変わらない場合はコマンドを再実行してください。サブネットにIPv6 CIDRを割り当てる
VPCに付与された/56から/64を切り出して各サブネットに割り当てます。3AZ構成でパブリック3サブネット+プライベート3サブネットの計6サブネットを持つ場合、先頭3つ(ef00~ef02)をパブリック用、次の3つ(ef10~ef12)をプライベート用とする命名規則が管理しやすいです。3. パブリックサブネットにIPv6を割り当てる
# パブリックサブネット(AZ-a)にIPv6 CIDRを割り当てる aws ec2 associate-subnet-cidr-block --subnet-id subnet-0pub1a2b3c4d5e6f7 --ipv6-cidr-block 2600:1f14:abcd:ef00::/64 --region ap-northeast-1 # パブリックサブネット(AZ-c) aws ec2 associate-subnet-cidr-block --subnet-id subnet-0pub8a9b0c1d2e3f4 --ipv6-cidr-block 2600:1f14:abcd:ef01::/64 --region ap-northeast-1 # パブリックサブネット(AZ-d) aws ec2 associate-subnet-cidr-block --subnet-id subnet-0pub5e6f7a8b9c0d1 --ipv6-cidr-block 2600:1f14:abcd:ef02::/64 --region ap-northeast-1
4. プライベートサブネットにIPv6を割り当てる
# プライベートサブネット(AZ-a)にIPv6 CIDRを割り当てる aws ec2 associate-subnet-cidr-block --subnet-id subnet-0prv1a2b3c4d5e6f7 --ipv6-cidr-block 2600:1f14:abcd:ef10::/64 --region ap-northeast-1 # プライベートサブネット(AZ-c) aws ec2 associate-subnet-cidr-block --subnet-id subnet-0prv8a9b0c1d2e3f4 --ipv6-cidr-block 2600:1f14:abcd:ef11::/64 --region ap-northeast-1
Egress-Only Internet GatewayでプライベートIPv6経路を設計する
5. Egress-Only Internet Gatewayを作成する
Egress-Only Internet GatewayはVPCに1つ作成します。IPv4のNAT GatewayがAZをまたげないのに対し、EIGWはVPC内のすべてのAZから利用できます。マルチAZにしても1台で済むためコストも抑えられます。# Egress-Only Internet Gatewayを作成する aws ec2 create-egress-only-internet-gateway --vpc-id vpc-0abc1234def567890 --region ap-northeast-1 # 作成したEIGWのIDを確認する aws ec2 describe-egress-only-internet-gateways --region ap-northeast-1 --query 'EgressOnlyInternetGateways[*].{Id:EgressOnlyInternetGatewayId,State:Attachments[0].State}'
6. ルートテーブルにIPv6デフォルトルートを追加する
プライベートサブネット用のルートテーブルに::/0のルートを追加し、EIGWへ向けます。パブリックサブネットのルートテーブルはInternet Gateway(IGW)に向けます。# プライベートサブネットのルートテーブルにEIGW経由のIPv6ルートを追加 aws ec2 create-route --route-table-id rtb-0priv1a2b3c4d5e6f --destination-ipv6-cidr-block ::/0 --egress-only-internet-gateway-id eigw-0a1b2c3d4e5f67890 --region ap-northeast-1 # パブリックサブネットのルートテーブルにIGW経由のIPv6ルートを追加 aws ec2 create-route --route-table-id rtb-0pub1a2b3c4d5e6f --destination-ipv6-cidr-block ::/0 --gateway-id igw-0a1b2c3d4e5f67890 --region ap-northeast-1
describe-route-tablesでIPv6のルート行(DestinationIpv6CidrBlockが::/0の行)が存在するかを確認します。この行がなければプライベートEC2からIPv6でインターネットに出られません。EC2インスタンスにIPv6アドレスを自動割り当てする
7. サブネットのIPv6自動割り当てを有効化する
新しく起動するEC2にIPv6アドレスを自動で付与するには、サブネット側でassign-ipv6-address-on-creationを有効化します。この設定を忘れると、インスタンス起動後にIPv6アドレスが付いておらず手動で追加する手間が発生します。# サブネットのIPv6自動割り当てを有効化する aws ec2 modify-subnet-attribute --subnet-id subnet-0pub1a2b3c4d5e6f7 --assign-ipv6-address-on-creation --region ap-northeast-1 # 設定を確認する(trueになっていれば有効) aws ec2 describe-subnets --subnet-ids subnet-0pub1a2b3c4d5e6f7 --query 'Subnets[0].{SubnetId:SubnetId,AutoIPv6:AssignIpv6AddressOnCreation,IPv6Block:Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock}'
# 既存EC2のENIにIPv6アドレスを追加する(インスタンスIDからENI IDを取得) ENI_ID= aws ec2 assign-ipv6-addresses --network-interface-id --ipv6-address-count 1 --region ap-northeast-1
8. EC2上でIPv6アドレスを確認する
EC2にSSH接続してip -6 addrでIPv6アドレスが付いているか確認します。LinuxサーバーにおけるネットワークインターフェースのIPv6設定についてはIPv6 設定の参考も参照してください。# EC2上でIPv6アドレスを確認する(Amazon Linux 2023) $ ip -6 addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 state UP qlen 1000 inet6 2600:1f14:abcd:ef00:ff4a:b8c:d123:456a/128 scope global dynamic valid_lft 549sec preferred_lft 249sec inet6 fe80::887:b9ff:fe78:a1b2/64 scope link valid_lft forever preferred_lft forever # IPv6の疎通確認(Googleのパブリックアドレスへping6) $ ping6 -c 3 2404:6800:4004:819::200e PING 2404:6800:4004:819::200e(2404:6800:4004:819::200e) 56 data bytes 64 bytes from 2404:6800:4004:819::200e: icmp_seq=1 ttl=118 time=3.42 ms 64 bytes from 2404:6800:4004:819::200e: icmp_seq=2 ttl=118 time=3.38 ms 64 bytes from 2404:6800:4004:819::200e: icmp_seq=3 ttl=118 time=3.41 ms --- 2404:6800:4004:819::200e ping statistics --- 3 packets transmitted, 3 received, 0% packet loss
scope global dynamicのIPv6アドレスが表示されていれば、VPCからのIPv6が正常に割り当てられています。scope linkのfe80::で始まるアドレスはリンクローカルアドレスで、VPC外には到達できません。セキュリティグループにIPv6ルールを追加する
IPv6設計で最もはまりやすい落とし穴が、セキュリティグループのルールです。IPv4の許可ルール(0.0.0.0/0)はIPv6(::/0)に自動適用されません。IPv6通信を通すには、同じポートに対して::/0のIPv6ルールを別途追加する必要があります。・インバウンドSSH(TCP 22):IPv4の
0.0.0.0/0ルールがあっても、IPv6の::/0ルールがなければIPv6でSSH接続できません・インバウンドHTTPS(TCP 443):同様にIPv6の
::/0ルールを追加します・インバウンドICMPv6(プロトコル58):
ping6で疎通確認するにはICMPv6ルールが必要です# SSH(TCP 22)のIPv6インバウンドルールを追加 aws ec2 authorize-security-group-ingress --group-id sg-0a1b2c3d4e5f67890 --ip-permissions '[{"IpProtocol":"tcp","FromPort":22,"ToPort":22,"Ipv6Ranges":[{"CidrIpv6":"::/0"}]}]' --region ap-northeast-1 # HTTPS(TCP 443)のIPv6インバウンドルールを追加 aws ec2 authorize-security-group-ingress --group-id sg-0a1b2c3d4e5f67890 --ip-permissions '[{"IpProtocol":"tcp","FromPort":443,"ToPort":443,"Ipv6Ranges":[{"CidrIpv6":"::/0"}]}]' --region ap-northeast-1 # ICMPv6(ping6に必要。プロトコル58、-1は全タイプを意味する)のインバウンドルールを追加 aws ec2 authorize-security-group-ingress --group-id sg-0a1b2c3d4e5f67890 --ip-permissions '[{"IpProtocol":"58","FromPort":-1,"ToPort":-1,"Ipv6Ranges":[{"CidrIpv6":"::/0"}]}]' --region ap-northeast-1
# アウトバウンドのIPv6を全許可(プライベートEC2からEIGW経由でインターネットへ) aws ec2 authorize-security-group-egress --group-id sg-0a1b2c3d4e5f67890 --ip-permissions '[{"IpProtocol":"-1","Ipv6Ranges":[{"CidrIpv6":"::/0"}]}]' --region ap-northeast-1
「IPv6で通信できない」時のトラブルシュート
【確認1】VPCにIPv6 CIDRが付与されているか
aws ec2 describe-vpcs --vpc-ids vpc-0abc1234def567890 --query 'Vpcs[0].Ipv6CidrBlockAssociationSet[0].{Cidr:Ipv6CidrBlock,State:Ipv6CidrBlockState.State}'
State: associatedでなければassociate-vpc-cidr-blockを再実行します。【確認2】サブネットにIPv6 CIDRが割り当てられており自動割り当てが有効か
aws ec2 describe-subnets --subnet-ids subnet-0pub1a2b3c4d5e6f7 --query 'Subnets[0].{AutoIPv6:AssignIpv6AddressOnCreation,IPv6Block:Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock}'
【確認3】ルートテーブルにIPv6の::/0ルートが存在するか
aws ec2 describe-route-tables --route-table-ids rtb-0priv1a2b3c4d5e6f --query 'RouteTables[0].Routes[?DestinationIpv6CidrBlock!=null]'
EgressOnlyInternetGatewayIdが設定された::/0ルートがあることを確認します。【確認4】セキュリティグループにIPv6ルールがあるか
aws ec2 describe-security-groups --group-ids sg-0a1b2c3d4e5f67890 --query 'SecurityGroups[0].IpPermissions[?Ipv6Ranges[0].CidrIpv6!=null].{Proto:IpProtocol,From:FromPort,IPv6:Ipv6Ranges[0].CidrIpv6}'
authorize-security-group-ingressでルールを追加します。【確認5】EC2インスタンスにIPv6アドレスが付与されているか
aws ec2 describe-instances --instance-ids i-0a1b2c3d4e5f67890 --query 'Reservations[0].Instances[0].NetworkInterfaces[0].Ipv6Addresses'
[]が返る場合はIPv6が付与されていません。assign-ipv6-addressesコマンドで手動割り当てするか、サブネットの自動割り当て設定を有効化してインスタンスを再起動します。本記事のまとめ
VPCのIPv6デュアルスタック設計に必要な作業を一覧にまとめます。| 作業 | コマンド | ポイント |
|---|---|---|
| VPCにIPv6 CIDR付与 | associate-vpc-cidr-block |
Amazon提供の/56ブロックが無料で割り当てられる |
| サブネットにIPv6割り当て | associate-subnet-cidr-block |
各サブネットに/64を割り当てる。パブリック・プライベートで番号帯を分けると管理しやすい |
| Egress-Only IGWの作成 | create-egress-only-internet-gateway |
VPCに1つ作成。マルチAZで共有できる(NAT Gatewayと異なる) |
| ルートテーブルのIPv6ルート追加 | create-route(::/0) |
パブリック→IGW、プライベート→EIGW で経路を分ける |
| EC2へのIPv6自動割り当て | modify-subnet-attribute |
サブネット側で有効化しておくと起動時に自動付与される |
| セキュリティグループのIPv6ルール | authorize-security-group-ingress |
IPv4の0.0.0.0/0ルールはIPv6に自動適用されない。::/0を別途追加が必須 |
VPC設計を「実務の型」として身につけませんか?
IPv6の設定手順は調べれば分かります。でも「デュアルスタックで移行するときに何を先に決めるか」「Egress-Only IGWとNAT Gatewayのコストをどう試算するか」を設計前から語れますか?
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、「Linuxサーバー構築入門マニュアル(図解60P)」を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AWS SSM Patch ManagerでEC2のOSパッチを自動管理する設計|パッチベースライン・メンテナンスウィンドウ・コンプライアンス確認の実践
- この記事の属するカテゴリ:AWS(Amazon Linux)へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます