nslookup コマンド:使い方とオプション、レコードの照会と DNS サーバーの指定

テスト環境RHEL系AlmaLinux 9.8nslookup 9.16rootアカウントDebian 12 一般ユーザー
ネットワークコマンドnslookup場所/usr/bin/nslookup

nslookupコマンドは、ドメイン名をDNSサーバーに問い合わせて、IPアドレスやMX、NS、TXTなどのDNSレコードを受け取る照会コマンドです。AlmaLinux 9サーバーでexample.comのレコードを種類別に照会し、問い合わせるDNSサーバーを変えてみたところ、同じドメインでもどのサーバーに聞くかによって、応答冒頭のNon-authoritative answer行が消えたり、ANY照会の結果が変わったりしました。

以下の出力は、AlmaLinux 9.8サーバーのrootアカウントで実行した結果です。サーバーに設定されたDNSサーバーのアドレスは例の値192.0.2.53に、パッケージのバージョン番号も例の値に置き換えています。

1️⃣ nslookupコマンドの使い方

基本の形は[nslookup -オプション 名前 DNSサーバー]の順で、オプションとDNSサーバーは省略できます。名前だけを書くと、サーバーに設定されたDNSサーバーにその名前のアドレスを問い合わせます。

nslookup example.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
Name:	example.com
Address: 172.66.147.243
Name:	example.com
Address: 104.20.23.154
Name:	example.com
Address: 2606:4700:10::6814:179a
Name:	example.com
Address: 2606:4700:10::ac42:93f3

一番上のServerとAddressの2行は問い合わせを受けたDNSサーバーで、末尾の#53はDNSのポート番号です。レコードの種類を指定しないとAレコード(IPv4)とAAAAレコード(IPv6)を順に照会するため、IPv4アドレス2つの後にIPv6アドレス2つが続きました。

Non-authoritative answerは、example.comのレコードを直接管理するサーバーではなく、その値をキャッシュに持っているDNSサーバーが応答したという意味です。そのため、レコードを変更した直後は実際の値と異なることがあります。

2️⃣ nslookupのオプション

オプションは名前の前にハイフンを付けて書きます。

-typeは-queryや-qと短く書いても同じオプションです。-q=mxで8.8.8.8に問い合わせると、-type=mxと同じメールサーバーの1行が出ました。

nslookup -q=mx google.com 8.8.8.8
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
google.com	mail exchanger = 10 smtp.google.com.

Authoritative answers can be found from:

-timeoutと-retryは、応答しないDNSサーバーをどれだけ待つかを決めます。192.0.2.1は文書の例示用アドレスなので、応答するサーバーがありません。

nslookup -timeout=2 -retry=1 example.com 192.0.2.1
;; connection timed out; no servers could be reached

-timeout=2 -retry=1で実行すると、2秒後に[connection timed out]の行を出力して終わりました。-retry=2にすると4秒、オプションを付けないときは15秒かかりました。スクリプトが応答しないサーバーのために長く止まらないようにするには、2つの値を小さくしておきます。

-debugを付けると、応答パケットの質問と回答のセクションをそのまま出力します。

nslookup -debug example.com 8.8.8.8
Server:		8.8.8.8
Address:	8.8.8.8#53

------------
    QUESTIONS:
	example.com, type = A, class = IN
    ANSWERS:
    ->  example.com
	internet address = 104.20.23.154
	ttl = 300
    ->  example.com
	internet address = 172.66.147.243
	ttl = 300
    AUTHORITY RECORDS:
    ADDITIONAL RECORDS:
------------
Non-authoritative answer:
Name:	example.com
Address: 104.20.23.154
Name:	example.com
Address: 172.66.147.243
------------
    QUESTIONS:
	example.com, type = AAAA, class = IN
    ANSWERS:
    ->  example.com
	has AAAA address 2606:4700:10::6814:179a
	ttl = 300
    ->  example.com
	has AAAA address 2606:4700:10::ac42:93f3
	ttl = 300
    AUTHORITY RECORDS:
    ADDITIONAL RECORDS:
------------
Name:	example.com
Address: 2606:4700:10::6814:179a
Name:	example.com
Address: 2606:4700:10::ac42:93f3

基本の出力にはないttl = 300がレコードごとに付きました。この応答を受けたDNSサーバーが、そのレコードを最大300秒までキャッシュに置けるという値です。

-norecurseは、DNSサーバーに他のサーバーを経由して探さず、持っている値だけを返すよう求めます。同じ8.8.8.8にオプションなしで問い合わせたときはアドレスが4つ出ましたが、-norecurseを付けると[SERVFAIL]で終わりました。

nslookup -norecurse example.com 8.8.8.8
Server:		8.8.8.8
Address:	8.8.8.8#53

** server can't find example.com: SERVFAIL
オプションコピー説明
-type=照会するレコードの種類を指定、省略するとAの次にAAAA
-q=-typeと同じオプション、照会するレコードの種類を指定
-timeout=最初の問い合わせの応答待ち時間(秒)
-retry=応答がないときに問い合わせを送る回数
-debug応答パケットの質問と回答、TTLまで出力
-norecurse他のサーバーを経由せず、そのサーバーが持つ値だけを要求
オプションコピー説明
-query=-typeと同じオプション、照会するレコードの種類を指定
-port=問い合わせるポートを指定、既定は53
-versionバージョンを出力して終了

3️⃣ nslookupでのレコード照会(MX、NS、TXT、SOA)

-type=の後にレコードの種類を書くと、そのレコードだけを照会します。値は大文字でも小文字でも構いません。

-type=の値含まれる情報
A · AAAAIPv4アドレス・IPv6アドレス
MXメールを受け取るサーバーと優先度
NSドメインのレコードを管理するネームサーバー
TXTSPFなどの文字の値
SOAゾーンのプライマリネームサーバー・管理者メール・シリアル番号・更新間隔
CNAME別の名前につなぐエイリアス
PTRIPアドレスに結び付いたホスト名(逆引き)
ANYその名前のレコードをまとめて要求

メールサーバーはMXレコードで確認します。

nslookup -type=mx google.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
google.com	mail exchanger = 10 smtp.google.com.

Authoritative answers can be found from:

mail exchangerの後の10は優先度です。メールサーバーが複数あると、送る側は数字の小さいサーバーから配送を試みます。example.comに同じ照会をすると[mail exchanger = 0 .]が出ました。ドット1つだけのMXは、このドメインがメールを受け取らないという意味です。

MX照会の最後に付いた[Authoritative answers can be found from:]は、応答に一緒に含まれてきた権威ネームサーバーの情報をその下に続けて表示する見出し行です。この記事のMX、NS、TXTの照会では応答にその情報がなく、見出し行の下は空でした。

NSレコードには、ドメインのレコードを直接管理するネームサーバーが入っています。

nslookup -type=ns example.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
example.com	nameserver = hera.ns.cloudflare.com.
example.com	nameserver = elliott.ns.cloudflare.com.

Authoritative answers can be found from:

example.comのネームサーバーは2つでした。この2つのサーバーがexample.comの権威ネームサーバーです。

TXTレコードには、決まった形式なしに文字の値を入れられます。

nslookup -type=txt example.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
example.com	text = "_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"
example.com	text = "v=spf1 -all"

Authoritative answers can be found from:

v=spf1 -allは、このドメイン名でメールを送れるサーバーはないというSPFの値です。1つのドメインにTXTレコードが複数あると、このように1行に1つずつ出ます。

SOAレコードには、そのゾーンの基本情報が入っています。

nslookup -type=soa example.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
example.com
	origin = elliott.ns.cloudflare.com
	mail addr = dns.cloudflare.com
	serial = 2418004112
	refresh = 10000
	retry = 2400
	expire = 604800
	minimum = 1800

Authoritative answers can be found from:

originはプライマリネームサーバーで、mail addrは管理者のメールアドレスの@をドットに置き換えて書いた値です。serialはレコードを変更するたびに上がるシリアル番号で、refresh、retry、expireはセカンダリネームサーバーがプライマリサーバーとレコードを合わせるときに使う時間の値(秒)です。minimumは、存在しないレコードへの応答をキャッシュに置く時間です。

エイリアスはCNAMEレコードで確認します。www.github.comを照会すると、github.comのエイリアスだという1行が出ました。

nslookup -type=cname www.github.com
Server:		192.0.2.53
Address:	192.0.2.53#53

www.github.com	canonical name = github.com.

-type=anyは、その名前のレコードをまとめて要求します。サーバーに設定されたDNSサーバーに問い合わせると、A、AAAA、MX、NSレコードが一度に出ました。

nslookup -type=any example.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
Name:	example.com
Address: 172.66.147.243
Name:	example.com
Address: 104.20.23.154
Name:	example.com
Address: 2606:4700:10::6814:179a
Name:	example.com
Address: 2606:4700:10::ac42:93f3
example.com	mail exchanger = 0 .
example.com	nameserver = hera.ns.cloudflare.com.
example.com	nameserver = elliott.ns.cloudflare.com.

Authoritative answers can be found from:

同じ照会を8.8.8.8に送ると、[hinfo = “RFC8482”]の1行と署名の行だけが返ってきました。

nslookup -type=any example.com 8.8.8.8
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
example.com	hinfo = "RFC8482" ""
example.com	rdata_46 = HINFO 13 2 3600 20261029212708 20261027192708 34505 example.com. 2YBHcD7GmqHiW6E7e8Lx3z/gPoCsLbYw/Uegjy801hQ+4fYp5U7wKqc2 NXOONd8WS0xjgzfW5Dn0akDqdjltOw==

Authoritative answers can be found from:

RFC 8482は、ANY問い合わせにすべてのレコードの代わりに短い応答を返せるように定めた文書です。そのため、必要なレコードは種類を1つずつ指定して照会します。

4️⃣ nslookupでのDNSサーバー指定

名前の後にDNSサーバーを書くと、サーバーに設定されたDNSサーバーの代わりにそのサーバーに問い合わせます。

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: 104.20.23.154
Name:	example.com
Address: 172.66.147.243
Name:	example.com
Address: 2606:4700:10::6814:179a
Name:	example.com
Address: 2606:4700:10::ac42:93f3

Server行が8.8.8.8に変わり、4つのアドレスはサーバーに設定されたDNSサーバーの応答と同じでした。ネームサーバーを変更した後、公開DNSサーバーごとに新しい値が広まったかを確かめるときにこの形を使います。

NS照会で出たネームサーバーをDNSサーバーに指定すると、権威サーバーに直接問い合わせることになります。

nslookup example.com elliott.ns.cloudflare.com
Server:		elliott.ns.cloudflare.com
Address:	2606:4700:58::a29f:2ce4#53

Name:	example.com
Address: 104.20.23.154
Name:	example.com
Address: 172.66.147.243
Name:	example.com
Address: 2606:4700:10::6814:179a
Name:	example.com
Address: 2606:4700:10::ac42:93f3

今回はNon-authoritative answer行が消えました。レコードを管理するサーバーが直接答えた値なので、キャッシュを通っていない今の値です。Server行のすぐ下のAddressには、このネームサーバーのIPv6アドレスが出ました。

存在しない名前を照会すると[NXDOMAIN]が出ます。.invalidは実際には使わないよう予約されたトップレベルドメインなので、名前がないという応答が返ってきました。

nslookup example.invalid
Server:		192.0.2.53
Address:	192.0.2.53#53

** server can't find example.invalid: NXDOMAIN

一方、no-such-host.example.comはNXDOMAINではなく[No answer]で終わりました。問い合わせたレコードが応答になかったという意味で、名前そのものがないNXDOMAINとは別の結果です。

nslookup no-such-host.example.com
Server:		192.0.2.53
Address:	192.0.2.53#53

Non-authoritative answer:
*** Can't find no-such-host.example.com: No answer

5️⃣ nslookupの逆引き

名前の代わりにIPアドレスを書くと、PTRレコードを照会してそのアドレスに結び付いたホスト名を探します。

nslookup 8.8.8.8
8.8.8.8.in-addr.arpa	name = dns.google.

Authoritative answers can be found from:

8.8.8.8.in-addr.arpaは、IPv4アドレスを逆順に書いてin-addr.arpaを付けた名前です。この名前のPTRレコードの値dns.google.が8.8.8.8のホスト名です。

逆引きでは一番上のServerの2行が出ませんでした。Debian 12サーバーのnslookup 9.18で同じアドレスを照会したときも同じ形でした。

6️⃣ nslookupの対話モード

nslookupを引数なしで実行すると、> プロンプトが出る対話モードに入ります。複数の名前やレコードの種類を続けて照会するとき、コマンドを最初から書き直さずに済みます。

nslookup
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> set type=mx
> google.com
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
google.com	mail exchanger = 10 smtp.google.com.

Authoritative answers can be found from:
> set type=txt
> example.com
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
example.com	text = "_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"
example.com	text = "v=spf1 -all"

Authoritative answers can be found from:
> exit

serverで問い合わせるDNSサーバーを変え、set type=でレコードの種類を決めると、その後は名前だけを書いてもその設定で照会します。exitを入力するとシェルに戻ります。

set allは今の設定値をすべて出力します。

nslookup
> set type=txt
> set all
Default server: 192.0.2.53
Address: 192.0.2.53#53

Set options:
  novc			nodebug		nod2
  search		recurse
  timeout = 0		retry = 3	port = 53	ndots = 1
  querytype = txt     	class = IN
  srchlist = example.internal
> exit

querytypeが、前で決めたtxtに変わっていました。retry = 3とport = 53は、特に変えていない既定値です。

7️⃣ Linuxへのnslookupのインストールとdig・hostの比較

Linuxでnslookupを実行して[command not found]が出たら、BINDツールのパッケージをインストールします。AlmaLinuxサーバーのnslookupはbind-utilsパッケージに入っていました。

rpm -qf /usr/bin/nslookup
bind-utils-9.16.20-30.el9_8.2.x86_64

Debian 12サーバーではbind9-dnsutilsパッケージでした。以前の名前dnsutilsは、bind9-dnsutilsをインストールする移行用パッケージとして残っていました。

dpkg -S /usr/bin/nslookup
bind9-dnsutils: /usr/bin/nslookup

RHEL系では、以下のコマンドでbind-utilsパッケージをインストールします。

dnf install bind-utils

Debian系では、bind9-dnsutilsパッケージをインストールします。

apt install bind9-dnsutils

同じパッケージにdigとhostも入っています。3つのコマンドはどれもDNSを照会しますが、出力の形が違います。

コマンド出力使いどころ
nslookupServer行+応答・対話モード複数の名前やレコードを続けて照会
dig応答パケットのセクション全体、+shortなら値だけスクリプトで値だけを取り出すとき
hostレコードごとに1行の文A・AAAA・MXを一度に確認
host example.com
example.com has address 172.66.147.243
example.com has address 104.20.23.154
example.com has IPv6 address 2606:4700:10::6814:179a
example.com has IPv6 address 2606:4700:10::ac42:93f3
example.com mail is handled by 0 .

hostはオプションなしでもA、AAAA、MXレコードを一度に照会し、1行ずつ文で出力しました。digに+shortを付けるとIPアドレスだけが残ります。

dig +short example.com
104.20.23.154
172.66.147.243

スクリプトで値だけを取り出すならdig +shortが扱いやすく、複数の名前を続けて確かめるならnslookupの対話モードが便利です。

🌏 ここまで読んだ方へ
コマンドなしで同じ情報を見る方法
nslookupで確かめたネームサーバーとレコードは、ウェブでもそのまま照会できます。Whoisドメイン検索は、これにwhoisコマンドの登録情報と有効期限までまとめて1つの画面に表示します。
初心者 ターミナルやCMDを開かずに、ドメインを入れるだけです。レジストラ、登録日、有効期限、状態が整理されて表示され、期限までの残り日数も一緒に出ます。
上級者 Whoisに登録されたネームサーバーと実際のDNS応答を並べて比べ、A、AAAA、NS、MX、TXTレコードとTTL、Whoisの原文まで確認できます。
ドメイン検索を開く

🔲 nslookupコマンドシミュレーター

以下のシミュレーターで、レコードの種類やDNSサーバーを変えながらnslookupを直接入力してみることができます。

nslookupコマンドシミュレーターnslookup 9.16
[root@server work]#
ブラウザーの中だけで動き、応答は実際に照会した値を入れた仮想 DNS から返り、↑↓ で前に入力したコマンドを呼び出せます。

🔢 FAQ & おすすめコンテンツ

Windowsのnslookupも、第1引数が照会する名前、第2引数がDNSサーバーです。引数なしで実行すると> プロンプトの対話モードに入ります。Windowsの出力の文言はLinuxと異なる場合があります。

nslookupは照会が1つでも失敗すると終了コード1で終わります。NXDOMAINが出たexample.invalidの照会の後に終了コードを出力すると1が出て、example.comの照会の後は0でした。

-type=aaaaを付けるとAAAAレコードだけを照会します。example.comに実行すると、IPv4アドレスなしでIPv6アドレス2つだけが出ました。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 4   +   4   =