📡 AWS VPC ネットワーキング

DNS64 & NAT64 完全図解ガイド

IPv6専用環境からIPv4サービスへのアクセスを実現する
2つの変換技術を、たとえ話で直感的に理解する

DNS64とNAT64は「通訳ペア」。セットで使ってIPv6→IPv4の橋渡しをする

📖 DNS64 = 住所変換(案内係)

IPv4アドレスを特殊なIPv6アドレスに変換するDNSの仕組み。
AWSでは64:ff9b::/96プレフィックスを付与。サブネット単位で有効化する。

🔄 NAT64 = パケット変換(配達係)

実際のIPv6パケットをIPv4パケットに変換して転送する仕組み。
AWS NATゲートウェイに組み込み済み。追加設定は不要。

💡
なぜ必要? IPv6専用サブネットのリソース(EC2など)がIPv4のみに対応した外部サービス(古いAPIなど)にアクセスするため。IPv6への完全移行が進むまでの過渡期に不可欠な技術です。

「日本語オフィス」から「英語圏のお店」に注文する

DNS64とNAT64の仕組みを、言語が違うオフィス間のコミュニケーションに例えて理解しましょう。

📝 全体の流れ:注文が届くまで
🧑‍💻
日本語オフィスの社員
IPv6専用の
EC2インスタンス
「このお店の
住所教えて」
📖
通訳兼受付(DNS64)
英語住所→日本語住所
に変換して返答
「この住所で
注文して」
🔄
配送センター(NAT64)
日本語の注文書を
英語に翻訳して発送
英語の注文が
到着
🏪
英語圏のお店
IPv4のみ対応の
外部サービス
📖 DNS64 のたとえ対応表
通訳兼受付 DNS64リゾルバ
英語の住所を日本語に翻訳 IPv4 → 合成IPv6に変換
「日本語版の住所帳」に記載 AAAAレコードとして返却
住所の先頭に「翻訳済み」マーク 64:ff9b:: プレフィックス
🔄 NAT64 のたとえ対応表
配送センター NATゲートウェイ
日本語の注文書を英語に翻訳 IPv6パケット → IPv4に変換
英語圏の配送ルートで発送 IPv4ネットワークへルーティング
返事も日本語に翻訳して返す レスポンスをIPv6に逆変換

DNS64 と NAT64 の役割を詳しく見る

それぞれが具体的にどんな処理を行っているのか、技術的な視点で整理します。

DNS レイヤー

📖 DNS64 の動作

🔍
クライアントがDNSクエリを送信すると、DNS64対応リゾルバがAAAAレコード(IPv6)を探す
AAAAレコードが存在しない場合、Aレコード(IPv4)を取得し変換処理を開始
🔧
IPv4アドレスに64:ff9b::/96プレフィックスを付けて合成IPv6アドレスを生成
合成されたIPv6アドレスをAAAAレコードとしてクライアントに返却
パケットレイヤー

🔄 NAT64 の動作

📨
合成IPv6アドレス宛のパケットがNATゲートウェイに到達
✂️
IPv6ヘッダーからプレフィックス部分を除去し、埋め込まれたIPv4アドレスを抽出
📦
IPv6パケットをIPv4パケットに再構成し、送信元をNATゲートウェイのElastic IPに変換
↩️
IPv4サーバーからの応答を受け取り、逆方向の変換(IPv4→IPv6)を行って返却
🏷️ アドレス変換の仕組み(DNS64)
Well-Knownプレフィックス 64:ff9b::
元のIPv4アドレス 203.0.113.50
合成されたIPv6アドレス 64:ff9b::cb00:7132
※ 203.0.113.50 → 16進数で cb.00.71.32 → IPv6に埋め込み

ステップで追う:IPv6 EC2 から IPv4 API への通信

IPv6専用のEC2インスタンスが、IPv4のみの外部APIに通信する際の具体的な手順です。

🧑‍💻 EC2がDNSクエリを送信
IPv6専用EC2が「api.example.com」のIPアドレスを知るためにDNSリクエストを送る
# EC2 (IPv6専用) → VPC DNSリゾルバ
dig AAAA api.example.com
📖 DNS64が合成IPv6アドレスを返却
DNS64対応リゾルバが、AAAAレコードが無いことを確認。Aレコード(93.184.216.34)を取得し、プレフィックスを付与して返却
# AAAAレコードなし → Aレコード取得 → 合成
93.184.216.34 64:ff9b::5db8:d822
📨 EC2がIPv6パケットを送信
EC2は受け取った合成IPv6アドレス宛にHTTPリクエストを送信。ルートテーブルにより、64:ff9b::/96宛の通信はNATゲートウェイに転送される
# ルートテーブル設定
送信先: 64:ff9b::/96 ターゲット: nat-gateway-id
🔄 NAT64がパケットを変換・転送
NATゲートウェイが合成IPv6アドレスからIPv4アドレスを抽出し、IPv4パケットに変換して宛先サーバーに送信
# NAT64変換
src: 2001:db8::1 EIP (52.x.x.x)
dst: 64:ff9b::5db8:d822 93.184.216.34
✅ レスポンスが逆変換されて返る
IPv4サーバーからの応答をNATゲートウェイが受け取り、IPv6パケットに変換してEC2に返却。EC2から見ると、通常のIPv6通信と同じ感覚で通信完了

AWS VPC における DNS64/NAT64 の構成図

AWS環境で DNS64 と NAT64 がどこに配置され、どう連携するかを俯瞰します。

🏗️ VPC 内の構成要素と通信経路
IPv6 サブネット
🧑‍💻 EC2 (IPv6専用)
IPv6アドレスのみ保持
📖 Route 53 Resolver (DNS64)
サブネットで有効化
合成AAAAレコードを返却
⬇️ 64:ff9b::/96 宛のパケットをルーティング
パブリック サブネット
🔄 NAT Gateway (NAT64内蔵)
IPv6→IPv4パケット変換 ・ Elastic IP付与 ・ 追加設定不要
⬇️ IPv4パケットとしてインターネットへ
外部
🌐 Internet Gateway
VPCとインターネットの境界
🏪 IPv4専用サービス
外部API・レガシーシステム

有効化に必要な設定

DNS64はサブネットで明示的に有効化、NAT64はNATゲートウェイに自動的に含まれます。

📖 DNS64 の有効化
1 VPCコンソール → サブネット を開く
2 対象サブネットを選択 →「アクション」→「サブネット設定の編集」
3 「DNS64 を有効化」にチェックを入れて保存
4 VPCのDNSホスト名とDNS解決を有効にしておく(前提条件)
🔄 NAT64 の確認
1 パブリックサブネットにNATゲートウェイが存在すること(NAT64は自動的に有効)
2 ルートテーブルに 64:ff9b::/96 → nat-gw を追加
3 NATゲートウェイにElastic IPが割り当てられていることを確認
4 セキュリティグループでアウトバウンドのIPv4通信を許可
⚠️
ルートテーブルを忘れずに:DNS64でアドレス変換しても、64:ff9b::/96宛のルートがなければパケットは届きません。プライベートサブネットのルートテーブルにNATゲートウェイ向けのルートを必ず追加してください。

DNS64 vs NAT64 早見表

2つの技術の違いを一覧で比較します。

項目 📖 DNS64 🔄 NAT64
役割 DNS応答の変換(住所の翻訳) 実パケットの変換(荷物の翻訳)
処理レイヤー DNSレイヤー(L7相当) ネットワークレイヤー(L3/L4)
AWSサービス Route 53 Resolver NAT Gateway
有効化 サブネット設定で明示的に有効化 NATゲートウェイに自動組み込み
使用プレフィックス 64:ff9b::/96 64:ff9b::/96(DNS64と同じ)
たとえ話 英語の住所を日本語に翻訳する受付係 日本語の注文書を英語に翻訳して配送する配達係
単体で使用 ❌(パケット変換が必要) ❌(合成アドレスの生成が必要)

覚えておくべき3つのポイント

1
DNS64とNAT64はペアで使う ― DNS64が「宛先の翻訳」、NAT64が「通信データの翻訳」を担当。片方だけでは機能しない。
2
AWSではDNS64だけ手動設定が必要 ― NAT64はNATゲートウェイに自動内蔵。DNS64はサブネット単位で有効化し、ルートテーブルに64:ff9b::/96のルートを追加する。
3
IPv6移行期の必須技術 ― IPv6専用環境を推進しながらも、IPv4レガシーサービスとの互換性を維持するための「過渡期の橋」。コスト削減(IPv4アドレス不要)にも寄与する。
AWS DNS64 & NAT64 完全図解ガイド | IPv6移行を支えるネットワーク変換技術

Created by SSuzuki1063

AWS SAP Learning Resources