要約

  • DNSのやり取りに使うIPバージョンは、求めるアドレスレコードの種類を決めない。AAAA問い合わせはIPv4で運べ、A問い合わせはIPv6で運べる。
  • RFC 3596は128ビットのAAAAレコードを導入し、既存の応答処理も一部更新したが、DNSデータと質問のネットワーク経路は別のものとして扱った。

「IPv6」はどちらの層か

IPv4パケットにDNSの質問を載せて、「この名前に対応するAAAAレコードは何か」と尋ねる場面を考えてみよう。IPv4ヘッダーが表すのは、そのメッセージを運ぶ経路だ。質問の型が求めるのはIPv6アドレスのデータである。両者は矛盾しない。RFC 3596は、レコードを問い合わせる際のIPバージョンと、レコードが表すプロトコルのバージョンは独立していると明記した。RFC 4472は運用上の意味を簡潔に示す。AAAAはIPv4上で問い合わせられ、AはIPv6上で問い合わせられる。

二つの層が同じ「IPv4」「IPv6」という語を使うため、境界は見落とされやすい。一方は問い合わせを運ぶネットワーク上の包み、もう一方はDNSリソースレコードの中身だ。サーバーが観測した転送経路に応じて回答を変えるなら、名前に結び付いたデータが、その経路によって変わることになる。しかし経路から、どのアドレスがその名前に属するかは分からない。

逆向きにも同じことが言える。IPv6で運んでいるからといって、AAAAを尋ねなければならないわけではない。A問い合わせをIPv6で送れる。到着パケットのアドレスファミリーを見ても、問い合わせ元が返答されたアドレスを利用できるとは証明できない。仕様が定めるのは独立性であって、その先の到達性やアプリケーション接続の成功ではない。

道を変えず、記録を増やす

初期のDNSでは、32ビットのIPv4アドレスをAレコードに格納していた。RFC 1886は128ビットのIPv6アドレスを格納するAAAAと、逆引きの仕組みを導入した。その後、RFC 3152が逆引きツリーをIP6.INTからIP6.ARPAへ移した。RFC 3596はこれらの変更をまとめ、IPv4の既存サポートを残しながら、型番号28のAAAAに完全なIPv6アドレスを格納すると定めた。

これはDNSのデータモデルを拡張する話で、DNSメッセージ専用のIPv6転送を新設する話ではなかった。質問と応答には従来のDNS交換方式を使う。IPの転送はIPv4でもIPv6でもよく、AとAAAAのどちらを尋ねるかとは別である。二つのアドレスファミリーを記録できるようになっても、DNSの共通名前空間を「IPv4 DNS」と「IPv6 DNS」に分割する必要はなかった。

実際には別案も議論された。A6レコードはアドレスを断片化し、DNS上でその断片を連鎖させられる。プレフィックスが変わる場合、一部の更新を減らせる可能性があった。一方、その柔軟性は連鎖問い合わせと依存関係を増やす。RFC 3363はAAAAを標準化の道筋に残し、A6とBit LabelsをExperimentalへ移す判断を記録した。RFC 3364は選択肢ごとの利点と負担を整理した。RFC 3596が選んだのは読み出しやすい完全なアドレスであり、再番号付けやIPv6展開のすべてを解決する万能策ではない。

応答の約束も書き換えた

RFC 3596はNS、SRV、MX問い合わせのAdditionalセクション処理も更新した。ローカルで利用できる関連A・AAAAアドレスを追加情報に含められる。一方、AAAA問い合わせ自体はAdditional処理を誘発しない。直接要求されたRRと、別の回答に補助情報として添えられるアドレスは、異なる応答動作である。

「サーバーが含めることができる」は、すべてのアドレスが存在するという証明ではない。ローカルデータが欠けているかもしれず、キャッシュが不完全なこともあり、DNSレコードは疎通確認パケットではない。RFC 4472は、問い合わせの転送方式だけを理由に回答データを選んだり絞ったりしないよう警告する。問い合わせ経路のIPファミリーが、クライアントの必要とするレコードに対応しているとは限らないからだ。片方のファミリーを抑制すれば、同じ名前が経路によって異なる事実を持つように見えてしまう。

AAAA応答が示すのは、DNSが名前に対してIPv6アドレスデータを返したということまでだ。この解析器からIPv6経路があること、そのアドレスでサービスが待ち受けていること、ファイアウォールが接続を許可すること、DNSSEC検証が成功したこと、またはアプリケーションが接続できたことは示さない。応答をIPv4で受け取った事実から、後続のサービス接続がどちらのIPを使うかも分からない。

共存を見失わないための境界

RFC 3596の歴史は「DNSにAAAAが加わった」と要約されることが多い。そのほかにも、インターネットがアドレスファミリーを増やす過程で、一つの不変条件を保った。質問を運ぶパケットの経路と、応答レコードが表すアドレスファミリーは、独立した二つの軸である。移行期にはIPv4経路からIPv6データを得られ、IPv6経路からIPv4データも得られた。共通の名前空間はそのまま保たれた。

RFCが定めるのは機構と意図された境界である。実装がどれほど広くこれを守ったか、特定の解析器がどう動いたか、同じ名前のAとAAAAが同時に役立ったかは分からない。そこには実装、設定、測定、到達性の別個の証拠が必要だ。

出典: RFC 1034;RFC 1035;RFC 1886;RFC 3152;RFC 3363;RFC 3364;RFC 3596;RFC 3597;RFC 4472。