nslookup とは?
nslookup とは、Windows のコマンドの 1 つで、DNS による名前解決を行うツールです。
例えば佐川急便の Web サイトの URL は『www.sagawa-exp.co.jp』ですが、この IP アドレスを知りたいとき (つまり正引きしたいとき = A レコードを知りたいとき) は以下のようにします。
⇒ "cmd" と入力し、[Enter]
⇒ "nslookup www.sagawa-exp.co.jp" と入力し、[Enter]
www.sagawa-exp.co.jp の IP アドレスが 42.124.125.51 だと分かります。ブラウザでhttp://42.124.125.51 でアクセスしても、www.sagawa-exp.co.jp と同じ Web ページが表示されます。
Unknownとは?
『サーバー: Unknown』とは、DNS サーバ自体のAddress: 192.168.100.1 の逆引き (PTR レコード) を調べたけど『レコード無し』だったことを示しています。もし逆引きに成功した場合は『サーバー』のところにDNSサーバのホスト名が表示されます。
『権限のない回答』とは?
『権限のない回答』とは"問合せをした DNS サーバ"が自分で『www.sagawa-exp.co.jp』の情報を持っていた訳ではなく、『他の DNS サーバに聞いたらそういう回答があったよ』ということを示しています。
では権限のある回答にするためにはどうすればよいか?『www.sagawa-exp.co.jp』の情報を持っているDNSサーバはどのサーバなのでしょうか?
それを調べるにはその 1 つ上のドメイン『sagawa-exp.co.jp』の NS レコードを調べます。
NS レコードは、そのドメインの管理している (つまり権限のある) DNS サーバを探すときに使うレコードです。
NS レコードを調べるには、以下のように nslookup のあとに -type=ns というオプションを付けます。
C:¥> nslookup -type=ns sagawa-exp.co.jp
143.90.130.58 が『sagawa-exp.co.jp』に関するドメイン情報を持っていることが分かります。
この DNS サーバに直接聞きに行くには、nslookup sagawa-exp.co.jp の後に DNS サーバの IP アドレスを指定します。例えば sagawa-exp.co.jp の公開 DNS サーバ 143.90.130.58 に聞きに行く場合は以下のようにします。
C:¥> nslookup sagawa-exp.co.jp 1.1.1.1
また、nslookup で [Enter] した後、『server』オプションでその DNS サーバの IP アドレスを指定することでも可能です。具体的には以下のように打ちます。
C:¥> nslookup > server 143.90.130.58 > www.sagawa-exp.co.jp
今度は『権限のない回答』とは出てきません。これは 143.90.130.58 の DNS サーバが www.sagawa-exp.co.jp の情報を持っており、nslookup コマンドの server 指定で直接聞きに行っているからです。
なお、このような DNS サーバに別のドメインの名前を聞こうとすると、通常は拒否されます。もしこれが拒否されないと、セキュリティ上の問題になるからです。
以下は、佐川急便の DNS サーバに www.yahoo.com を聞きに行った場合の結果です。
nslookup のオプション
レコード指定
既に使い方の例が出ていますが、"nslookup -type=[レコードタイプ]" で知りたいレコードタイプの情報を取得できます。-typeを入れないと IP アドレスフォーマットなら "A レコード"、FQDNフォーマットなら "PTR レコード" として探索されます。
レコードタイプは [ A , MX , NS , PTR , SRV , TXT ] 等が使えます。
逆引き(PTR)レコードの探索
例えば yahoo.co.jp の逆引きをしたい場合は以下のようにします。(前述の通り、-type=ptr は省略しても OK)
C:¥> nslookup -type=ptr yahoo.com
MXレコードの探索
例えば hogehoge@yahoo.com のメールアドレスをどのメールサーバへ送ればよいかを調べるときは以下で確認できます。
C:¥> nslookup -type=mx yahoo.com
メールサーバがたくさんあることが確認できます。おそらくどれに送っても同じように扱われるはずです。
DNSサーバ指定
nslookup とだけ打つとオプションを指定しながら名前解決が出来ます。server オプションでは DNS サーバの指定が出来ます。また、set type=[レコードタイプ] でレコードタイプの指定も出来ます。
C:¥> nslookup > server 8.8.8.8 # google のDNSサーバを指定 > set type=ptr > 124.108.103.103
yahoo.com の正引き (Aレコード) を調べると 124.108.103.103 が返ってきますが、これの逆引き (PTR レコード) を調べると media-router-fp1.prod1.media.vip.tp2.yahoo.com というホスト名が返ってきます。このように、正引きの逆引きは必ずしも一致しません。
この記事全般を通して『何をやっているか分からない』という方は、以下のページも参考にしてみて下さい。
DNS について分かり易く解説しています。
nslookup のキャッシュについて
nslookup コマンドによる DNS の回答結果は PC 内にキャッシュされません。つまり、nslookup コマンドを打つたびに毎回 DNS サーバに聞きに行きます。
ですが、DNS サーバ側では、前述した『権限のない回答』をする DNS サーバについては基本的にキャッシュされます。
例えば CentOS+bind の DNS サーバ上でキャッシュをクリアするには以下コマンドを打ちます。
# rndc flush
なお、Windows のクライアント PC 側で、(nslookupではなく) ブラウザ等の URL の名前解決で使っている DNS キャッシュをクリアするにはコマンドプロンプトで以下を打ちます。
C:¥> ipconfig /flushdns
コメント