Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IPv6 VPC の実装パターンをいくつか

IPv6 VPC の実装パターンをいくつか

JAWS-UG 茨城 #11 CDK 支部コラボ回
2026/2/1

Avatar for hmatsu47

hmatsu47 PRO

February 01, 2026
Tweet

Resources

AWS で試して学ぶ IPv6(BuriKaigi 2026 セッション補足資料)

https://zenn.dev/hmatsu47/books/burikaigi2026-aws-ipv6-study

光ファイバーと IPv6 絡みの話 / お題 [2] IPv6 絡みの話

https://speakerdeck.com/hmatsu47/yokohama-fiber-ipv6?slide=11

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. 自己紹介 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 • 現在: ◦ 名古屋で Web インフラのお守り係をしています

    ◦ SRE チームに所属しつつ技術検証の支援をしています ◦ 普段カンファレンス・勉強会では DB の話しかしていません (ほぼ)でした 2
  2. おことわり • これは BuriKaigi 2026(1/9)で話した「AWS で試して 学ぶ IPv6」というセッションのダイジェストに、 JAWS-UG 横浜の

    re:Invent 2025 re:Cap Network 回 (1/24)で話した IPv6 絡みの話を一部加筆する形で再構 成したものです 8
  3. おしながき • IP アドレス(グローバルアドレス)利用の現況について • ①IPv6 対応前の IPv4 環境について(初期状態) •

    ②サーバー環境の IPv6 対応(デュアルスタック化) • ③クライアント環境の IPv6 対応(デュアルスタック編) • ④クライアント環境の IPv6 対応(NAT64/DNS64 編) • ⑤サーバー環境のターゲットを IPv6(ULA)化 10 別資料(Zenn)→
  4. 新規割り当て用 IPv4 アドレスブロックはほぼ枯渇 12 • RIR(地域インターネットレジストリ)の IPv4 アドレス在庫 • AFRINIC(アフリカ地域)

    ・APNIC(アジア太平洋地域)を 除くと利用可能(Available)な アドレスの在庫はすでに 0 • AFRINIC・APNIC 合計で残り 約 400 万個(2025Q3 時点) →現在は未使用アドレスブロックの移転  が中心に 出典 : https://www.nro.net/wp-content/uploads/NRO-Number-Resource-Status-Report-Q3-2025-FINAL.pdf
  5. 2024/2 〜 AWS パブリック IPv4 アドレス有料化 • すべてのパブリック IPv4 アドレスの利用に対して

    1 IP アドレスあたり 0.005 USD/hour が課金されるように ◦ 2024 年 2 月 1 日より ◦ https://aws.amazon.com/jp/blogs/news/new-aws-public-ipv4-address-cha rge-public-ip-insights/ ◦ CloudFront などはサービス本体の料金以外に課金なし 13
  6. IPv6 アドレスの利用状況は? 14 • 見えないところで利用が進んでいる(日本のケース) • 2023 年に 50% を超えた

    • ここ 2 年で IPv6 Capable が 60% に迫っている • モバイルに限ればもっと進ん でいる データの出典 : APNIC Labs Measurements and Data / https://labs.apnic.net/measurements/ IPv6 Capable は「IPv6 に到達できた端末の割合」・IPv6 Preferred は「デュアルスタックで IPv6 が選ばれた割合」
  7. IPv4 VPC 環境(初期状態) 16 • 2 種類の VPC 環境を作成 ◦

    サーバー用 VPC 環境 ▪ VPC・ALB・EC2(Web サーバー)など ◦ クライアント用 VPC 環境 ▪ VPC・VPC エンドポイント ・EC2(クライアント)な ど
  8. クライアント用 VPC・関連リソース 19 CDK L2 Construct は現在対応中?(PR #36538) https://github.com/aws/aws-cdk/pull/36538 const

    eip = new ec2.CfnEIP(this, 'NatEip'); new ec2.Vpc(this, 'Vpc1', { natGatewayProvider: ec2.NatProvider.regionalGateway({ eip, }), }); new ec2.Vpc(this, 'Vpc2', { natGatewayProvider: ec2.NatProvider.regionalGateway({ allocationId: eip.attrAllocationId, }), });
  9. この構成のねらい • ALB をデュアルスタック化することで、インターネット から IPv4・IPv6 の両方でアクセス可能にする ◦ Web サーバーについては

    IPv4 のまま変更なし ◦ ただしアプリケーション側での IPv6 アドレス対応は必要 ▪ 画面表示、データ保存領域、アドレスの比較など 21
  10. サーバー環境の IPv6 対応(デュアルスタック化) 23 IPv6(GUA)割り当て ALBデュアルスタック化 IPv6デフォルトルート追加 CDK L2 Construct

    対応は v2.121.0(2024/1) https://github.com/aws/aws-cdk/relea ses/tag/v2.121.0 new elbv2.ApplicationLoadBalancer(this, 'ApplicationLoadBalancer', { vpc: vpc, vpcSubnets: { … }, internetFacing: true, ipAddressType: elbv2.IpAddressType.DUAL_STACK });
  11. サーバー環境の IPv6 対応(デュアルスタック化) 24 IPv6(GUA)割り当て ALBデュアルスタック化 IPv6デフォルトルート追加 CDK L2 Construct

    対応は v2.121.0(2024/1) https://github.com/aws/aws-cdk/relea ses/tag/v2.121.0 new elbv2.ApplicationLoadBalancer(this, 'ApplicationLoadBalancer', { vpc: vpc, vpcSubnets: { … }, internetFacing: true, ipAddressType: elbv2.IpAddressType.DUAL_STACK }); CDK で VPC を Dual Stack 化し「Public Subnet に は IPv6 アドレスを割り当てて Private Subnet には 割り当てない」を実現するには L1 Construct が必要
  12. ALB のデュアルスタック化 25 • IPv6 は IPv4 とは互換性がない ◦ IPv6

    と IPv4 は直接通信を行うことができない • 両方が動作する構成=デュアルスタック ◦ ALB をデュアルスタック化しておけばターゲット Web サーバー を IPv6 対応にする必要はない ▪ ただしアプリケーション側の対応は必要(後述)
  13. IPv6 アドレスの構成 26 • 全 128 ビット・16 ビットずつ「:」区切り・十六進表記 ◦ 前半

    64 ビットをサブネットプレフィックス、後半 64 ビットを インターフェース識別子(IID)と呼ぶ ◦ 長くなるので省略ルールがある ▪ 16 ビット区切りのフィールドの先頭で連続する 0 は省略可 ▪ 連続する 16 ビットフィールドの 0 は「::」で省略可(1 か所のみ) • 例:2001:db8::2:0:1/64
  14. IPv6 グローバルユニキャストアドレス(GUA) 27 • 全世界で一意に割り当てられたアドレス ◦ IPv4 のグローバルアドレス相当 • IPv4

    のプライベートアドレスに類似のアドレスとして、 ユニークローカルユニキャストアドレス(ULA)がある ◦ ただし IPv6 ULA と GUA の間での NAT は非推奨 ▪ AWS の NAT ゲートウェイでも非サポート ▪ インターネットアクセスが必要なら(本来は)GUA を割り当てる必要がある
  15. アプリケーション側で必要な対応 28 • 文字数が増える分の表示領域・データサイズ調整が必要 ◦ IPv4 ならサブネット長なしで最大 15 文字、ありで最大 18

    文字 ◦ IPv6 ではサブネット長なしで最大 39 文字、ありで最大 43 文字 ◦ DB で IP アドレス専用のデータ型を使わない場合も注意 • 文字列として IPv6 を比較する場合、一意な表記(または 省略なしの表記)にしないと正しく比較できない ◦ RFC 5952 で一意に表記する方法が示されている
  16. クライアント環境のデュアルスタック化 • クライアント自身が IPv4・IPv6 それぞれの通信スタック を使って相手のホストと通信する ◦ 外部の IPv4 ホスト宛ての通信は

    IPv4 デフォルトルートで NAT ゲートウェイに流す ◦ 外部の IPv6 ホスト宛ての通信は IPv6 デフォルトルートで Egress Only インターネットゲートウェイ(EIGW)に流す ▪ Egress Only インターネットゲートウェイで外からアクセスできないように 32
  17. IPv4・IPv6 のどちらを優先する? • 現在は「IPv4・IPv6 の両方(ほぼ)同時にアクセスを試 行して、最初に応答したほうを選択する」仕組みが主流 ◦ Happy Eyeballs ▪

    現在は RFC 8305 によるバージョン 2 が広く使われる ▪ 実質的に IPv6 が優先される ▪ QUIC 対応を意図したバージョン 3 の策定も進行中 ◦ ただしこれが「デファクトスタンダード」ではない点に注意 ▪ たとえば NLB → ALB の通信は現状 IPv4 が優先される 33
  18. クライアント環境の IPv6 対応(NAT64/DNS64) 37 VPCエンドポイント 付け替え IPv6(GUA)専用サブネット作成 &ルートテーブル作成・ IPv6デフォルトルート追加 EC2(クライアント)起動

    サブネット・EC2作成後、 ・NAT64用ルートをルートテーブ ルに追加 ・サブネットでDNS64有効化 CDK で NAT64 ルート 追加は L2 Construct DNS64 有効化は L1 Construct で対応 // NAT64 ルート追加 subnet.addIpv6Nat64Route(natGatewayId: natGatewayId); // DNS64 有効化(L1 Construct) cfnSubnet.enableDns64 = true;
  19. クライアント環境の IPv6 対応(NAT64/DNS64) 38 VPCエンドポイント 付け替え IPv6(GUA)専用サブネット作成 &ルートテーブル作成・ IPv6デフォルトルート追加 EC2(クライアント)起動

    サブネット・EC2作成後、 ・NAT64用ルートをルートテーブ ルに追加 ・サブネットでDNS64有効化 CDK で NAT64 ルート 追加は L2 Construct DNS64 有効化は L1 Construct で対応 // NAT64 ルート追加 subnet.addIpv6Nat64Route(natGatewayId: natGatewayId); // DNS64 有効化(L1 Construct) cfnSubnet.enableDns64 = true; CDK で IPv6 VPC の各パターンを構成する場合、 L2 Construct のみで再現するのは困難 いまのところは L1 Construct メインと割り切る か CFn を使うのが良さそう
  20. NAT64/DNS64 での通信 • EC2(クライアント)から Route 53 VPC Resolver に正引 き

    ◦ AAAA レコード(IPv6 用)→そのまま IPv6 アドレスを返す ◦ A レコードのみ→「64:ff9b::」に IPv4 アドレスを合成して返す • ルートテーブルにしたがって通信を各ゲートウェイへ ◦ NAT ゲートウェイで「64:ff9b」で始まるアドレス宛ての通信を IPv4 に変換して宛先へ 39
  21. この構成のねらい • ALB のターゲットを IPv6 専用プライベートサブネットに する ◦ Web サーバーから不要なインターネットアクセスをさせないため

    IPv6 アドレスとしてユニークローカルユニキャストアドレス (ULA)を割り当てる ◦ ULA を割り当てるため IP Address Manager(IPAM)を使う 41
  22. IP Address Manager(IPAM) 43 • VPC の IP アドレスを計画・追跡・監視しやすくする機能 ◦

    機能例 ▪ 組織内の IP アドレス割り当ての履歴を表示する ▪ 特定のビジネスルールを使用して CIDR を VPC に自動的に割り当てる ▪ ネットワーク接続に関する問題のトラブルシューティングを行う ▪ 持ち込み IP(BYOIP)アドレスのリージョン間・アカウント間共有を有効に する ◦ https://docs.aws.amazon.com/ja_jp/vpc/latest/ipam/what-it-is-ipam.html
  23. IPAM からプライベートなアドレスを割り当てる 44 • IPAM から割り当て可能なプライベート「扱い」の IPv6 アドレスは 2 種類

    ◦ IPv6 ULA(ユニークローカルユニキャストアドレス) ◦ 持ち込み IPv6 GUA(グローバルユニキャストアドレス) ▪ プライベート GUA CIDR を有効化するとプライベート扱いに ▪ インターネットにルート広告しないことで外部との直接アクセスを制限
  24. プライベートなアドレスを割り当てる場合の注意 45 • これらのアドレスを使って IPv6 専用サブネットを作成す ると、EIGW / NAT ゲートウェイ経由のインターネットア

    クセスはできない ◦ AWS のサービスは NAT66 / NPTv6 には(今のところは)非対応 ▪ Web サーバーから外部の API にアクセスしたいケースなどでアクセス不可 ▪ AWS のサービスへのアクセスにも NAT ゲートウェイ等は使えない →必要なら VPC に IPv6 の Private なエンドポイントを個々に作成する
  25. NAT66 / NPTv6 46 • IPv6 to IPv6 の NAT

    ◦ IPv6 の本来の設計思想では IPv6 アドレス間の NAT は非推奨 ◦ ただし IPv4 で NAT をセキュリティ機能的な扱いで利用してきた 経緯から、ユーザーのニーズはある ◦ 一部妥協する形で「IPv6 のサブネットプレフィックスだけ置換 する」NPTv6 が実験的 RFC(6296)として規定された ▪ Linux に実装されているのは NPTv6
  26. どうしても NAT66 / NPTv6 を使いたい場合は 47 • NAT66 / NPTv6

    対応アプライアンスを配置 ◦ https://aws.amazon.com/jp/blogs/news/design-and-build-ipv6-internet-inspection-a rchitectures-on-aws ▪ 当然構築・運用管理にコストが掛かる
  27. ハンズオン 49 • AWS IPv6 Hands On (japanese) ◦ https://catalog.us-east-1.prod.workshops.aws/workshops/025ae486-39d3

    -4de4-a12b-049970983d18/ja-JP ▪ 内容は基礎的なもの • Get hands-on with IPv6 ◦ https://catalog.workshops.aws/ipv6-on-aws/en-US ▪ EKS などにも対応