 nslookup 〜DNSサーバに名前解決の問い合わせを行う
加地眞也 2002/3/21 |
nslookupコマンドは、DNSクライアントの名前解決機能を手動実行するためのコマンドだ。正引き/逆引き、Aレコード/NSレコード/MXレコードなどのレコード種類の絞込み検索や、再帰検索/インタラクティブ検索、DNSサーバの任意切り替え、デバッグの実行など、さまざまなオプションからDNS検索の診断が行える。単にDNS検索を行いたいだけの場合にも、十分な機能を提供するだろう。
nslookup[ -setコマンド・オプション][
ホスト・ドメイン名またはIPアドレス[ -DNSサーバ名]]
一般的なコマンド・ライン・モードのほか、ホスト・ドメイン名やIPアドレスが与えられていない場合には、対話モードで使用できる。対話モードでは、コマンドを指定することで、DNSサーバ切り替えやゾーン情報の参照なども行える。またLinuxでは、ユーザーのホーム・ディレクトリの「.nslookuprc」ファイルにオプションを記載して、実行時に自動指定しておくこともできる。
オプションなし |
対話モードで実行する |
setコマンド・オプション |
setコマンドのオプションを指定して設定する |
ホスト・ドメイン名 または IPアドレス |
ホスト・ドメイン名を指定した場合は正引き(Aレコード検索)、IPアドレスを指定した場合には逆引き(PTRレコード検索)が行われる |
DNSサーバ名 |
接続するDNSサーバを指定する |
●コマンド・ライン・モード時
ホスト・ドメイン名またはIPアドレス[ DNSサーバ名]
下記のコマンド以外の文字列が入力された場合、ホスト・ドメイン名またはIPアドレスが入力されたと解釈して、正引きまたは逆引きを実行する。DNSサーバ名も指定された場合には、そのDNSサーバに対して問い合わせを実行する
all |
現在の設定オプションを表示する |
debug |
nodebug |
デバッグ・モードを指定する。nodebugでこれを解除する |
d2 | nod2 |
より詳細なデバッグ・モードを指定する。nod2でこれを解除する |
defname |
nodefname |
デフォルト・ドメイン名を指定したホスト・ドメイン名に自動的に付加して検索する。例えばwwwと指定された場合に、デフォルト・ドメイン名であるexample.netを付加してwww.example.netとして検索する。nodefnameはこの動作を解除する |
recurse |
norecurse |
recurseは再帰検索を指定する。norecurseはインタラクティブ検索(再帰検索を行わずDNSサーバが管理するゾーン情報のみへの一度の検索のみ)を指定する |
search |
nosearch |
ドメイン・サーチ・リストを付加して検索する。nosearchはこれを解除する |
vc | novc |
TCP接続による検索を行う。novcはUDP接続での通常の検索を行う(ただし通常は、回答されるデータ・サイズがUDPパケット・サイズを越えている場合(トランケーション・エラー)に、あらためてTCP接続で検索される) |
domain=ドメイン名 |
デフォルト・ドメイン名を指定する |
srchlist=ドメイン名[/ドメイン名 ……] |
ドメイン・サーチ・リストを指定する。複数のドメインを指定でき、検索時に指定されたホスト名に自動的に付加して、それぞれの名前で成功するまで試行する |
root=DNSサーバ名 |
ルートDNSサーバを指定する |
retry=試行回数 |
検索失敗時の試行回数を指定する |
timeout=タイムアウト秒数 |
DNSサーバに対するタイムアウトを秒数で指定する |
querytype=検索レコード種別 | type=検索レコード種別 |
検索対象とするレコード種別を指定する。「'A'」「'SOA'」「'NS'」「'MX'」など |
port=ポート番号 |
DNSサーバへ接続する際のポート番号を指定する。通常は'53'番 |
class=クラス名 |
検索するレコード・クラスを指定する。通常はデフォルトである「'IN'(internet)」を指定する |
msxfr | nomsxfr*1 |
高速ゾーン転送モード(many-answers)を指定する。nomsxfrはこれを解除する |
ixfrver=シリアル番号*1 |
IXFR(Incremental Zone
Transfers:差分ゾーン転送(RFC1995))モードを使用するとともに、現在のシリアル番号を指定する |
server DNSサーバ名 使用するDNSサーバを、指定したサーバに変更する(デフォルト・サーバの変更)。その際に、サーバのIPアドレスは現在指定されているDNSサーバを用いて検索する
lserver DNSサーバ名 使用するDNSサーバを、指定したサーバに変更する(デフォルト・サーバの変更)。その際に、サーバのIPアドレスはルート・ネーム・サーバから再帰検索して判断する
finger[ ユーザー名] 現在のデフォルト・サーバに対してfinger(指定されたユーザー情報の問い合わせ)を実行する
root 現在のデフォルト・サーバをルート・ネーム・サーバとする
ignoretc | noignoretc トランケーション・エラーを無視する。つまり、TCP接続による再度の検索は行わない。noignoretcはこれを解除する
ls[ オプション] ドメイン名[ >|>> 出力ファイル名] 指定したドメインのゾーン情報を表示する。これは、通常プライマリ・サーバからセカンダリ・サーバに対して行うゾーン転送と同様の動作である。指定した出力ファイルに内容を出力して、新規作成または追記することもできる。また以下のオプションが指定できる
オプションなし |
ホストのエイリアス(CNAMEレコード)のみを表示する |
-v |
ホスト情報(HINFOレコード)のみを表示する |
-n |
ホストのサービス情報(WKSレコード)のみを表示する |
-N |
すべてのレコードを表示する |
-t レコードタイプ |
任意のレコードタイプを表示する。例えば「-t
cname」は-aオプションと同義となる |
view 出力ファイル名*1 (lsコマンドで作成された)出力ファイルを表示する
exit 対話モードを終了する
help | ? ヘルプを表示する
■基本的な再帰検索
一般的な正引きまたは逆引きを行うには、単に解決したいホスト名またはIPアドレスを入力するだけだ。コマンドラインの引数として指定するか、あるいは対話モードで指定する。入力された文字列がホスト名かIPアドレスかは、自動的に判断して検索してくれる。
●Windows 2000での使用例
|
C:\>nslookup www.example.net
または
C:\>nslookup > www.example.net
Server: ns.example.net Address: 192.168.1.11
Name: host1.example.net Address: 192.168.1.201 <-- 解決されたIPアドレス Aliases: www.example.net <-- 'Name:'が本来のAレコードでの名前。 www.example.netがエイリアス(CAME レコード)の場合にはこのように表さ れる | |
この検索では、デフォルト・サーバ(デフォルトで要求を送信するDNSサーバ)に再帰検索を依頼しているだけである点に注意しよう。実際に、ドメイン・ツリーを順に検索する名前解決を行っているのは、デフォルト・サーバだ。一般に、nslookupコマンドなどDNSクライアントは「スタブ・リゾルバ」と呼ばれる、自身では名前解決の依頼をする機能しか提供しない。
デフォルト・サーバとして使用されるサーバは、Windowsであれば「ネットワークとダイヤルアップ接続」プロパティ、Linuxであれば「/etc/resolv.conf」ファイルでの指定によって決定されるが、必要に応じてserverまたはlserverコマンドで変更することもできる。
●Windows 2000での使用例
|
C:\>nslookup > server 192.168.2.11 Default Server: otherns.example.net Address: 192.168.2.11 > host1.example.net
Server: otherns.example.net Address: 192.168.2.11
Name: host1.example.net Address: 192.168.1.201 | |
また、指定するホスト名はFQDNに限らない。FQDNでないホスト名(つまり「.(ピリオド)」が含まれていないホスト名)が指定された場合には、デフォルトのドメイン名(DNSサフィックス)を付加して検索してくれる。これはやはり、「ネットワークとダイヤルアップ接続」プロパティや/etc/resolv.confファイルで指定されたドメイン名のほか、必要に応じてdomainオプションで指定することもできる。またはsrchlistオプションで複数の候補を設定しておけば、順に自動的に補完して検索を試行してくれる。
●Windows 2000での使用例
|
> set domain=example.com > www <-- ドメイン名は指定していない。相対パスを 指定したようなものだと思えばいい Server: ns.example.net Address: 192.168.1.11
Name: www.example.com Address: 192.168.2.20 | |
■レコード別に検索を行う
nslookupでは、AレコードやPTRレコードの検索だけではなく、SOAレコード/NSレコードなどの任意のレコードの検索を行うこともできる。typeオプションまたはquerytypeオプションで、レコード種別を指定する。レコード種別として'ANY'を指定すれば、関係するドメイン内のすべてのレコードを検索して表示する。
●使用例1(SOAレコードの検索)
|
> set type=soa > example.com Server: [192.168.1.11] Address: 192.168.1.11
example.com primary name server = ns.example.com responsible mail addr = root.example.com serial = 2001062501 refresh = 21600 (6 hours) retry = 3600 (1 hour) expire = 604800 (7 days) default TTL = 86400 (1 day) example.com nameserver = ns.example.com ns.example.com internet address = 192.168.1.201 | |
●使用例2(MXレコードの検索) |
> set type=mx > example.com Server: [192.168.1.11] Address: 192.168.1.11
example.com MX preference = 10, mail exchanger = mx.example.com example.com nameserver = ns.example.com ns.example.com internet address = 192.168.1.201 | |
●使用例3(ANYの指定。検索対象に関連したレコードの回答)
|
> set type=any > www.example.com Server: [192.168.1.11] Address: 192.168.1.11
www.example.com canonical name = server2.example.com example.com nameserver = ns.example.com ns.example.com internet address = 192.168.1.201 | |
■デバックモードで検索の様子を調査する
通常の再帰検索だけでは、実際にどのような試行や回答がなされているのかは分からない。debugオプションまたはd2オプションを指定することで、より詳細な検索状況が把握でき、問題点の調査にも役立つだろう。
●Windows 2000での使用例
|
> set d2 > www.example.com Server: [192.168.1.11] Address: 192.168.1.11
------------ SendRequest(), len 33 HEADER: opcode = QUERY, id = 13, rcode = NOERROR header flags: query, want recursion questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS: www.example.com, type = A, class = IN
------------ ------------ Got answer (108 bytes): HEADER: opcode = QUERY, id = 13, rcode = NOERROR header flags: response, auth. answer, want recursion, recursion avail. questions = 1, answers = 2, authority records = 1, additional = 1
QUESTIONS: www.example.com, type = A, class = IN ANSWERS: -> www.example.com type = CNAME, class = IN, dlen = 10 canonical name = server2.example.com ttl = 86400 (1 day) -> server2.example.com type = A, class = IN, dlen = 4 internet address = 192.168.1.206 ttl = 86400 (1 day) AUTHORITY RECORDS: -> example.com type = NS, class = IN, dlen = 9 nameserver = ns.example.com ttl = 86400 (1 day) ADDITIONAL RECORDS: -> ns.example.com type = A, class = IN, dlen = 4 internet address = 192.168.1.201 ttl = 86400 (1 day)
------------ Name: server2.example.com Address: 192.168.1.206 Aliases: www.example.com | |
突然出力内容が増えてややこしく見えるかも知れないが、これらはDNSプロトコルでサーバとやりとりされたDNSデータの内容そのものだ。「連載:ネットワーク・コマンドでトラブル解決(7)『DNSの設定は正しいか?』」のプロトコルの説明と合わせて見ていただきたい。
上記の例では、サーバからの回答においてANSWERSセクションからwww.example.comの正式名(server2.example.com)とIPアドレスが分かる。AUTHORITY
RECORDSセクションでこのレコードにオーソリティを持っているDNSサーバ(ns.example.com)が、ADDITIONAL
RECORDSセクションからはそのDNSサーバーのIPアドレスが、それぞれ分かるだろう。また、DNS検索が正しく稼働しない場合には、検索パスやサーバからのエラーなどを詳しく確認するのに便利だろう。
■ゾーン転送を確認する
nslookupコマンドでは、ゾーン転送(完全転送:AXFR)をシミュレートすることもできる。これにはlsコマンドを用いる。
●Windows 2000での使用例
|
> ls example.com [ns.example.com] example.com. NS server = ns.example.com server2 A 192.168.1.206 ns A 192.168.1.201 server1 A 192.168.1.205 | |
serverコマンドでゾーン転送を行うDNSサーバへと切り替えて、lsコマンドを実行すれば、セカンダリDNSサーバによるゾーン転送と同様の動作が行える。引数には転送したいドメイン名を指定する。表示できるレコードは、そのDNSサーバがオーソリティを持っているゾーン情報のみに限られる。
プライマリDNSサーバのゾーン転送が正常に動作するかどうかの確認とともに、もう1つの使い方としては、あるドメイン内のレコード定義一覧を表示するのにも使用できるだろう。ただし、一般的にはプライマリDNSサーバなどではセキュリティ保護の観点から、ゾーン転送を許可するホストをセカンダリDNSサーバなどだけに制限している場合が多い。その場合にはエラーとなる。
関連ネットワーク・コマンド/ツール |
 |
nslookup 〜DNSサーバに名前解決の問い合わせを行う |
|
ipconfig 〜Windowsのネットワーク設定を確認する |
|
|