連載
» 2014年09月12日 19時00分 UPDATE

Windows TIPS:nslookupの基本的な使い方(イントラネット編)

DNSサーバーの動作状態を確認するにはnslookupコマンドを利用する。nslookupの引数にホスト名やIPアドレスを指定すると、該当するDNSレコードが表示される。nslookupの第2引数には、対象となるDNSサーバーを指定できる。

[島田広道,デジタルアドバンテージ]
Windows TIPS
Windows Server Insider


「Windows TIPS」のインデックス

連載目次

対象OS:Windows XP/Windows 7/Windows 8/Windows 8.1/Windows Server 2003/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2


解説

 nslookupはDNSサービスのトラブルシューティングの場合に必ずといってよいほど使われる、非常に基本的なコマンドである。DNSサーバーの設定の状態を調べたり、DNSのクライアントにおけるDNS関連の設定を調査したりする場合に利用される(一般的には後者の方が多いだろう)。

 nslookupは、最初にUNIX上でDNSが開発されたときから利用されている、非常に歴史の古いコマンドである。同様のコマンドとして、UNIXやLinuxなどではdigやhostといった、より高機能なコマンドの利用が推奨されている。しかしWindows OSではデフォルトでnslookup.exeしか用意されておらず、現在でも広く使われている。

 ここではイントラネットでの利用を前提に、nslookupコマンドの基本的な使い方について解説しておく。インタラクティブモードやゾーン/ネームサーバー/MXレコード、DNSサーバー間のゾーン転送、IPv6での動作の確認などといった、より高度な使い方については別のTIPSで取り上げることにする。

●DNSの基本

 nslookupの使い方を説明する前に、DNSサービスの機能をごく簡単に説明しておこう。

 DNSは、例えば「www.atmarkit.co.jp」といったFQDN名(ホスト名+ドメイン名を完全に指定した形式)と、それに対応付けられている「202.218.219.147」などというIPアドレスを相互に変換するサービスである。

 DNSサーバーには、名前(ホスト名)に対するIPアドレスの定義(AレコードまたはIPv6用のAAAAレコード)や、逆に、IPアドレスに対する名前の定義(PTRレコード)、ドメイン名に対するネームサーバー情報(NSレコード)、サービス名に対するサーバーのポート番号などの情報(SRVレコード)など、多くのレコードが登録されている。DNSサーバーは、DNSのクライアントからの要求に応じて、これらのレコードを検索し、レコード情報を返すことになっている。

 例えばDNSのクライアントが「www.atmarkit.co.jp」というホストを表す文字列をDNSサーバーに渡すと、DNSサーバーはこの文字列に割り当てられているIPアドレス「202.218.219.147」(Aレコード)を返してくる。逆に、「202.218.219.147」というIPアドレスを渡すと、「www.atmarkit.co.jp」という名前(PTRレコード。「PTR」は「pointer」の略)を返す。

●nslookupコマンドが必要とされるワケ

 ユーザーがコンピューターを利用する場合、このようなDNSサーバーとDNSクライアントによる名前解決処理は自動的に行われる。しかし、DNSサーバー側の設定ミスやDNSクライアント側でのDNSサーバー指定の間違い、DNSサーバーとクライアント間での通信エラーなどにより、名前解決が正しく行えない場合がある。このようなトラブルが発生した場合に役に立つのがnslookupコマンドである。

 nslookupコマンドは、DNSのサーバーに対して直接DNS要求を送り、その結果を表示する。DNSサーバーとのやりとりが直接表示されるので、DNSサーバーと正しく通信ができているか、DNSクライアントからの要求に対するサーバーの応答は正しいか、サーバーに設定されているレコード情報は正しいか、といったことを調査できる。

 Windows OSでは、DNSサーバーに要求を出すクライアント側のプログラムとして「DNS Client」サービスが動作している。これは直接DNSサーバーに問い合わせるだけでなく、サービス内部にキャッシュされた情報から検索したり、複数のDNSサーバーに順に問い合わせたりするなど、いくらか高度な処理を行っている。そのため、DNSサーバーに登録された最新のレコード情報と食い違っていたりする可能性がある。

 だがnslookupを使えば、DNSサーバーに対して直接DNS要求を送信してその結果を得ることができる。また特定のDNSサーバーを指定することもできるので、DNSレコード情報を直接提供しているDNSサーバー(「権威のある(Authoritative)DNSサーバー」プライマリDNSサーバーともいう)だけでなく、セカンダリDNSサーバーやキャッシュDNSサーバー、フォワードのみのDNSサーバーなど、いろいろなサーバーを指定して、それぞれからのDNS応答が正しいかどうかを検査できる。

操作方法

 以下では、Windows 7以降のWindows OSでnslookupを実行したときの例を記している。ただしWindows XP/Windows Server 2003でも、出力メッセージの表記が英語(「サーバー:」ではなく「Server:」など)なだけで、その他の基本的な動作は共通である。

●nslookupの基本――Aレコードの検索

 一番基本的なnslookupの使い方は、引数にホスト名やFQDN名を指定してnslookupを起動することである。

C:\>nslookup pc01  ……「pc01」という名前をDNSサーバーに問い合わせる
サーバー:  server1.example.com  ……DNSサーバーの名前(※1)
Address:  192.168.0.11  ……DNSサーバーのIPアドレス

名前:    pc01.example.com  ……問い合わせ内容(の復唱)
Address:  192.168.0.115  ……結果(※2)



 ここでは単にホスト名「pc01」のみを指定している。こうすると、現在のクライアント環境におけるデフォルトドメイン名(この場合は「example.com」)が末尾に補われて、DNS問い合わせが行われる。

 結果の先頭2行(※1)は、このnslookupコマンドが問い合わせの対象としているDNSサーバーの名前とIPアドレスである。デフォルトでは、TCP/IPのプロパティにおける、DNSサーバー情報から取得される(複数定義されている場合は最初のDNSサーバー。詳細は右上の関連記事を参照)。また省略時に補われるデフォルトのドメイン名も、同じくTCP/IPのDNSサフィックス検索一覧(DNS Suffix Search List)の情報から取得される。これらの情報はipconfig /allコマンドで表示できる。もしDNSサーバーそのものが存在しなかったり、応答が得られなかったりしたら、「*** UnKnown への要求がタイムアウトしました」といったエラーメッセージが表示される。

 DNSサーバーへの問い合わせ結果は、最後の2行に表示されている(※2)。つまり、「pc01.example.com」のIPアドレスは「192.168.0.115」であるという結果が得られている。もし存在しない名前ならば「*** server1.example.com が pc99 を見つけられません: Non-existent domain」などと表示される。

●FQDN名を指定したDNS検索

 次は単純なホスト名ではなく、FQDN名で検索をしてみよう。この指定方法を使うと、デフォルトとは異なるドメインやサブドメインなどの場合でも検索できる。DNSサーバーに対する検索はこのFQDN名による検索が基本である(DNSクライアントは必要に応じてドメイン名を補って検索するようになっている)。

C:\>nslookup pc01.example.com  ……問い合わせ(※3)
サーバー:  server1.example.com
Address:  192.168.0.11

名前:    pc01.example.com
Address:  192.168.0.115  ……結果(※4)



 これは「pc01.example.com」という名前を検索して、その結果が「192.168.0.115」であったということを表している。

 これと似た検索として、さらに次のようなものもある。

C:\>nslookup pc01.example.com.  ……問い合わせ(※5)
サーバー:  server1.example.com
Address:  192.168.0.11

名前:    pc01.example.com
Address:  192.168.0.115  ……結果(※6)



 この問い合わせ(※5)の最後に「ピリオド(.)」が付いていることに注意してほしい。結果は、※4※6も同じであるが、実は途中の経過が少し異なる。

 DNSに対する問い合わせでは、最後にピリオドが付いていると、それはFQDNであるとみなされ、自動的なドメイン名の補完は行われない。逆に、ピリオドがない場合は、自動的に現在のドメイン名が補完され、検索が行われる。そしてそれが失敗すると、次にデフォルトドメイン名を1つ分短くして(先頭の方から順に短くする)、次々とテストされ、最終的に結果が得られるまで実行される。

DNS要求 試行するFQDN
pc01 (1) pc01.example.com.
pc01.example.com (1) pc01.example.com.example.com.
(2) pc01.example.com.
pc01.example.com. (1) pc01.example.com.
nslookupに対する引数と検索されるFQDNの例
最後にピリオドが指定されていない場合は、(デフォルトのnslookupの検索設定では)デフォルトのドメイン名を補って検索し、失敗すると、デフォルトドメイン名を短くしながら、順番に名前解決を試行する。背景が黄色い部分が、自動的に補われる部分だ。なお、詳細は省略するが「pc01.example.com.com」は試行しない。

 以上の動作を実際に確認するためには、nslookupに「-debug」(もしくは「-d」)オプションを付けて実行するとよい(「nslookup -debug pc01.example.com.」などとする)。この場合、DNSの要求1回ごとに「Got answer:」から始まる詳細な問い合わせ結果の項目が表示される。上表の一番上と一番下の例では、DNSサーバーに対して1回しか要求を出しておらず、その結果(「type = A」と表記されるIPv4アドレス)も1回分のみ返される。一方、真ん中の例では、2回DNS要求が発行され、2回分の結果が返されるはずだ。

 このような自動的な補完機能は、(サブ)ドメイン指定などを簡単にするために用意されている。例えばデフォルトドメインが「sub1.sub2.example.com」の場合でも、単に「server1」とすれば、「server1.example.com」を指すようにするためである。

●逆引きポインターの検索

 以上は名前からIPアドレスを求める場合であったが、逆にIPアドレスから元の名前(FQDN名)を求めることもできる。これを「逆引き」という。といっても、実際にはDNSサーバーに逆引きのレコード(PTRレコード)が登録されており、それを検索しているにすぎない。そのため、PTRレコードが存在しない場合は、逆引きは失敗する。

 逆引きを行うためには、単に引数としてIPアドレスを指定すればよい。

C:\>nslookup 192.168.0.115
サーバー:  server1.example.com
Address:  192.168.0.11

名前:    pc01.example.com  ……結果
Address:  192.168.0.115



 この例では、「192.168.0.115」の逆引きの結果は「pc01.example.com」であるという結果が返されている。ただし、これはPTRレコードのデータ部分だけであり、実際のPTRレコード全体を表示するには、次のように「-type=ptr」オプションを付けて実行する(もっとも、結果に大きな違いはないが)。

C:\>nslookup -type=ptr 192.168.0.115
サーバー:  server1.example.com
Address:  192.168.0.11

115.0.168.192.in-addr.arpa      name = pc01.example.com  ……結果



 「115.0.168.192.in-addr.arpa」というのは、実際に定義されている逆引きレコードのFQDN名である(逆引きレコードは「0.168.192.in-addr.arpa」ドメインに定義されている)。

●デフォルト以外のDNSサーバーの指定

 以上の例では、全てデフォルトのDNSサーバー(上の例ではserver1.example.com)を利用して検索を行っていた。デフォルト以外のDNSサーバーを利用するには、nslookupの引数の最後(第2引数)に、DNSサーバーのFQDN名(もしくはIPアドレス)を付加すればよい。複数のDNSサーバーが利用できる場合は、この機能を使って、それぞれのDNSサーバーが正しく動作しているか、登録されている内容に矛盾がないかどうかなど調査できる。

C:\>nslookup pc01.example.com server2
サーバー:  server2.example.com  ……オプションで指定されたサーバーに問い合わせている
Address:  192.168.0.12

名前:    pc01.example.com
Address:  192.168.0.115



 この場合は、最初の「●nslookupの基本――Aレコードの検索」の例と同じなので、どちらのDNSサーバーの内容も正しいということが分かる。もし異なる結果が得られたり、どちらかのDNSサーバーがダウンしたりしているようならば、DNSサーバー側の調査が必要になるだろう。

■更新履歴

【2014/09/12】Windows 7以降のWindows OSに対応しました。

【2003/07/19】初版公開(対象はWindows 2000/Windows XP/Windows Server 2003)。


「Windows TIPS」のインデックス

Windows TIPS

Copyright© 1999-2015 Digital Advantage Corp. All Rights Reserved.

TechTargetジャパン

@IT Special

- PR -
セキュリティ大阪
Loading

ホワイトペーパー(TechTargetジャパン)

注目のテーマ

Focus

- PR -

転職/派遣情報を探す

【転職サーチ】SIer/Web企業/新規事業 スマホ開発で、あなたのキャリアを生かす

「派遣・フリーで働くメリット」とは? 活躍する派遣エンジニアの本音

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。