SJ blog
architecture
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

VPC IPv6デュアルスタック — IPv6アドレス設計と移行パターン

VPCのIPv6デュアルスタック設定、Egress-Only Internet Gateway(IPv6専用)、IPv4のみのリソースとの共存、IPv6 CIDRブロックの割り当て、セキュリティグループとNACLのIPv6対応を解説。

一言結論

VPCのIPv6はすべてグローバルアドレスのためセキュリティグループでのアクセス制御が特に重要で、プライベートサブネットのIPv6アウトバウンドにはEgress-Only Internet Gatewayを使い、IPv4のルールはIPv6に自動適用されないため別個のルール追加が必須だ。

VPC の IPv6 サポート

AWSはVPCでIPv4とIPv6のデュアルスタックをサポートする。IPv6アドレスはAWSから /56 CIDR ブロックを割り当てられる。

IPv4 vs IPv6 の主な違い:
  IPv4: 10.0.0.0/16(プライベートアドレス)
  IPv6: 2406:da14:xxx::/56(グローバルユニキャストアドレス)
  
  注意: IPv6アドレスはすべてグローバルアドレス(プライベートIPv6はない)
  → セキュリティグループで適切にアクセス制御が必要

IPv6 の有効化

# VPCにIPv6 CIDRを割り当て
aws ec2 associate-vpc-cidr-block \
  --vpc-id vpc-xxx \
  --amazon-provided-ipv6-cidr-block

# サブネットにIPv6 CIDRを割り当て(/64固定)
aws ec2 associate-subnet-cidr-block \
  --subnet-id subnet-xxx \
  --ipv6-cidr-block 2406:da14:xxx:0001::/64

# インスタンスにIPv6アドレスを自動割り当て
aws ec2 modify-subnet-attribute \
  --subnet-id subnet-xxx \
  --assign-ipv6-address-on-creation

Egress-Only Internet Gateway

IPv6はNATが不要(すべてグローバルアドレス)だが、プライベートサブネットからのアウトバウンドのみを許可するために Egress-Only Internet Gateway を使う。

Egress-Only Internet Gateway (EIGW) の役割:
  → IPv6 のアウトバウンド通信を許可
  → インターネットからのインバウンドを拒否
  → IPv6の「NATゲートウェイ相当」(厳密にはNATではない)
  
IPv4 NATゲートウェイとの比較:
  IPv4: プライベートサブネット → NAT GW(変換)→ インターネット
  IPv6: プライベートサブネット → Egress-Only IGW → インターネット
        ※ アドレス変換なし(IPv6グローバルアドレスをそのまま使用)
# Egress-Only Internet Gatewayの作成
aws ec2 create-egress-only-internet-gateway \
  --vpc-id vpc-xxx

# ルートテーブルにIPv6のデフォルトルートを追加
aws ec2 create-route \
  --route-table-id rtb-xxx \
  --destination-ipv6-cidr-block ::/0 \
  --egress-only-internet-gateway-id eigw-xxx

デュアルスタック設計のルーティング

パブリックサブネットのルートテーブル:
  宛先 0.0.0.0/0    → Internet Gateway(IPv4)
  宛先 ::/0         → Internet Gateway(IPv6)

プライベートサブネットのルートテーブル:
  宛先 0.0.0.0/0    → NAT Gateway(IPv4アウトバウンド)
  宛先 ::/0         → Egress-Only Internet Gateway(IPv6アウトバウンド)

セキュリティグループの IPv6 対応

# セキュリティグループにIPv6ルールを追加
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxx \
  --ip-permissions '[
    {
      "IpProtocol": "tcp",
      "FromPort": 443,
      "ToPort": 443,
      "Ipv6Ranges": [{"CidrIpv6": "::/0", "Description": "IPv6 HTTPS"}]
    }
  ]'
IPv4とIPv6のルールは別々に設定:
  → IPv4: IpRanges(0.0.0.0/0)
  → IPv6: Ipv6Ranges(::/0)
  
  どちらも許可したい場合は両方のルールが必要

NACLのIPv6対応

NACLでIPv6を制御:
  → IPv4のルールはIPv6には適用されない
  → IPv6用に別途ルールを追加する必要がある
  
例: IPv6のインバウンドHTTPSを許可
  ルール100: TCP 443 0.0.0.0/0 ALLOW(IPv4)
  ルール110: TCP 443 ::/0 ALLOW(IPv6)

IPv6専用サブネット

IPv4アドレスなしのIPv6のみのサブネットも作成できる(IPv6-only)。

# IPv6専用サブネットの作成
aws ec2 create-subnet \
  --vpc-id vpc-xxx \
  --ipv6-cidr-block 2406:da14:xxx:0002::/64 \
  --ipv6-native  # IPv6専用
IPv6専用の用途:
  → Lambda等のIPv4不要のサービス
  → 将来のIPv4枯渇対策
  → IPv4プライベートアドレス空間の節約

試験頻出ポイント

シナリオ回答
IPv6でプライベートサブネットからアウトバウンドのみEgress-Only Internet Gateway
IPv4のNATゲートウェイ相当のIPv6機能Egress-Only Internet Gateway
VPCのIPv6 CIDRのプレフィックス長/56(サブネットは/64固定)
IPv6アドレスはプライベートIPかいいえ(グローバルユニキャスト)
IPv6セキュリティグループのルールIPv4とは別個にIPv6ルールを追加

まとめ

VPCのIPv6はデュアルスタックで既存のIPv4と共存できる。IPv6ではすべてグローバルアドレスのため、セキュリティグループでのアクセス制御が重要だ。プライベートサブネットのIPv6アウトバウンドにはEgress-Only Internet Gatewayを使う。