nslookup の TIPS
nslookupとは
DNSのトラブルシューティングコマンド
Windowsの実行ファイル名は、nslookup.exe
DNSサーバ側の設定状態の確認や、DNSクライアント側でのDNS関連設定の調査で用いる。
nslookupが必要な理由
Windows OSではデフォでDNS Clientサービスが動作しており、キャッシュ情報を検索したり、複数DNSサーバに問い合わせたり高度な処理を実施している。権威DNSサーバに登録された最新レコードと情報が食い違っている可能性がある。
だが、nslookupを使えば、DNSサーバを指定し、直接DNS要求を送信し、結果を得る事ができる。プライマリの他セカンダリDNSサーバや、キャッシュDNSサーバなど、色々なサーバを指定可能。それぞれからのDNS応答が正しいか検証できる。
nslookupの使い方
超基本は、引数にFQDN名を指定してnslookupを起動すること。
FQDNではなく、ホスト名を指定した場合は、現在のクライアント状況におけるデフォルトドメイン名が末尾に補足されDNS要求が行われる。
補足されるドメイン名は、DNSサフィックスの情報から取得。ipconfig /allで確認可能。
結果の先頭2行は、問合せ対象のDNSサーバ名とIPアドレスである。デフォでは、TCP/IPプロパティで設定されているDNS情報から取得される。複数定義の場合は、最初のDNSサーバ。
その後に、問合せ結果である、FQDN(問合せた名前の復唱)とIPアドレスが表示される。
もし、DNSサーバそのものが存在しない、または応答が得られなかった場合は、「*** UnKnown への要求がタイムアウトしました」といったエラーメッセージが表示される。
もし、問合せた名前が存在しない場合は、「*** server1.example.jp が pc99 を見つけられません: Non-existent domain」などと表示される。
DNS要求で、末尾にピリオドを付けた場合
例えば、nslookup pc01.example.jp. と最後にピリオドを付けた場合と付けない場合で結果は同じだが、途中の経過が異なる。
最後にピリオドがついてると、それはFQDNとみなされ自動的なドメイン名補完は行われない。
ピリオドが無いと、自動補完がされ、検索が行われる。それが失敗すると、デフォドメイン名を一つ分短くして、次々とテストされる。
nslookupで指定する名前 | 実際に問い合わせが試行されるFQDN |
---|---|
pc01 | (1) pc01.example.jp. |
pc01.example.jp | (1) pc01.example.jp.example.jp. (2) pc01.example.jp. |
pc01.example.jp. | (1) pc01.example.jp. |
nslookupに対する引数と検索されるFQDNの例
最後にピリオドが指定されていない場合は、(デフォルトのnslookupの検索設定では)デフォルトのドメイン名を補って検索し、失敗すると、デフォルトドメイン名を短くしながら、順番に名前解決を試行する。背景が黄色い部分が、自動的に補われる部分だ。なお、詳細は省略するが「pc01.example.jp.jp」は試行しない
nslookup に -debug (-d)を付けると上記の実際の動作を確認できる。
逆引きをする場合
逆引きとは、IPアドレスから名前を調べること
単に引数として、IPアドレスを指定すればOK。
DNSサーバに逆引きレコード(PTR)が存在しないと、逆引きは失敗する。
問合せ先のDNSサーバの指定
デフォルト以外のDNSサーバを利用するには、nslookup の引数の最後(第2引数)に、DNSサーバのFQDNもしくはIPアドレスを付加する。
例:nslookup pc01.example.jp 8.8.8.8
nslookup のオプション一覧の表示
まず引数を付けずに nslooupを実行。
対話モードに入るので、?を入力してEnter
DNSクライアント側のキャッシュ制御
Windowsでは、DNSクエリとその結果をクライアント側にキャッシュする機能(DNS Client)を持っている。
■キャッシュ内容の表示
DNSのクライアント側のキャッシュの内容を表示させるには、コマンド・プロンプト上で「ipconfig /displaydns」を実行する。これにより、現在DNSキャッシュに入っているDNSのクエリーの内容とその応答が表示される。1度キャッシュされた結果は、元のDNSレコードのTTL(Time To Live、生存時間)が有効な間、保持されている。
■キャッシュ内容の破棄
クライアント・キャッシュの内容は一時的に保持されているが、これが不要な場合(手動でDNSレコードを変更したので、強制的にキャッシュを更新させたい、という場合など)には、手動でキャッシュの内容をすべて破棄させることができる。このためには、コマンド・プロンプト上で「ipconfig /flushdns」を実行する。これにより、現在のDNSキャッシュの内容がすべて破棄される。