最終更新日 2025年2月26日

はじめに
本セクションでは以下の内容について解説します。
nslookupコマンドとは?(概要と役割)
nslookupコマンドは、LinuxでDNS(Domain Name System)の情報を確認するためのコマンドです。
ドメイン名からIPアドレスを調べたり、逆にIPアドレスからドメイン名を調べたりするのに使われます。
また、特定のDNSサーバーを指定して名前解決の結果を確認することも可能です。

先輩、nslookupってどんな時に使うんですか?

主にDNSの動作確認やトラブルシューティングで使うよ。たとえば、特定のドメインが正しく名前解決できているか、どのIPアドレスが割り当てられているかを確認するのに便利だ。

じゃあ、nslookupが使えれば、ネットワークの問題を調べるのに役立つんですね!

その通り。特に、サーバー移行後のDNS設定確認や、特定のDNSサーバーの応答をチェックするのによく使われる。

LinuxにおけるDNSの基本知識(名前解決の仕組み)
DNSは、ドメイン名をIPアドレスに変換する仕組みであり、インターネットの基盤となる重要なシステムです。
通常、Linuxでは/etc/resolv.conf
に設定されたDNSサーバーを利用して名前解決を行います。

そもそも、どうしてDNSって必要なんですか?

人間はwww.example.com
みたいなドメイン名を覚えやすいけど、コンピュータはIPアドレス(192.168.1.1
みたいな数字)で通信するんだ。だから、ドメイン名とIPアドレスを変換するのがDNSの役割ってわけだ。

じゃあ、nslookupを使えば、DNSが正しく動作しているか確認できるってことですね?

その通り。もしDNSの設定が間違っていたり、名前解決ができなかったりすると、ウェブサイトにアクセスできなくなることもある。

なるほど、だからDNSの確認はサーバー管理において重要なんですね。

なぜnslookupを使うのか?
nslookupはシンプルで使いやすく、DNSの基本的な情報をすぐに確認できるコマンドです。
一方、より詳細な情報が必要な場合はdig
コマンドを使う方が適しています。

でも、digコマンドもDNSの調査に使えますよね?nslookupとどう違うんですか?

nslookupはシンプルで、基本的なDNSの動作確認向き。digはより詳細な情報を取得できるから、DNSのトラブル解析にはdigがよく使われる。

例えば、どんな違いがあるんですか?

たとえば、nslookupは対話モードで複数のクエリを連続して実行できるのが便利。一方、digは詳細な出力を提供し、DNSの応答時間やTTLの確認がしやすいという利点がある。

なるほど、簡単に調査したいときはnslookup、より深く調べたいときはdigを使えばいいんですね!

その通り。実際の業務では、どちらも使いこなせるようになっておくと便利だよ。
digコマンドについては以下の記事で紹介しているのでよかったら見てみてください!

まとめ
- nslookupは、LinuxでDNSの情報を確認するための基本コマンド。
- DNSは、ドメイン名とIPアドレスを相互変換するシステムで、ネットワーク通信に不可欠。
- nslookupは基本的なDNSのチェックに適しており、より詳細な解析が必要ならdigを使う。
nslookupコマンドの基本的な使い方
本セクションでは以下の内容について解説します。

nslookupがLinuxに標準搭載されているか確認する方法
多くのLinuxディストリビューションでは、nslookupはデフォルトでインストールされています。
確認するには、以下のコマンドを実行します。
nslookup --version
または、以下のコマンドでパスを確認できます。
which nslookup

先輩、nslookupって最初から入っているんですか?

ほとんどのLinux環境には標準で入っているよ。ただし、環境によっては入っていないこともあるから、which nslookup
で確認するといい。

もしcommand not found
って出たら、どうすればいいですか?

その場合は、パッケージをインストールする必要があるな。
インストールが必要な場合の方法(Ubuntu/Debian系, CentOS/RHEL系)
nslookupはdnsutils
またはbind-utils
パッケージに含まれています。
ディストリビューションごとのインストール方法は以下のとおりです。
Ubuntu / Debian系
sudo apt update
sudo apt install dnsutils -y
CentOS / RHEL系
sudo yum install bind-utils -y
Alpine Linux
sudo apk add bind-tools
インストール後、再度which nslookup
を実行し、正しくインストールされていることを確認しましょう。

インストールした後、すぐに使えるんですか?

うん。特に設定変更は不要だ。もしcommand not found
のままだったら、which nslookup
をもう一度試してみるか、source ~/.bashrc
を実行するといい。

基本的な使い方
nslookup ドメイン名
nslookupを使えば、ドメイン名からIPアドレスを調べることができます。
基本的な構文は以下のとおりです。
nslookup example.com
このコマンドを実行すると、以下のような結果が表示されます。
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34

このNon-authoritative answer
って何ですか?

これは、問い合わせたDNSサーバーが権威サーバー(公式のDNS)ではなく、キャッシュされた情報を返しているって意味だ。

じゃあ、権威サーバーから直接情報を取得することもできるんですか?

できるよ。それは後で説明するけど、dig
コマンドを使うとより詳しく調べられる。
nslookup IPアドレス(逆引き)
IPアドレスからドメイン名を調べることも可能です(逆引き)。
以下のように実行します。
nslookup 93.184.216.34
出力結果
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
34.216.184.93.in-addr.arpa name = example.com.

逆引きって、具体的にはどんな場面で使いますか?

サーバーログにIPアドレスしか記録されていないときに、どのホストからのアクセスなのか調べるのに使うことが多いな。
まとめ
- nslookupはドメイン名からIPアドレスを調べる基本的なコマンド。
- 逆引きを行うことで、IPアドレスからドメイン名を特定可能。
- 特定のDNSサーバーを指定することで、異なる環境での名前解決結果を比較できる。
オプションと詳細解説
nslookupは、単にドメイン名からIPアドレスを取得するだけでなく、DNSの詳細な情報を取得するためのオプションを備えています。
ここでは、nslookupの主要なオプションについて詳しく解説します。
- -typeオプション(A, MX, TXT, CNAME など)
- -debugモードの使い方
- -querytypeと-class の活用方法
- serverコマンドを使った特定DNSサーバーの指定
- setコマンドでの詳細設定
- まとめ

-typeオプション(A, MX, TXT, CNAME など)
-type
オプションを使うと、特定のDNSレコードを取得できます。
以下のように指定することで、各種レコードを調べることが可能です。
nslookup -type=A example.com # Aレコード(IPv4アドレス)
nslookup -type=AAAA example.com # AAAAレコード(IPv6アドレス)
nslookup -type=MX example.com # MXレコード(メールサーバー)
nslookup -type=CNAME example.com # CNAMEレコード(別名)
nslookup -type=TXT example.com # TXTレコード(SPFやDKIM情報)

先輩、AレコードやMXレコードって何のためにあるんですか?

Aレコードはドメイン名をIPv4アドレスに紐づける基本的なレコードだ。MXレコードはメールの送信先サーバーを指定するために使われる。

TXTレコードってどんな時に使いますか?

TXTレコードは、ドメインの所有権確認や、SPF・DKIMなどのメール認証でよく使われるな。

-debugモードの使い方
-debug
オプションを使うと、より詳細なDNS応答を取得できます。
nslookup -debug example.com
出力結果
------------
QUESTIONS:
example.com, type = A, class = IN
ANSWERS:
example.com, internet address = 93.184.216.34
------------
この情報には、問い合わせの種類(Aレコード)や、DNSの応答内容が詳細に表示されます。

DNSの動作が怪しい時に、どの情報を見ればいいですか?

-debugオプションを使えば、問い合わせの詳細情報が見られるから、問題の切り分けに役立つよ。特に QUESTIONS
や ANSWERS
の部分をチェックするといい。

これを使うと、どんな問題が特定しやすくなるんですか?

例えば、DNSサーバーがどんなデータを返しているか、正しいレコードを取得しているかどうかが分かる。

-querytypeと-class の活用方法
-querytype
は -type
と同じ機能で、特定のレコードを指定できます。
nslookup -querytype=NS example.com
-class
オプションを使うと、異なるDNSクラスを指定できますが、通常の使用では IN
(インターネット)を使うことがほとんどです。
nslookup -class=IN example.com

-querytype
と-type
の違いって何ですか?

実はどちらも同じ動作をする。でも、昔のnslookupでは-querytype
が主流だったから、今も一部の環境で使われている。

-class
オプションはどんな時に使いますか?

DNSにはIN(インターネット)以外にCHAOS(BINDのバージョン確認用)なんかもあるけど、実際にはほとんど使う機会はないな。
serverコマンドを使った特定DNSサーバーの指定
特定のDNSサーバーに対してクエリを送るには、server
コマンドを使います。
これは、nslookupの対話モードで使用します。
nslookup
> server 8.8.8.8
> example.com

特定のDNSサーバーに問い合わせたい時はどうすればいいですか?

普通は nslookup example.com 8.8.8.8
でOKだけど、対話モードで server
コマンドを使うと、連続して異なるクエリを試せるから便利だぞ。

対話モードだと何が便利になるんですか?

例えば、同じDNSサーバーで複数のクエリを連続して実行できるから、細かく調査するときに使うといい。

setコマンドでの詳細設定
nslookupの対話モードでは、set
コマンドを使って詳細な設定が可能です。
コマンド | 説明 |
---|---|
set debug | 詳細なデバッグ情報を表示 |
set type=MX | 問い合わせるレコードの種類を指定 |
set timeout=5 | タイムアウトの時間を5秒に設定 |
set retry=3 | クエリの再試行回数を設定 |
使用例
nslookup
> set type=MX
> example.com

set
コマンドって何ができるんですか?

nslookupの動作をカスタマイズできる。例えば、デフォルトのレコード種類をMXに設定したり、タイムアウト時間を変えたりできる。

再試行回数も設定できるんですね!

そう。set retry=3
を設定すれば、応答がないときに3回再試行するようになる。

まとめ
-type
オプションで、A, MX, TXTなど特定のレコードを取得できる。-debug
オプションで詳細なDNSクエリの情報を取得可能。server
コマンドを使うと、特定のDNSサーバーに問い合わせできる。set
コマンドで詳細な設定(レコードタイプ、タイムアウト、再試行回数など)を変更できる。
これらのオプションを適切に使いこなせば、DNSの調査やトラブルシューティングがよりスムーズに行えるようになります。
nslookupを活用したDNSトラブルシューティング
本セクションでは以下の内容について解説します。
- 名前解決ができない場合の確認方法
- ネットワークチェック(ping, traceroute)
- NXDOMAIN(ドメインが存在しない)エラー
- SERVFAILやREFUSEDの原因と解決策
- キャッシュDNSの影響を調べる方法
- まとめ

名前解決ができない場合の確認方法
nslookupのエラーコードとその意味
nslookupで名前解決ができない場合、エラーメッセージを確認することが重要です。
以下のようなエラーが発生した場合、それぞれの原因を特定し対処する必要があります。
エラーコード | 意味 |
---|---|
NXDOMAIN | ドメインが存在しない |
SERVFAIL | DNSサーバーの障害または設定ミス |
REFUSED | DNSサーバーがクエリを拒否 |
TIMEOUT | 応答が遅い、またはサーバーが応答しない |

先輩、nslookupでNXDOMAIN
って出たんですが、これはどういう意味ですか?

それは指定したドメインがDNS上に存在しないってことだな。本当にそのドメインがあるのか、スペルミスがないか確認したほうがいい。

もしドメインが間違っていないのにエラーが出る場合は?

それなら、使用しているDNSサーバーが古い情報をキャッシュしている可能性があるな。他のDNSサーバーで試してみるといい。

ネットワークチェック(ping, traceroute)
DNSの問題が発生した場合、最初にネットワークが正常に動作しているか確認することが重要です。
まず、対象のホストに対してpingを実行し、応答があるか確認します。
ping example.com
次に、通信経路を調べるためにtracerouteを実行します。
traceroute example.com # Linux
tracert example.com # Windows

nslookupが失敗するんですが、これはDNSの問題ってことですよね?

そうとは限らない。まずはネットワーク自体が正常に動作しているか確認する必要がある。ping
やtraceroute
を試してみてくれ。

なるほど、ネットワークが切れていたら、そもそもDNSどころじゃないですね!

そういうことだ。まずは基本のチェックからやるのがトラブルシューティングの基本だな。
NXDOMAIN(ドメインが存在しない)エラー
NXDOMAIN
は、指定したドメイン名がDNS上に存在しない場合に発生します。
このエラーが出た場合、まず以下を確認しましょう。
- ドメイン名のスペルミスを確認する
- 別のDNSサーバー(Google Public DNS 8.8.8.8 など)で試す
- whoisコマンドでドメインの有効性を確認する
whois example.com

NXDOMAIN
が出たら、基本的にはDNS側の問題ってことですか?

その可能性が高いけど、スペルミスやキャッシュの影響も考えられる。まずは別のDNSサーバーで試すのがいい。
SERVFAILやREFUSEDの原因と解決策
SERVFAIL
やREFUSED
のエラーは、DNSサーバーが正しく応答できない場合に発生します。
SERVFAIL
(サーバー障害)- DNSサーバー自体の設定ミスや一時的な障害が原因
- 他のDNSサーバーで試してみる(Google DNS 8.8.8.8 など)
nslookup example.com 8.8.8.8
REFUSED
(クエリが拒否された)- 権限のないDNSサーバーに問い合わせた可能性
- ファイアウォールやアクセス制限の確認

SERVFAIL
って出る場合は、どうやって対処すればいいですか?

まずは、他のDNSサーバーで試すのが基本だ。もしそれでもダメなら、DNSサーバー側で設定ミスがないか確認する必要があるな。

じゃあ、REFUSED
はどういう時に出るんですか?

これは、問い合わせたDNSサーバーがアクセスを拒否しているケースが多い。ファイアウォールの設定やDNSの権限を見直してみるといい。

キャッシュDNSの影響を調べる方法
DNSのキャッシュが原因で古い情報が残っている場合、新しいレコードが反映されないことがあります。
キャッシュの影響を調べる方法として、以下の手順を試してみましょう。
1.異なるDNSサーバーを使って名前解決を試す
nslookup example.com 8.8.8.8
2.NSキャッシュをクリアする(Linux)
sudo systemctl restart systemd-resolved
3.WindowsでDNSキャッシュをクリアする
ipconfig /flushdns

サイトのDNSを変更したのに、なかなか反映されないんですが…

それはローカルのDNSキャッシュの影響かもしれないな。ipconfig /flushdns
でクリアしてみたか?

あ、それはまだです。じゃあ、DNSサーバーのキャッシュも影響するんですか?

もちろん。特にISPのDNSはキャッシュを長く保持することがあるから、Google DNSやCloudflare DNSで試すのも有効な方法だな。

まとめ
- DNSトラブルの基本は、エラーメッセージを確認し、原因を特定すること。
- ネットワークが正常かどうかをpingやtracerouteで確認する。
NXDOMAIN
はドメインの存在を確認し、別のDNSサーバーでも試す。SERVFAIL
やREFUSED
はDNSサーバー側の設定やアクセス権限をチェックする。- キャッシュの影響を考慮し、DNSキャッシュをクリアする方法も試す。
DNSのトラブルシューティングには、エラーの意味を理解し、適切な手順で調査することが重要です。
よくある質問(FAQ)
本セクションでは以下の内容について解説します。
nslookupで特定のサーバーに問い合わせる方法は?
特定のDNSサーバーに問い合わせるには、nslookup ドメイン名 DNSサーバーIP
の形式で実行します。
例えば、GoogleのパブリックDNS(8.8.8.8)を指定する場合は以下のように実行します。
nslookup example.com 8.8.8.8
出力例
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34

nslookupって、デフォルトでどのDNSサーバーを使うんですか?

基本的には、/etc/resolv.conf
に設定されているDNSサーバーが使われる。でも、特定のDNSサーバーを指定したいときは、IPアドレスをコマンドの最後に追加すればOK。

じゃあ、社内のDNSサーバーを使いたいときは?

例えば nslookup internal.example.com 192.168.1.1
って実行すれば、社内DNSサーバー(192.168.1.1)を指定してクエリを実行できる。
nslookupでタイムアウトが発生する原因は?
nslookupでタイムアウトが発生する原因の多くは、DNSサーバーが応答しないことです。
以下のような原因が考えられます。
- ネットワーク接続が切れている →
ping
やtraceroute
で接続確認 - 指定したDNSサーバーがダウンしている → 別のDNSサーバーを試す
- ファイアウォールでDNSクエリがブロックされている →
iptables
やufw
の設定を確認
タイムアウトの確認方法
nslookup example.com 8.8.8.8

nslookupでタイムアウトすることがあるんですが、どうしてですか?

一番多いのは、指定したDNSサーバーが応答していないケースだな。 まずは ping 8.8.8.8
や traceroute 8.8.8.8
で、ネットワークが正常か確認するといい。

もしネットワークが問題なかったら?

次に疑うのはファイアウォールの設定だ。iptables -L
や ufw status
でDNSクエリ(UDP 53番ポート)がブロックされていないかチェックしてみろ。

nslookupの結果が変わるのはなぜ?
nslookupの結果が異なる理由は、主に以下の3つです。
- 異なるDNSサーバーを使用している
- ISPのDNS、Google DNS、Cloudflare DNSなど、サーバーによって応答が違う
nslookup example.com 8.8.8.8
で特定のDNSサーバーを指定して確認
- DNSキャッシュの影響
- 一部のDNSサーバーはキャッシュを保持するため、変更がすぐに反映されない
ipconfig /flushdns
(Windows)やsudo systemctl restart systemd-resolved
(Linux)でキャッシュをクリア
- DNSラウンドロビンによる異なるIPの返答
- 負荷分散のため、異なるIPアドレスが返されることがある

同じドメインを調べても、nslookupの結果が変わることがあるんですが、なぜですか?

使っているDNSサーバーによって結果が違うことがある。 ISPのDNSとGoogle DNSでは異なる情報を持っていることもあるからな。

じゃあ、DNSサーバーを指定して試せば、統一した結果を確認できますか?

そうだな。たとえば nslookup example.com 8.8.8.8
でGoogle DNSの結果を確認すれば、一貫性がある情報を取得できる。

DNSキャッシュの影響もありますか?

もちろん。DNSサーバーやローカルPCのキャッシュが影響することがある。キャッシュをクリアして再試行すると、最新の情報が取得できる場合がある。

まとめ
- 特定のDNSサーバーに問い合わせるには
nslookup example.com 8.8.8.8
を使う。 - nslookupのタイムアウトは、ネットワーク接続やファイアウォール設定を確認する。
- IPv6アドレスを調べるには
-type=AAAA
を指定する。 - nslookupの結果が変わる理由は、DNSサーバーの違い・キャッシュの影響・DNSラウンドロビンの可能性がある。
nslookupコマンドを使って「消えたサブドメイン」の原因を特定した話
ある日、開発チームから「特定のサブドメインが急にアクセスできなくなった」という問い合わせを受けました。
サーバー自体は問題なく稼働しており、ドメイン設定を変更した形跡もありません。
nslookupを使って詳細に調査を進めたところ、意外な原因が判明しました。

nslookupで名前解決の状況を確認する
まず、該当のサブドメインが正常に名前解決できているかどうかを確認するために、nslookupを実行しました。
nslookup sub.example.com

先輩、昨日まで動いていたsub.example.com
にアクセスできなくなりました。サーバーは正常に稼働しているのですが…。

まずは、ドメインの名前解決が正常に動作しているか確認しましょう。nslookupで直接問い合わせてみます。
出力結果
Server: 192.168.1.1
Address: 192.168.1.1#53
** server can't find sub.example.com: NXDOMAIN

NXDOMAIN
? つまり、このサブドメインが存在しないということですか?

その通り。DNSサーバーがこのドメインを認識していないみたいですね。ただ、まだ原因は特定できていません。他のDNSサーバーにも問い合わせてみましょう。
異なるDNSサーバーで調査を行う
ローカルのDNSサーバーで名前解決できなかったため、GoogleのパブリックDNS(8.8.8.8)を指定してnslookupを実行しました。
nslookup sub.example.com 8.8.8.8
出力結果
Server: 8.8.8.8
Address: 8.8.8.8#53
Name: sub.example.com
Address: 203.0.113.XX

あれ? GoogleのDNSではちゃんと解決できますね。

つまり、ローカルのDNSサーバーがこのサブドメインの最新情報を取得できていない可能性が高いですね。

ということは、キャッシュの問題ですか?

その可能性が高いですね。ローカルのDNSキャッシュが古い情報を持っているため、変更が反映されていない可能性があります。
DNSキャッシュをクリアして最新情報を取得
ローカルのDNSサーバーが古いキャッシュを保持している可能性があるため、キャッシュをクリアして最新情報を取得することにしました。
sudo systemctl restart systemd-resolved # LinuxのDNSキャッシュをクリア
Windows環境では以下のコマンドを実行します。
ipconfig /flushdns

DNSキャッシュをクリアしたら、名前解決できるようになりました!

そうですね。ローカルのDNSサーバーが古いキャッシュを保持していたため、最新のレコードが取得できなかったのが原因でした。
ルートネームサーバーの情報を直接確認
念のため、ルートネームサーバーを使ってNS
レコード(ネームサーバーの情報)を直接問い合わせることで、設定が正しく伝播されているか確認しました。
nslookup -type=NS example.com
出力結果
Server: 8.8.8.8
Address: 8.8.8.8#53
example.com nameserver = ns1.dnsprovider.com.
example.com nameserver = ns2.dnsprovider.com.

NS
レコードを確認すると、ネームサーバーは問題なく設定されていますね。

そうですね。DNSサーバー自体の設定に問題はなく、単にローカルのDNSキャッシュが更新されていなかっただけだったようです。

まとめ
- nslookupを使えば、特定のドメインが名前解決できるかすぐに確認できる。
- 異なるDNSサーバーを指定して名前解決を試すことで、ローカルキャッシュの問題かどうかを切り分けられる。
- ローカルのDNSキャッシュが古いと、最新の情報が反映されず、アクセスできないことがある。
- キャッシュをクリアすることで、最新のDNSレコードを取得できるようになる。

ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。