nslookup - DNSの名前解決を調べる
nslookupコマンドは、DNS サーバーに問い合わせて、ドメイン名と IP アドレスの対応(名前解決の結果)を調べるためのコマンドです。
「サイトにつながらない」「メールが届かない」といったトラブルのとき、原因が DNS にあるのかどうかを切り分ける最初の一手として使えます。
nslookupコマンドの基本構文
nslookup [-<オプション>] [<調べたい名前またはIPアドレス>] [<問い合わせ先のDNSサーバー>]
引数を付けずに実行すると、後述する対話モードになります。
ドメイン名からIPアドレスを調べる
調べたいドメイン名を指定して実行します。
nslookup example.com
表示は大きく 2 つに分かれます。
- 上の 2 行: 問い合わせを受け付けた DNS サーバー(PC に設定されているもの)の名前とアドレス
- 下の部分: 調べたいドメイン名と、それに対応する IP アドレス
「権限のない回答(Non-authoritative answer)」は、そのドメインを管理している DNS サーバー本人ではなく、キャッシュを持つ中継の DNS サーバーが答えたことを示します。通常の問い合わせではよく表示されるもので、エラーではありません。
上記の出力はあくまで一例です。DNS サーバーの名前や、返ってくる IP アドレスの数・順序は、ネットワーク環境や問い合わせるタイミングによって変わります。
IPアドレスからドメイン名を調べる(逆引き)
ドメイン名ではなく IP アドレスを指定すると、IP アドレスに対応するホスト名を調べる逆引きになります。
nslookup 8.8.8.8

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
逆引きの設定(PTR レコード)がされていない IP アドレスでは、名前が見つからずエラーになることがあります。
また、問い合わせ先の DNS サーバー自身のアドレスに PTR レコードがない場合は、1 行目がサーバー: UnKnownと表示されます。これは問い合わせ結果とは無関係で、エラーではありません。
DNSサーバーを指定して問い合わせる
2 つ目の引数に DNS サーバーを指定すると、PC に設定されている DNS サーバーではなく、指定したサーバーに問い合わせます。
nslookup example.com 1.1.1.1
PC 既定の DNS サーバーと別のサーバーで結果が違う場合は、既定の DNS サーバーの設定やキャッシュに問題がある可能性があります。
また、DNS レコードを変更した直後に、変更が反映されているかを複数のサーバーで確認するときにも便利です。
レコードタイプを指定して調べる
DNS には、IP アドレス以外にもさまざまな種類の情報(レコード)が登録されています。-type=オプションで、調べるレコードの種類を指定できます。
nslookup -type=<レコードタイプ> <ドメイン名>
| レコードタイプ | 説明 |
|---|---|
A | ドメイン名に対応する IPv4 アドレス |
AAAA | ドメイン名に対応する IPv6 アドレス |
MX | メールの配送先(メールサーバー) |
NS | そのドメインを管理するネームサーバー |
TXT | テキスト情報(SPF などメール認証の設定にも使われる) |
CNAME | 別名(正規名への対応) |
SOA | ドメインの管理情報 |
PTR | IP アドレスに対応するホスト名(逆引き用) |
ANY | すべてのレコード(サーバーによっては応答しないことも) |
メールサーバー(MXレコード)を調べる
nslookup -type=MX example.com
メールが届かないときに、送信先のメールサーバーが正しく設定されているかを確認できます。
ネームサーバー(NSレコード)を調べる
nslookup -type=NS example.com
ドメインの管理を、どの DNS サーバーが担当しているかを確認できます。ドメインの移管や DNS 設定の切り替え後に確認する用途で使われます。
TXTレコードを調べる
nslookup -type=TXT example.com
ドメイン所有権の確認用の文字列や、SPF などのメール認証の設定を確認できます。
対話モードを使う
引数を付けずにnslookupを実行すると、>のプロンプトが表示され、続けて何度も問い合わせができる対話モードになります。
対話モードでよく使うコマンドは以下のとおりです。
| コマンド | 説明 |
|---|---|
set type=<タイプ> | 調べるレコードタイプを変更する |
server <DNSサーバー> | 問い合わせ先の DNS サーバーを変更する |
<ドメイン名> | 入力した名前を問い合わせる |
exit | 対話モードを終了する |
同じドメインについて、レコードタイプや DNS サーバーを変えながら何度も調べるときは、対話モードのほうが効率的です。
エラーメッセージの読み方
Non-existent domain
問い合わせたドメイン名が、DNS 上に存在しないことを示します。ドメイン名のタイプミスや、ドメインの登録・有効期限切れが原因として考えられます。
DNS request timed out
表示内容は Windows のバージョンによって異なります。
DNS サーバーからの応答が時間内に返ってこなかったことを示します。DNS サーバーのアドレスが誤っている、ネットワークにつながっていない、ファイアウォールで DNS(UDP / TCP の 53 番ポート)が遮断されている、といった原因が考えられます。
pingは PC の名前解決の仕組み(hosts ファイルや DNS キャッシュを含む)を通してホスト名を解決しますが、nslookupは DNS
サーバーに直接問い合わせます。そのため、pingでは名前解決できないのにnslookupでは成功する場合は、hosts
ファイルやローカルのキャッシュなど、PC 側の設定が原因である可能性があります。逆に、nslookupの結果とpingが接続する先が違う場合も、hosts
ファイルの記述が影響していることがあります。DNS キャッシュはipconfig /displaydnsで確認し、ipconfig /flushdnsで消去できます。
バッチファイルでの使い方
nslookupの出力をfindstrコマンドで絞り込むと、必要な行だけを取り出せます。
@echo off
nslookup -type=MX example.com | findstr /i /c:"mail exchanger"
|(パイプ)でnslookupの出力をfindstrに渡しています。findstrは検索文字列中の空白を「または」として扱うため、/c:を付けてmail exchangerという文字列全体で検索しています。これにより、MX レコードの行(MX preference = ..., mail exchanger = ...)だけが表示されます。
実際の出力は、調べるドメインの設定によって変わります。
nslookupの出力は、Windows のバージョンや表示言語、返ってくる情報によって形式が変わることがあります。出力の特定の行や位置を前提にした処理は、環境が変わると動かなくなる可能性があるため、動作確認を十分に行ってください。