🎯 まず結論
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)
日本語の注文書を
英語に翻訳して発送
→
英語の注文が
到着
通訳兼受付
→
DNS64リゾルバ
英語の住所を日本語に翻訳
→
IPv4 → 合成IPv6に変換
「日本語版の住所帳」に記載
→
AAAAレコードとして返却
住所の先頭に「翻訳済み」マーク
→
64:ff9b:: プレフィックス
配送センター
→
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)を行って返却
🔄 通信の流れ
ステップで追う:IPv6 EC2 から IPv4 API への通信
IPv6専用のEC2インスタンスが、IPv4のみの外部APIに通信する際の具体的な手順です。
🧑💻 EC2がDNSクエリを送信
IPv6専用EC2が「api.example.com」のIPアドレスを知るためにDNSリクエストを送る
dig AAAA api.example.com
📖 DNS64が合成IPv6アドレスを返却
DNS64対応リゾルバが、AAAAレコードが無いことを確認。Aレコード(93.184.216.34)を取得し、プレフィックスを付与して返却
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パケットに変換して宛先サーバーに送信
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アーキテクチャ
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・レガシーシステム
⚙️ AWS設定手順
有効化に必要な設定
DNS64はサブネットで明示的に有効化、NAT64はNATゲートウェイに自動的に含まれます。
1
VPCコンソール → サブネット を開く
2
対象サブネットを選択 →「アクション」→「サブネット設定の編集」
3
「DNS64 を有効化」にチェックを入れて保存
4
VPCのDNSホスト名とDNS解決を有効にしておく(前提条件)
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アドレス不要)にも寄与する。