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

DNSサーバーでの(サブ)ドメイン名からIPアドレスへの正引き名前解決の様子をnslookupコマンドで検証する例を示します。


ドメイン名の正引き名前解決をnslookup コマンドで検証

この資料は、ドメイン名が正引き出来るまで(DNS設定値の伝播遅延を nslookup コマンドで観察)をより深く理解して頂く為に作成致しました。

(サブ)ドメイン名がDNS(Domain Name System)サーバーにより、IPアドレスに名前解決される仕組みや原理は、ITmedia: ITmedia エンタープライズ ヘルプデスク: Windows How-To - DNS(Domain Name System) ~概要~をご覧になると理解できますが、これをnslookupコマンドを使用して、検証します。

インターネットを支えるDNS - Page.2実践で学ぶ、一歩進んだサーバ構築・運用術では、nslookupコマンドでjpドメインを検証する例が 示されていますが、この頁では、Aレコードのみを検査し、検証に使用するドメイン名をcomドメインの「sakaguch.com」としました。 nslookup コマンドではなく、digコマンドを使用して調べる例が、DNS-HOWTO5.1でもまず最初に退屈な理論にも記載されています。

残念ながら、例示用ドメイン名のexample.comやexample.netやexample.org等(何れもIPアドレスが192.0.34.72)は、 最終的なDNSサーバー名のイメージがわかりにくい為、「sakaguch.com」を使用致しました。 nslookup コマンドは、PC-UNIX(Mac OSXを含む) ユーザーや Windows NT/2000/XPユーザーのみ使用出来ます。 以下の画面例は、Windows 2000のコマンドプロンプト画面(DOS窓の様な画面)より操作した例ですが、他のOSでも同様に表示されます。

注)このnslookup コマンドは、DNSサーバーのbind9までは、確実に使用出来ます。
  将来の代替のコマンドは、hostとdigとdnsqueryになります。

1. 自分のグローバルIPアドレスを確認

自分のグローバルIPアドレスを調べます。この確認くんをクリックしてみてください。(プロキシ(代理)サーバーを経由しないで下さい。) ここの上から3番目の項目の「現在接続している場所(現IP)」にあなたのグローバルIPアドレスが表示されています。 このグローバルIPアドレス(vvv.xxx.yyy.zzz)を控えておきます。

2. 自分のドメイン名が登録されているかどうかを確認

IPアドレスでも検索可能なMeta-Whois Gateway(統合型Whois検索)Meta-WhoisIPドメインSEARCHAllwhois.com(IPアドレスの検索不可)で、自分のドメイン名が登録されているかどうかをまず調べて下さい。WebSitePulse.com注)サイトの「WHOIS」欄にドメイン名を入力しても調べることが出来ます。ダイナミックDNSのサブドメイン名をご使用の場合は、既に登録済みですから、調べる必要は、ありません。

注)2001年1月15日HAL2000さんよりリンクを頂戴致しました。

3. ドメイン名の概要

まず、最初にお断りしておきますが、ドメイン名の正規表現は、「sakaguch.com」ではなく、「sakaguch.com」だということです。 「sakaguch.com」は、省略形ですから、このWebページを見る場合も
http://sakaguch.com/nslookupNor.htmlでアクセスするのが、 正規の方法です。クリックして、ブラウザのアドレス欄をよく見て下さい。ちゃんとアクセス出来ているでしょう。 次に「com.」の右側にスペースを1個入れて、
http://sakaguch.com_/nslookupNor.htmlでアクセスして見て下さい。 スペースを入れたところが「%2020」か「%20」となっていて、アクセス出来なかったでしょう。 いつも省略している「com」の右の「.」(ドット)の右側は、文字長さがゼロのルートドメイン(根領域)でなければなりません。 DNSサーバーは、「.」と「.」の間のドメイン(63文字迄の名前でノードとも言う)で、ひっくり返した木の枝状(てっぺんは根)に分岐しています。 nslookupコマンドを実行するに当たり、DNSツリーの各ドメイン(sakaguchやcom)の入力は、問題ないのですが、 文字長さがゼロのルートドメインは入力出来ないので、かわりに「」を入力します。 冒頭で紹介致しましたリンク先で「nslookup  -q=ns  」として、ルートDNSサーバーを表示していたのは、この為です。 以下、ルートドメイン(ルートノード)は、「」で説明しますので、そのつもりで読み進んで下さい。

例)
「www.sakaguch.com.」の各ノードは、「.」が根ドメイン(Root Domain)、「com」が幹ドメイン(Top Level Domain)、 「sakaguch」が枝ドメイン(第2レベルドメイン)、「www」が小枝ドメイン(末端は、ホスト部ドメイン)となります。 これらの各ドメイン部分は、ドメインと間違い易いので、区別する為に以下、ノード(node)と表現する場合があります。 末端を除いて各ノード毎に管理するDNSサーバーが存在し、com、net、orgの幹ノードは、特別にgTLDと呼ばれます。

4. ドメイン名の正引きの確認

ドメイン名「sakaguch.com」をnslookupのコマンドラインに与えて、その結果が項1で確認したグローバルIPアドレスになるかどうか調べます。 レジストラ(登録業者)にてドメイン名にDNSサーバーを登録(変更)してから、日数があまり経過していないと、正常に表示されません。 というか、正常に表示されなくて、当り前ですから後で、正引きの伝播遅延をご覧願います。 ここでは、DNSサーバーの設定が伝播されていて、正常に表示される場合を説明します。 画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としております。

ドメイン名がグローバルIPアドレスに正引きされた例

C:\>nslookup sakaguch.com <----------取得したドメイン名sakaguch.comを問い合わせる。
Server: eagle.asahi-net.or.jp <-------使用する(プロバイダ等の)DNSサーバー名
Address: 202.224.32.1 <---------------使用する(プロバイダ等の)DNSサーバーのグローバルIPアドレス

Name: sakaguch.com <------------------問い合わせたドメイン名が表示される。
Address:vvv.xxx..yyy.zzz <------------問い合わせたドメイン名に対応するグローバルIPアドレスが表示される。

5. IPアドレスに名前解決される仕組み

(サブ)ドメイン名がDNSサーバーにより、IPアドレスに名前解決される仕組みや原理を理解する為、前項と同じことを再帰応答を行わない様に 設定して、同様に実施します。nslookupのコマンドラインの引数は、対話モードに入って、「?」と入力すれば、英語で表示されますし、

WWWのおもちゃWindows 95 の TCP/IPnslookup DNS情報の調査のnslooupコマンドオプション一覧でもご覧になれます。 下記の画面では、水色がコマンド入力、緑色が得られた結果の注目すべき表示、赤色が注目すべき説明としております。

例)
「sakaguch.com」に設定しているDNSサーバーは、無料で利用出来るDNSサーバー6台で、上位のDNSサーバーは、全てgTLDです。

ドメイン名がグローバルIPアドレスに正引きされた例(再帰応答なし

C:\>nslookup root.a <-------------------存在しない出鱈目なドメイン名(root.a)を正引きして見る。
Server: eagle.asahi-net.or.jp
Address: 202.224.32.1

*** eagle.asahi-net.or.jp can't find root.a:Non-existent domain

C:\>nslookup <---------------------------nslookup 対話モードに入る。
Default Server: eagle.asahi-net.or.jp <--初期状態で使用する(プロバイダ等の)DNSサーバー名
Address: 202.224.32.1 <------------------初期状態で使用する(プロバイダ等の)DNSサーバーのグローバルIPアドレス

>set norecurse <------------------------再帰応答を行わない様に変更する。(初期値は、再帰応答)
>root.a <--------------------------------存在しない出鱈目なドメイン名(root.a)を問い合わせる。注1
Server: eagle.asahi-net.or.jp
Address: 202.224.32.1

Name: root.a
Served by:
- A.ROOT-SERVERS.NET <-------------------応答してきた root 領域のDNSサーバー名が10個表示される。
198.41.0.4                A~M.ROOT-SERVERS.NETの13台の内10台が応答してきました。
- H.ROOT-SERVERS.NET           「set   q=ns 」と入力して、「.」(半角文字のドット)と入力すると13台全てが表示されます。

128.63.2.53
- C.ROOT-SERVERS.NET
192.33.4.12
- G.ROOT-SERVERS.NET
192.112.36.4
- F.ROOT-SERVERS.NET
192.5.5.241
- B.ROOT-SERVERS.NET
128.9.0.107
- J.ROOT-SERVERS.NET
198.41.0.10
- K.ROOT-SERVERS.NET
193.0.14.129
- L.ROOT-SERVERS.NET
198.32.64.12
- M.ROOT-SERVERS.NET
202.12.27.33

>sakaguch.com A.ROOT-SERVERS.NET <------問合せDNSサーバーにA.ROOT-SERVERS.NETを指定して、正引きする。
Server: A.ROOT-SERVERS.NET
Address: 198.41.0.4

Name: sakaguch.com
Served by:
- A.GTLD-SERVERS.NET <-------------------応答してきた gTLD領域(com、net、org 等)のDNSサーバー名が10個表示される。
192.5.6.30
com
- G.GTLD-SERVERS.NET
192.42.93.30
com
- H.GTLD-SERVERS.NET
192.54.112.30
com
- C.GTLD-SERVERS.NET
192.26.92.30
com
- I.GTLD-SERVERS.NET
192.43.172.30
com
- B.GTLD-SERVERS.NET
192.33.14.30
com
- D.GTLD-SERVERS.NET
192.31.80.30
com
- L.GTLD-SERVERS.NET
192.41.162.30
com
- F.GTLD-SERVERS.NET
192.35.51.30
com
- J.GTLD-SERVERS.NET
210.132.100.101
com


>sakaguch.com A.GTLD-SERVERS.NET <------問合せDNSサーバーにA.GTLD-SERVERS.NETを指定して、正引きする。
Server: A.GTLD-SERVERS.NET
Address: 192.5.6.30

Name: sakaguch.com
Served by:
- NS1.ZONEEDIT.com <---------------------レジストラ(登録業者)で、ドメイン名に登録したDNSサーバー名が応答して表示される。
207.228.252.101
sakaguch.com
- NS2.ZONEEDIT.com
207.41.71.161
sakaguch.com
- NS1.HN.ORG
64.71.163.40
sakaguch.com
- AUX1.HN.ORG
64.71.163.43
sakaguch.com
- NS1.MINIDNS.NET
202.64.51.214
sakaguch.com
- NS2.MINIDNS.NET
202.64.51.215
sakaguch.com


>sakaguch.com NS1.ZONEEDIT.com <---------問合せDNSサーバーにNS1.ZONEEDIT.comを指定して、正引きする。
Server: NS1.ZONEEDIT.com
Address: 207.228.252.101

Name: sakaguch.com
Address:vvv.xxx.yyy.zzz <-----------------sakaguch.com がIPアドレスに正引き出来ました。

>exit <-----------------------------------nslookup 対話モードから抜ける。
C:\>
注)
  1. ここで、sakaguch.comと入力せずに存在しない出鱈目なドメイン名を指定するのは、Default Server に指定しているDNSサーバーの 名前解決記憶値(DNSレゾルバキャッシュ)で解決してしまう影響を排除する為です。 norecurse(非再帰検索)を指定して、sakaguch.comの正引きを行う以前に他の人が正引きを行っていますので、正引きした結果が 既にプロバイダ等のDNSサーバーの名前解決記憶値(DNSキャッシュ)に記憶(キャッシュ)されています。 従って、sakaguch.comと入力するといきなり最終のDNSサーバー(NS1.ZONEEDIT.com等)が出てきます。 (http://sakaguch.com/でも、名前解決記憶値(DNSキャッシュ)に正引きした結果が記憶(キャッシュ)されます。) 又、出鱈目なドメイン名のつもりで、「aaaaaaaaaaaaaaaaaaaaaa.com」と入力してもTLD(トップレベルドメイン)「com」が存在しますと、 いきなり、gTLDのDNSサーバー(NS1.ZONEEDIT.com等)が出てきます。 このルートDNSサーバーへの問い合わせは、迷惑になりますので、一回ポッキリにして下さい。
  2. gTLD (generic Top Level Domain)領域のDNSサーバー名は、com、net、org共通です。

6. 管理権限の委譲とは、外部データベースの参照先を回答すること

以上のことから、名前解決を依頼されたDNSサーバー(Full-Service Resolver)は、「sakaguch.com」を正引きするのに上位から、 「.」→「com.」→「sakaguch.com.」の順に各ノードを管理するネームサーバーに問い合わせを行うことがわかりました。 問い合わせを受けたDNSサーバーは、下表に示す様に外部データベースの参照先のIPアドレスを答えているだけです。

追記)ドメイン名とその管理DNSサーバーのドメイン名が異なる場合[例えば、ドメイン名(example.jp)の名前解決に使用するDNSサーバー(ns.example.com)をレジストリ(Whoisデータベース)に登録した場合]、 第一レベル(jp)ドメインのDNSサーバーは、レジストリを参照して名前解決に可能なDNSサーバーがns.example.comであることを回答します。この様な場合は、ドメイン名の再帰検索は、その管理DNSサーバー(ns.example.com)に対して行われます。詳細は、DNSサーバー正引きの実際(whoisデータベースとの関係)をご参照願います。

DNSサーバーのAレコードの設定の例
ドメイン名の領域 管理ネームサーバー名の一例 管理権限の委譲(delegation)先(外部データベースの参照先)の一例 備考
DNSクライアント - DNSクライアントのTCP/IP設定で示すDefault ServerのIPアドレス 注)1
名前解決依頼DNSサーバー Default Server(プロバイダ等の名前解決DNSサーバー) .       3600000   IN  NS  A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.  3600000  IN A  198.41.0.4
注)2、3、4
A.ROOT-SERVERS.NET
198.41.0.4
com.            IN  NS  A.GTLD-SERVERS.NET.
A.GTLD-SERVERS.NET.  IN  A   192.5.6.30  
←想像で記述注)2、5、6、7
com. A.GTLD-SERVERS.NET
192.5.6.30
sakaguch.com.      IN  NS  NS1.ZONEEDIT.com.
NS1.ZONEEDIT.com.     IN  A   207.228.252.101
注)2、8
sakaguch.com. NS1.ZONEEDIT.com
207.228.252.101
sakaguch.com.      IN  A   vvv.xxx.yyy.zzz                      (vvv.xxx.yyy.zzzは、IPアドレス) 注)2、9
注)
  1. nslookupコマンド等を実行するクライアントソフトやブラウザやメール(SMTP)サーバーは、DNSクライアント(Stub Resolver=直訳で 切り株解析)と言います。このDNSクライアントと名前解決を依頼されたDNSサーバー(Full-Service Resolver)間の通信は、 TCP53番のサービスポートが使用されます。
  2. 名前解決を依頼されたDNSサーバー(Full-Service Resolver)と上位DNSサーバー間の通信は、UDP53番のサービスポートが 使用されます。従って、LAN内では、自ドメイン名が正引き出来るのにインターネット上では、正引き出来ない場合は、 ルータ等で、UDP53番のサービスポートが遮断されていると疑った方が良いでしょう。
  3. ルートDNSサーバーの「?.ROOT-SERVERS.NET.」(?は、A~Mの1文字)の合計13台あります。(2002年3月8日現在) 正確には、named.rootをご覧になれば、M.ROOT-SERVERS.NET.が日本にあること等もわかります。 これらの13台のルートDNSサーバーは、新しいTLD(トップレベルドメイン)が追加されて、追加データが伝播遅延を生じている場合を 除いては、いつも全く同じネームデータベースを保持しています。
  4. ルートDNSサーバーへの問い合わせは、13台の内の1台に約42日(3600000秒)間隔で行い、応答結果を記憶(キャッシュ)します。 (13台中10台のルートDNSサーバーだけが表示されます。通常は、キャッシュデータが表示されますが、負荷分散の為、 毎回の応答結果の順序は、異なります。) 記憶(キャッシュ)しているデータで応答した場合は、「Non-authoritative  answer」と表示されます。
  5. gTLD用DNSサーバーの「?.GTLD-SERVERS.NET.」(?は、A~Mの1文字)の合計13台あります。(2002年3月8日現在) これらの13台のgTLD用DNSサーバーは、伝播遅延を無視するといつも全く同じネームデータベースを持っています。
  6. com、net、org のドメイン名の取得・変更時にDNSサーバーを設定するのは、「?.GTLD-SERVERS.NET.」の一つに対して行います。 このgTLD用DNSサーバーのデータベースを直接登録変更できる業者を登録業者(レジストラ)と言います。 InterNIC - Registrar Listは、gTLD の場合のICANNに認められたレジストラ(登録業者)の一覧表です。
  7. gTLDドメイン名の新規取得時にレジストラ(登録業者)で、ドメイン名にDNSサーバー名の登録を行ったり、変更した場合に DNSサーバーの設定が伝播遅延時間(2~5日)の為、反映されていないと言うことは、「?.GTLD-SERVERS.NET.」13台の ネームデータベースが全く同じになっていないからです。 DNSサーバー名の変更時は、更に名前解決を依頼されたDNSサーバー(Full-Service Resolver)で、以前の名前解決記憶値 (DNSキャッシュ)がヒットする為、これにキャッシュ有効時間(TTL時間)を加えたものが伝播遅延時間となります。
  8. gTLDのDNSサーバーへの問い合わせは、13台の内の1台に約1~3日程度のTTL時間間隔で行い、応答結果を記憶(キャッシュ) します。(13台中10台のgTLDのDNSサーバーだけが表示されます。通常は、キャッシュデータが表示されますが、負荷分散の為、 毎回の応答結果の順序は、異なります。)
  9. 複数のDNSサーバーが存在する場合は、いつも同じDNSサーバーが参照される訳ではありません。 負荷分散のため、「たらい回し」(round robin)される場合もあります。
  10. 名前解決の問い合わせを受け付けるが、他の名前解決DNSサーバー(フォワーダ)へ転送するスレーブDNSサーバーに関しては、 省略します。詳しくは、「DNSの仕組みの基本を理解しよう」をご参照願います。

7. おまけ

無料で利用出来るDNSサーバーは、多少信頼性に欠ける様です。従って、DNSサーバーチェックファイル注)の作成を推奨します。 (実行した結果は、Windows的にファイル名「ns.txt」に出力されるようにしています。)

注)
DNSサーバーチェックファイルは、Windowsのメモ帳で作成した為、行末の改行コードが「CR」+「LF」になっています。

同じ様に実施して上記と異なった結果表示が出た場合は、実施結果を掲示板にご投稿願います。
参考文献:「鷹の巣」の自宅サーバー 掲示板 norecurse指定のnslookupがおかしいのですが。 - コマンドX2002/03/11-17:04 No.1819

目次▲頁先頭