作成日:2005年02月16日、更新日:2005年03月17日 作成:鷹の巣

DNSサーバー正引き時にwhoisデータベースがどのように参照されるのかを説明します。


DNSサーバー正引きの実際(whoisデータベースとの関係)

このページは、DNSサーバーが正引きの名前解決時にどのような問合せを行うのかを実験的に説明したものです。レジストリ(whoisデータベース)との関連についても記載しました。専門用語が多く出てきますので、「@IT:DNS Tips:ゾーンとは」と「@IT:DNS Tips:ネームサーバの3つの働きとは」をあらかじめご一読願います。

注)以下、ドメイン名のゾーンデータを持ったDNSサーバー(Aレコードでドメイン名のIPアドレスを定義しているDNSサーバー)をコンテンツDNSサーバーと呼ぶことにします。(個人的には、終端DNSサーバーや本命DNSサーバーと意訳したいのですが。)

nslookup コマンドで、DNSサーバーを調べよう。」や「ドメイン名の正引き名前解決をnslookup コマンドで検証」で示しました様にドメインツリーの順に問合せが行われて、ドメイン名がIPアドレスに解決されると考えるのは、間違いではありません。 ただし、これはコンテンツDNSサーバー名がドメイン名のサブドメイン名になっている場合です。(例.ドメイン名がexample.comで、コンテンツDNSサーバー名がns.example.com

現実は、ドメイン名がexample.comで、コンテンツDNSサーバーの一次(プライマリ)や二次(セカンダリ)DNSサーバー名がns.example.orgであったり、ns.example.jpであったりする訳ですから、必ずしもドメインツリーの順に問合せが行われる訳ではありません。

要点:ドメイン名のIPアドレス問合せ(Aレコード問合せ)に対して、TLD(第一レベルドメイン)のDNSサーバーは、コンテンツDNSサーバー名(NSレコード応答)を返す。コンテンツDNSサーバー名がそのTLD管理下であれば、そのIPアドレス(Aレコード応答)も返す。 コンテンツDNSサーバー名のIPアドレスが返って来なかった場合は、そのコンテンツDNSサーバー名をドメインツリーの順に反復問合せを行う。最後にコンテンツDNSサーバーにAレコードを問合せると、IPアドレスに名前解決される。

目次

  1. 予備知識
  2. DNSサーバーの正引きとレジストリ(whoisデータベース)との関係
  3. 検証方法
  4. ドメイン名とコンテンツDNSサーバーの第一レベルドメインが同じ場合の検証例
  5. ドメイン名とコンテンツDNSサーバーの第一レベルドメインが違う場合の検証例
  6. まとめ
  7. あとがき

1. 予備知識

正引き問い合わせとは、ホスト名(ドメイン名を含む)からIP(Internet Protocol)アドレスを解決するものです。まず、以下のITmediaのサイトを参照して、正引きと逆引きがどのように解決されるかをまず、理解してください。

出典:ITmediaのITmedia エンタープライズ ヘルプデスク: Windows How-To - DNS(Domain Name System) ~概要~より

下記の表題は、ブラウザに表示されているタイトルから、変更しています。
3.1 DNSの基礎知識と3.2 名前空間 (3.2.1 ゾーンとドメイン,3.2.2 逆引きで利用される名前空間)と 3.3 DNSの動作(3.3.1 RecursiveとIterative と 3.3.2 キャッシュ) 3.2項が特に重要で、DNSのゾーンとドメイン、正引きと逆引きで利用される名前空間を理解することが肝要です。 余裕があれば、DNSパケットについても、6.3 Dynamic DNSの基本的な動作を読んでください。

2. DNSサーバーの正引きとレジストリ(whoisデータベース)との関係

題記の内容を下図に示します。DNSサーバーは分散形データベースだということを念頭において下さい。

  1. 自ドメイン名の一次と二次DNSサーバーとそのIPアドレスの登録

    1. ここでは、レジストラ(登録業者)や登録代行業者で自ドメイン名のexample.comを登録した場合を示します。また、自ドメイン名の(ゾーン)データを管理するコンテンツDNSサーバー名として、一次DNSサーバーとそのIPアドレスをns.example.com,***.***.***.***、二次DNSサーバーをns.example.org,***.***.***.***として登録し、三次DNSサーバーは、登録しないものとします。

    2. 上記の様に、TLD(トップレベルドメイン)毎のレジストリ(registry)IANA | Generic Top-Level DomainsIANA | Root-Zone Whois Index by TLD Code]に登録されると、TLDを管理するDNSサーバーに自ドメイン名のコンテンツDNSサーバー名とそのIPアドレスが登録されます。

      • comドメインを管理するDNSサーバーのA.GTLD-SERVERS.NET~M.GTLD-SERVERS.NETには、一次DNSサーバー(ns.example.com)とそのIPアドレス(***.***.***.***)が登録されます。
      • orgドメインを管理するDNSサーバーのTLD1.ULTRADNS.NET、TLD2.ULTRADNS.NETとtld3.ultradns.orgとtld4.ultradns.orgとtld5.ultradns.infoとtld6.ultradns.co.ukには、二次DNSサーバー(ns.example.org)とそのIPアドレス(***.***.***.***)が登録されます。
    3. TLD(トップレベルドメイン)毎のDNSサーバーに自ドメイン名のコンテンツDNSサーバー名とそのIPアドレスが登録されると、ルートDNSサーバー(A.ROOT-SERVERS.NET~M.ROOT-SERVERS.NET)には、自ドメイン名(example.com)だけが登録されます。

    4. 図の*1~4に示します様に登録したドメイン名が全てのルートDNSサーバーに登録されるまでには、2~7日程の伝播遅延時間を必要とします。ルートDNSサーバーにドメイン名が登録されていない場合は、(1Q)の問合せに対して、(1A)でIPアドレスは回答されません。ドメイン名が正引き出来るまで(DNS設定値の伝播遅延をnslookupコマンドで観察)もご一読願います。

  2. DNSサーバー間の転送と接続ポート番号について

    1. 自ドメイン名の(ゾーン)データの(複写)転送時に、二次DNSサーバー(ns.example.org)から一次DNSサーバー(ns.example.com)へは、TCP53番ポートで接続されます。

    2. スタブレゾルバからフルサービスレゾルバ(DNSサーバー)へは、TCP53番ポートで接続されます。

    3. それ以外の相手側DNSサーバーへの接続は、UDP53番ポートで接続されます。

  3. ドメイン名の正引き

    キャッシュがない場合の正引きで、フルサービスレゾルバは、以下の順でドメイン名(example.com)をIPアドレスに名前解決します。example.comの名前解決は、一般的に説明されている様なドメインツリーの順に検索されることは、周知の事実ですが、まずゾーンデータのあるコンテンツDNSサーバーのIPアドレスの名前解決を行うことに注意する必要があります。

    1. (1Q)ルートDNSサーバーにexample.comのAレコード(IPアドレス)を問合せる。
      (1A)ルートDNSサーバーは、comドメインの管理DNSサーバー名とIPアドレスを回答する。ルートDNSサーバーは、ドメイン名のTLD(トップレベルドメイン=com)のIPアドレスを回答する。ドメイン名がルートDNSサーバーに登録されていない場合は、IPアドレスは回答されない。

    2. (2Q)comドメインの管理DNSサーバーのIPアドレスにexample.comのAレコード(IPアドレス)を問合せる。
      (2A)comドメインの管理DNSサーバーは、一次DNSサーバー名(ns.example.com)とそのIPアドレスと二次DNSサーバー名(ns.example.org)を回答する。(NSレコードを回答。)comドメインの管理DNSサーバーは、二次DNSサーバーのns.example.orgのIPアドレスは回答できない。

    3. (3Q)コンテンツ一次DNSサーバー(ns.example.com)のIPアドレスにexample.comのAレコード(IPアドレス)を問合せる。
      (3A)example.comドメインのコンテンツDNSサーバーは、example.comのIPアドレスを回答し、正引きが完了する。

    4. (2A)で回答された二次DNSサーバーのns.example.orgへも(3Q)のコンテンツ一次DNSサーバー同様の問合せを行いますが、図では省略しています。IPアドレスが回答されなかったns.example.orgの場合は、
      (4Q)ルートDNSサーバーに二次DNSサーバー名(ns.example.org)のAレコード(IPアドレス)を問合せる。
      (4A)ルートDNSサーバーは、orgドメインの管理DNSサーバー名とIPアドレスを回答する。

    5. (5Q)orgドメインの管理DNSサーバーのIPアドレスにns.example.orgのAレコード(IPアドレス)を問合せる。
      (5A)orgドメインの管理DNSサーバーは、二次DNSサーバー名(ns.example.org)とそのIPアドレスと一次DNSサーバー名(ns.example.com)を回答する。(NSレコードを回答。)

    6. (6Q)コンテンツ二次DNSサーバー(ns.example.org)のIPアドレスにexample.comのAレコード(IPアドレス)を問合せる。
      (6A)example.comドメインのコンテンツ二次DNSサーバー(ns.example.org)は、example.comのIPアドレスを回答する。

    7. フルサービスレゾルバは、example.comのIPアドレスを回答した一次DNSサーバーと二次DNSサーバーの内、応答の速いDNSサーバー名とそのIPアドレスを生存時間(TTL)記憶する。(*5)フルサービスレゾルバは、DNSサーバーの一次と二次を区別しません。(というより、区別する必要がありません。)
      参考URL:bind9の持つキャッシュをファイルに書き出して調べました。

ドメイン名の正引きとレジストリ(whoisデータベース)との関係(PDF圧縮ファィル)

DNSサーバーの正引きとレジストリ(whoisデータベース)との関係図

注)コンテンツDNSサーバーは、一次(プライマリ)と二次(セカンダリ)DNSサーバーだけとする。
*1:登録したドメイン名とその一次と二次DNSサーバー名とそのIPアドレスと管理情報(住所・氏名・連絡先等)と決済情報
*2:登録したドメイン名とその一次と二次DNSサーバー名とそのIPアドレスと管理情報(住所・氏名・連絡先等)
*3:登録したドメイン名とその一次と二次DNSサーバー名とそのIPアドレス
*4:登録したドメイン名のみ。
*5:一次DNSサーバーと二次DNSサーバーの内、応答の速いDNSサーバー名とそのIPアドレスを生存時間(TTL)記憶する。
*6:DNSクライアントに回答した内容を記憶する。

3. 検証方法

  1. フルサービスレゾルバのインストールと設定

    1. クライアント機(OS:Windows XP Home Edition)にBIND9をインストールし、これをフルサービスレゾルバとした。(ゾーンとフォワーダは、定義しない。)
    2. dig.exeコマンドが参照するレゾルバの設定(C:\WINDOWS\system32\drivers\etc\resolv.conf)は、
      nameserver 127.0.0.1のみを設定した。
    3. クライアント機から外部に出るパケットを捕捉するためにEtherealというソフトウェアをインストールした。
  2. コマンドプロンプト画面より、

    1. D:\>ipconfig /flushdnsでDNSレゾルバキャッシュをクリヤ。
    2. BINDを再起動して、フルサービスレゾルバキャッシュをクリヤ。
    3. Etherealというソフトウェアを起動。
    4. D:\>dig  ドメイン名(sakaguch.com等)を実施し、ルートDNSサーバーからの再帰検索を行った。
    5. クライアント機から外部に出るパケットを捕捉し、フルサービスレゾルバのパケットを解析した。

結果を、次項に示します。

4. ドメイン名とコンテンツDNSサーバーの第一レベルドメインが同じ場合の検証例

坂口.jp(7bitのドメイン名は、xn--6or51f.jp)で、IPアドレスを回答するコンテンツDNSサーバーは、ns1.sakaguch.comです。(ドメイン名は、jpドメインで、レジストリ(Whoisデータベース)に登録したDNSサーバーは、comドメインとなっています。)前項と同様にパケットを捕捉した結果を下記に示します。
ドメイン名(sakaguch.com)のIPアドレスを回答するコンテンツDNSサーバーは、2005年2月現在、ns1.sakaguch.com(210.253.243.85)とns1.hn.org(216.151.80.13)です。(ドメイン名は、comドメインで、レジストリ(Whoisデータベース)に登録したDNSサーバーは、comドメインorgドメインなっています。)パケットを捕捉した結果を下記に示しますが、説明では、ns1.hn.orgの再帰検索は、省略します。

sakaguchcomの検証説明用の為、パケットの内容は最小限の内容だけを記載しています。
1.フルサービスレゾルバ→E.ROOT-SERVERS.NET(192.203.230.10)  sakaguch.com: type A, class inet
2.フルサービスレゾルバ←E.ROOT-SERVERS.NET(192.203.230.10)  com: type NS, class inet, ns A~M.GTLD-SERVERS.NET
3.フルサービスレゾルバ→G.GTLD-SERVERS.NET(192.42.93.30)    sakaguch.com: type A, class inet
4.フルサービスレゾルバ←G.GTLD-SERVERS.NET(192.42.93.30)    ns1.sakaguch.com: type A, class inet, addr 203.212.55.105
    Authoritative nameservers
        sakaguch.com: type NS, class inet, ns ns1.hn.org
        sakaguch.com: type NS, class inet, ns ns1.sakaguch.com
5.フルサービスレゾルバ→ns1.sakaguch.com(203.212.55.105)    sakaguch.com: type A, class inet
6.フルサービスレゾルバ←ns1.sakaguch.com(203.212.55.105)    sakaguch.com: type A, class inet, addr 192.168.*.*
    Authoritative nameservers
        sakaguch.com: type NS, class inet, ns ns1.sakaguch.com
    Additional records
        ns1.sakaguch.com: type A, class inet, addr 192.168.*.*

解説)正引きsakaguch.comを求める場合

  1. sakaguch.comをルートDNSサーバーの一つのE.ROOT-SERVERS.NETに聞く。
  2. 返事はA.GTLD-SERVERS.NET~M.GTLD-SERVERS.NETのDNSサーバーに聞け。 ルートDNSサーバーは、ドメイン名(sakaguch.com)の登録の有無を判断するのみで、第一レベルドメイン(comドメイン)のDNSサーバーに聞けと回答。
  3. sakaguch.comを第一レベルドメイン(comドメイン)のDNSサーバーの一つのG.GTLD-SERVERS.NETに聞く。
  4. 返事は、IPアドレスに名前解決できるコンテンツDNSサーバーがns1.sakaguch.comでそのIPアドレスが210.253.243.85だと回答。 ここで、第一レベルドメインのDNSサーバーは、レジストリ(Whoisデータベース)経由で登録されたNSレコード(コンテンツDNSサーバーとそのIPアドレス)を回答している。ただし、問合せを受けた第一レベルのドメイン名(comドメイン)のDNSサーバーとコンテンツDNSサーバーの第一レベルのドメイン名(orgドメイン)が異なる場合は、IPアドレスを回答できない。
  5. sakaguch.comをns1.sakaguch.com(210.253.243.85)に聞く。
  6. 返事は、sakaguch.comのIPアドレスは、210.253.243.85だと回答。

※追記

レジストリ(Whoisデータベース)にドメイン名(sakaguch.com)のコンテンツDNSサーバーがns1.sakaguch.com(210.253.243.85)とns1.hn.org(216.151.80.13)であると登録すると、

ルートDNSサーバーは、ドメイン名の問合せに対して、レジストリ(Whoisデータベース)経由で登録されたドメイン名(sakaguch.com)の登録の有無を判断するのみで、回答は第一レベルのドメイン名(comドメイン)のDNSサーバーのIPアドレスを回答している。

comドメインのG.GTLD-SERVERS.NETにsakaguch.comのtype Aを問合せると、再帰検索は行われずにコンテンツDNSサーバー名(ns1.sakaguch.com)とそのIPアドレス(210.253.243.85)を即答する。ns1.hn.orgのIPアドレスは回答しないので、ルートDNSサーバーから、再帰検索することになるが、説明を省略する。

5. ドメイン名とコンテンツDNSサーバーの第一レベルドメインが違う場合の検証例

坂口.jp(7bitのドメイン名は、xn--6or51f.jp)で、IPアドレスを回答するコンテンツDNSサーバーは、ns1.sakaguch.comです。(ドメイン名は、jpドメインで、レジストリ(Whoisデータベース)に登録したDNSサーバーは、comドメインとなっています。)前項と同様にパケットを捕捉した結果を下記に示します。

坂口.jpの検証例説明用の為、パケットの内容は最小限の内容だけを記載しています。
1.フルサービスレゾルバ→D.ROOT-SERVERS.NET(128.8.10.90)     xn--6or51f.jp: type A, class inet
2.フルサービスレゾルバ←D.ROOT-SERVERS.NET(128.8.10.90)     jp: type NS, class inet, ns A.DNS.jp~F.DNS.jp
3.フルサービスレゾルバ→D.DNS.jp(210.138.175.244)           xn--6or51f.jp: type A, class inet
4.フルサービスレゾルバ←D.DNS.jp(210.138.175.244)           xn--6or51f.jp: type NS, class inet, ns ns1.sakaguch.com
5.フルサービスレゾルバ→E.ROOT-SERVERS.NET(192.203.230.10)  ns1.sakaguch.com: type A, class inet
6.フルサービスレゾルバ←E.ROOT-SERVERS.NET(192.203.230.10)  com: type NS, class inet, ns A~M.GTLD-SERVERS.NET
7.フルサービスレゾルバ→I.GTLD-SERVERS.NET (192.43.172.30)  ns1.sakaguch.com: type A, class inet
8.フルサービスレゾルバ←I.GTLD-SERVERS.NET (192.43.172.30)  ns1.sakaguch.com: type A, class inet, addr 203.212.55.105
    Authoritative nameservers
        sakaguch.com: type NS, class inet, ns ns1.hn.org
        sakaguch.com: type NS, class inet, ns ns1.sakaguch.com
9.フルサービスレゾルバ→sakaguch.com(203.212.55.105)        xn--6or51f.jp: type A, class inet
10.フルサービスレゾルバ←sakaguch.com(203.212.55.105)       xn--6or51f.jp: type A, class inet, addr 192.168.*.*
    Authoritative nameservers
        xn--6or51f.jp: type NS, class inet, ns ns1.sakaguch.com
    Additional records
        ns1.sakaguch.com: type A, class inet, addr 192.168.*.*

解説)正引きxn--6or51f.jpを求める場合

  1. xn--6or51f.jpをルートDNSサーバーの一つのD.ROOT-SERVERS.NETに聞く。
  2. 返事はA.DNS.jp~F.DNS.jpに聞け。ルートDNSサーバーは、ドメイン名(xn--6or51f.jp)の登録の有無を判断するのみで、第一レベルドメイン(jpドメイン)のDNSサーバーに聞けと回答。
  3. xn--6or51f.jpを第一レベルドメイン(jpドメイン)のDNSサーバーの一つのD.DNS.jpに聞く。
  4. 返事は、IPアドレスに名前解決できるDNSサーバーがns1.sakaguch.comだと回答。ここで、問合せを受けた第一レベルのドメイン名(jpドメイン)のDNSサーバーとコンテンツDNSサーバーの第一レベルのドメイン名(comドメイン)が異なるので、IPアドレスは回答できない。
  5. ns1.sakaguch.comをルートDNSサーバーの一つのE.ROOT-SERVERS.NETに聞く。
  6. 返事は、comドメインのA.GTLD-SERVERS.NET~M.GTLD-SERVERS.NETに聞けと回答。
  7. ns1.sakaguch.comcomドメインのDNSサーバーの一つのI.GTLD-SERVERS.NETに聞く。
  8. 返事は、コンテンツDNSサーバーのns1.sakaguch.comのIPアドレスは、210.253.243.85だから、そちらにアクセスして聞けと回答。
  9. xn--6or51f.jpをns1.sakaguch.com(210.253.243.85)に聞く。
  10. 返事は、xn--6or51f.jpのIPアドレスは、210.253.243.85だと回答。

※追記

レジストリ(Whoisデータベース)にドメイン名(xn--6or51f.jp)のコンテンツDNSサーバーがns1.sakaguch.com(210.253.243.85)であると登録すると、

ルートDNSサーバーは、ドメイン名の問合せに対して、レジストリ(Whoisデータベース)経由で登録されたドメイン名(xn--6or51f.jp)の登録の有無を判断するのみで、回答は第一レベルのドメイン名(jpドメイン)のDNSサーバーのIPアドレスを回答している。

jpドメインのD.DNS.jpにドメイン名(xn--6or51f.jp)のtype Aを問合せると、コンテンツDNSサーバーがns1.sakaguch.comだと回答している。IPアドレスは回答されないので、ルートDNSサーバーから、コンテンツDNSサーバー(ns1.sakaguch.com)のIPアドレスをドメインツリーの順に再帰検索することになる。この様にjpドメインにcomドメインのコンテンツDNSサーバーを指定した場合では、最初から最後まで、ドメインツリーの順に再帰検索される訳ではありません。

上記の結果から言えることは、第一レベルドメイン名の管理DNSサーバー(上の例では、D.DNS.jp)で、問合せドメイン名のゾーンを管理するコンテンツDNSサーバー(上の例では、ns1.sakaguch.com)がまず回答される。次にコンテンツDNSサーバーをドメインツリーの順に再帰検索して、そのIPアドレスを得る。その結果、コンテンツDNSサーバーのIPアドレスにアクセスして、ドメイン名のIPアドレスを得ていることに注意する必要があります。

6. まとめ

簡単に言いますと、正引きは、ドメイン名のゾーンを管理するコンテンツDNSサーバーのIPアドレスをドメインツリーの順に再帰検索して、アクセスし、ドメイン名のIPアドレスを得ます。

  1. ルートDNSサーバーにドメイン名を聞く。
  2. ルートDNSサーバーは、ドメイン名の問合せに対して、ドメイン名の登録の有無を判断するのみで、ドメイン名の第一レベルのドメイン名のDNSサーバーのIPアドレスを回答する。
  3. ドメイン名の第一レベルのドメイン名のDNSサーバーの一つにドメイン名を聞く。
  4. ドメイン名の第一レベルのドメイン名のDNSサーバーは、ドメイン名の問合せに対して、IPアドレスに名前解決できるコンテンツDNSサーバーを回答する。ここで、問合せを受けた第一レベルのドメイン名のDNSサーバーとコンテンツDNSサーバーの第一レベルのドメイン名が同じ場合は、コンテンツDNSサーバーのIPアドレスも回答する。
  5. コンテンツDNSサーバーのIPアドレスにドメイン名を聞く。コンテンツDNSサーバーのIPアドレスが回答されなかった場合は、コンテンツDNSサーバーのホスト名をルートDNSサーバーより、ドメインツリーの順に再帰検索してIPアドレスを得てから、コンテンツDNSサーバーのIPアドレスにドメイン名を聞く。
  6. 二つ以上のコンテンツDNSサーバー(一次DNSサーバーと二次DNSサーバー他)は、ドメイン名のIPアドレスを回答する。
  7. フルサービスレゾルバは、IPアドレスを回答した一次DNSサーバーと二次DNSサーバーの内、応答の速いコンテンツDNSサーバー名とそのIPアドレスを生存時間(TTL)記憶する。

7. あとがき

この頁に間違い等がありましたら、掲示板にご投稿をお願い致します。

この頁では、逆引き関する説明を省略していますが、逆引きも正引きと同じです。逆引きでも、□.root-servers.netがNS□.APNIC.NET等を回答し、ここが□.dns.jp等を回答します。第一レベルのドメイン名のDNSサーバーは、IPアドレスの問合せに対して、IPアドレスを逆引き出来るコンテンツDNSサーバーを回答します。

実際には、IPv6のIPアドレスの応答もありましたが、IPv4と同じですから、上記の説明にはIPv6の説明を省略しています。IPv6につきましては、下記のURLをご一読願います。

目次▲頁先頭