連載
» 2021年10月27日 05時00分 公開

DNSトラブル解決の定番、nslookupの基本的な使い方(社内ネットワーク編)Tech TIPS

DNSが正しく設定されないと、インターネットの接続が行えないなどのトラブルが発生する。こうしたトラブルの原因を調べるには、nslookupコマンドを利用するとよい。Windows OSのnslookupで名前からIPアドレス、またはIPアドレスから名前を導き出す、といった基本的な使い方を説明する。

[デジタルアドバンテージ,著]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Tech TIPS」のインデックス

連載目次

DNSトラブル解決の定番、nslookupの基本的な使い方

対象OS:Windows 8.1/Windows 10/Windows 11、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016/Windows Server 2019/Windows Server 2022


 「ネットワーク名が見つかりません」「\\<サーバ名>にアクセスできません」「<サーバ名>のサーバーIPアドレスが見つかりませんでした」……。Windows OSからリモートのコンピューターを参照しようとしたら、このようなエラーメッセージに遭遇したことはないだろうか。

 こうしたエラーの原因の1つが、「DNS(Domain Name System)」に関するトラブルである。本Tech TIPSでは、Windows OSでのDNSトラブル解決で定番のツール「nslookup」の使い方を紹介する。原則として、企業などの組織内LAN(イントラネット)での利用を前提とし、基本的な概念や使い方に焦点を当てている。より高度な使い方については、別のTech TIPSで紹介したい。

 以下では、Windows 10でnslookupを実行したときの例およびスクリーンショットを記している。ただし他のWindows OSでも基本的な動作は共通である。

nslookupとは?

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

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

DNSの基本

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

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

 DNSサーバには、以下のようなレコードが多数登録されている(レコードの種類は他にもある)。

  • 名前(ホスト名)に対するIPアドレスの定義(AレコードまたはIPv6用のAAAAレコード)
  • IPアドレスに対する名前の定義(PTRレコード。「PTR」は「pointer」の略)
  • ドメイン名に対するネームサーバ情報(NSレコード)
  • サービス名に対するサーバのポート番号などの情報(SRVレコード)

 DNSサーバは、DNSのクライアントからの要求に応じて、これらのレコードを検索し、レコード情報を返すことになっている。

 例えばDNSのクライアントが「atmarkit.itmedia.co.jp」というホストを表す文字列をDNSサーバに渡すと、DNSサーバはこの文字列に割り当てられているIPアドレス「54.92.15.132」を返してくる。逆に、「54.92.15.132」というIPアドレスを渡すと、「ec2-54-92-15-132.ap-northeast-1.compute.amazonaws.com」という名前を返す(逆引きで得られた名前が元のホスト名と一致しないことはよくある)。

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応答が正しいかどうかを検査できる。

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

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

nslookup pc01



nslookupコマンドでホスト名からIPアドレスを得る nslookupコマンドでホスト名からIPアドレスを得る

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

 結果の先頭2行(画面中の*1)は、このnslookupコマンドが問い合わせの対象としているDNSサーバの名前とIPアドレスである。デフォルトでは、TCP/IPのプロパティにおける、DNSサーバ情報から取得される(複数定義されている場合は最初のDNSサーバ。詳細はTech TIPS「優先DNSサーバと代替DNSサーバの動作について」を参照)。また省略時に補われるデフォルトのドメイン名も、同じくTCP/IPのDNSサフィックス検索一覧(DNS Suffix Search List)の情報から取得される。これらの情報は「ipconfig /all」コマンドで表示できる。

 もしDNSサーバそのものが存在しなかったり、応答が得られなかったりしたら、「*** UnKnown への要求がタイムアウトしました」といったエラーメッセージが表示される。

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

FQDN名を指定したDNS検索

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

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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