用語辞典・IPv6・接続方式

DNS64

DNS64とは

DNS64は、AAAAレコードを持たずAレコードだけを持つ名前について、NAT64で使える合成AAAAレコードを生成するDNS機能です。読みはディーエヌエス・シックスティーフォーです。

IPv6専用クライアントがAAAAを問い合わせたとき、DNS64はまず本物のAAAAを探します。利用可能なAAAAがなく、同じ名前のAレコードがあれば、NAT64用プレフィックスとIPv4アドレスを組み合わせたAAAAレコードを合成します。

DNS64はDNS応答を作る機能で、パケットを変換しません。合成IPv6アドレスへ送られた通信をIPv4へ変換するのはNAT64です。

実AAAAがあればそのまま返し、なければAから合成できるか調べる存在するIPv6接続先を、合成結果で置き換えない
DNS64がAAAA問い合わせに対し、実AAAAがある場合はそのまま返し、AAAAがなくAだけならNAT64プレフィックスとIPv4アドレスから合成AAAAを作り、どちらもなければ合成しない三分岐とDNSSEC検証を示す図解
図1実AAAAと合成AAAAは見た目が同じ種類のDNSレコードですが、後者の宛先はNAT64へ経路制御され、最終的には埋め込んだIPv4サーバーへ変換されます。

AAAA問い合わせへの三つの結果を分ける

合成する条件は「AAAAが得られず、Aが得られる」場合存在しない名前やAもない名前から、宛先を推測して作らない
AAAAあり権威データを返す

ネイティブIPv6の接続先を優先し、合成処理へ進まない

AAAAなし・AありAAAAを合成

Pref64と各AのIPv4アドレスをRFC 6052形式で組み合わせる

AAAAなし・Aなし空またはエラーを返す

元のDNS結果を基に、存在しないIPv4宛先を作らない

図2CNAMEが返る場合は別名連鎖をたどった結果を用います。複数Aがあれば対応する複数の合成AAAAを作れます。

合成アドレスは、NAT64と同じPref64を使う

DNS64はAレコードの32ビットIPv4アドレスを、NAT64で設定されたPref64::/nへ埋め込みます。NAT64が別のプレフィックスを待っていると、合成した宛先が変換装置へ届きません。

一般の端末はDNS64の存在を意識せず、受け取ったAAAAへIPv6接続します。端末がPref64を知る必要がある機能では、ipv4only.arpaを利用するRFC 7050の発見手順などがあります。

IPv4アドレスの直書きには働かない

アプリがURLや設定へ192.0.2.33のようなIPv4リテラルを直接書いている場合、DNS問い合わせ自体がないためDNS64は合成できません。IPv4ソケットだけを使う古いアプリも、合成AAAAを利用できない場合があります。

この互換性を端末側で補う仕組みが464XLATです。一方、名前を使いIPv6ソケットで接続できるアプリは、DNS64とNAT64による一段の状態保持型変換を利用できます。

DNSSECでは、権威の署名とローカル合成を区別する

DNSSECは権威DNSが作ったRRsetの改変を検知します。DNS64がAから新しいAAAAを作ると、その合成AAAAに権威側のRRSIGは存在しません。

検証と合成を同じDNS64リゾルバーで行えば、権威から得たAや不存在証明を検証したうえでローカル結果を返せます。端末自身がDNSSECを検証する構成では、CD・DOビットと応答方針を含むRFC 6147の条件を満たす必要があります。

仕様の確認資料:RFC 6147「DNS64」RFC 6052「IPv6 Addressing of IPv4/IPv6 Translators」RFC 7050「Discovery of the IPv6 Prefix Used for IPv6 Address Synthesis」

関連用語