用語辞典・DNS・ドメイン

DNSリゾルバー

DNSリゾルバーとは

DNSリゾルバーは、名前・レコード種類・クラスを指定してDNSへ問い合わせ、得られた応答を利用側へ返す名前解決の機能です。英語ではDNS resolver(ディーエヌエス・リゾルバー)、DNSを省略しなければDomain Name System resolver(ドメイン・ネーム・システム・リゾルバー)と表します。

リゾルバーへ渡すのは名前だけではありません。たとえば同じホスト名でも、Aレコードを指定すればIPv4アドレス、AAAAレコードを指定すればIPv6アドレスを求めます。返るのはアドレスとは限らず、別名、メール配送先、不存在、処理失敗などもDNS応答です。

リゾルバーは「目的の情報を調べる窓口」であり、得たアドレスへ接続する通信そのものではありません。ブラウザなどのアプリは結果を受け取った後に、必要な接続を別途始めます。

アプリの要求をDNSの問い合わせにし、結果を利用側へ戻す端末内の機能と、外部で調査を代行する機能を分けて見る
アプリから名前と種類を受け取った端末内リゾルバーが、ローカル情報や再帰DNSサーバーを調べ、得た答えをアプリへ返す流れの図解
図1実装によっては、OSがホストファイルやローカルキャッシュも確認します。そのため、アプリが使う名前解決機能の動作すべてが、毎回外部へのDNSパケットになるとは限りません。

「リゾルバー」は一つの機械の名前ではない

同じリゾルバーでも、任される範囲が違うスタブは依頼を渡し、再帰リゾルバーは最終結果まで調べる
端末内

スタブリゾルバー

アプリから問い合わせを受け、設定された再帰リゾルバーへ依頼します。通常はDNS階層を自分でたどりません。

ネットワーク側

再帰リゾルバー

キャッシュを調べ、不足していれば複数のDNSサーバーへ問い合わせ、最終的な結果をまとめます。

図2RFC 9499では、問い合わせを別の再帰リゾルバーへ転送するforwarding resolver(フォワーディング・リゾルバー)も区別します。家庭用ルーターがこの中継窓口になる構成があります。

問い合わせには、名前・種類・クラスがある

DNSの質問部には、調べたいQNAME(キューネーム)、レコードのQTYPE(キュータイプ)、データのQCLASS(キュークラス)があります。一般的なインターネット利用ではクラスはINですが、種類は目的ごとに選びます。同じ名前へAとMXを問い合わせれば、用途の異なる答えになります。

応答には、質問への答えだけでなく、権威情報や次に問い合わせるサーバーへの手掛かりが入る場合があります。応答コードは、名前が存在しない、サーバーが処理に失敗した、といった状態も表します。したがって「IPアドレスが返らなかった」だけでDNS全体の故障とは断定できません。

アプリから見える結果と、DNSの生の応答は同じとは限らない

アプリはOSのgetaddrinfo()のような名前解決APIを使うことが多く、OSは名前解決の方針に従って結果を整えます。IPv4・IPv6の候補順、ローカル名の扱い、検索サフィックスなどが加わり、アプリには接続候補の一覧として見えることがあります。

一方、DNS調査ツールは指定したDNSサーバーへ特定種類の問い合わせを送り、生のレコードに近い形を表示します。ブラウザと調査ツールで見え方が違うときは、キャッシュ、問い合わせ先、レコード種類、OSの選択処理を分けて確認します。

リゾルバーの用語確認資料:RFC 1034「Domain Names — Concepts and Facilities」RFC 9499「DNS Terminology」

関連用語