ネットワーク管理者として、nslookup
コマンドは最も必要なツールの一つであることがわかるでしょう。nslookupを使用すると、DNSサーバーや特定のDNSレコードの問題をトラブルシューティングするためにDNSレコードをチェックすることができます。この記事では、nslookup を詳しく見て、その使い方の実用的な例をいくつか紹介します。
nslookup とは何か?
nslookup は “ネームサーバー検索” の略です。nslookup コマンドラインツールはドメインネームシステム (DNS) に問い合わせ、 ドメイン名や IP アドレスのマッピング、その他の DNS レコードを取得するために使われます。シンプルでありながら強力であり、DNS レコードの詳細情報を調べるために使用することができます。
なぜ nslookup を使うのか?
nslookup コマンドは非常に強力な DNS クエリツールです。DNS の問題のトラブルシューティングに使ったり、単に DNS レコードの情報を取得するために使ったりできます。たとえば、nslookupを使用して、WebサイトのIPアドレスを調べたり、ドメインのDNSレコードを調べたりすることができます。
ということで、nslookup のインストール方法と使用方法を詳しく見ていきましょう。Linux での nslookup のインストール
ほとんどのLinuxディストリビューションでは、nslookupは bind-utils
パッケージに含まれています。
sudo apt install dnsutils-y
Centos/RHEL/Fedoraでは、yumパッケージマネージャを使用することができます。
sudo yum install bind-utils -y
ArchLinux では
pacman -Sy dnsutils
簡単なクエリを実行する
nslookup コマンドの一般的なシンタックスは以下の通りです。
nslookup <ドメイン名><オプション
nslookup は問い合わせたいドメイン名であり、
nslookup google.com
このコマンドは指定されたドメイン名に対するすべてのDNSレコードを返します。
出力を理解する
オプションを指定せずにnslookupコマンドを実行すると、デフォルトで多くの情報が返されます。この出力が何を意味するのか、もう少し詳しく見てみましょう。
最初に表示されるのは、nslookupが使用しているサーバー
とアドレス
です。デフォルトでは、nslookupはあなたのシステムで設定されているDNSサーバーを使用します。ほとんどの場合、これはあなたのISPのDNSサーバーになります。
サーバー情報の後に、Non-authoritative answer
の行が表示されます。この行は、nslookupが受け取った回答が、そのドメインの権威あるDNSサーバーからのものではないことを示しています。この回答は、nslookupが問い合わせたローカルサーバーからキャッシュされ、転送されたものです。
注意:もし結果が出ない場合は、システムのDNSキャッシュをフラッシュする必要があるかもしれません。もし “/etc/hosts” ファイルを編集しているなら、それは nslookup の結果にも影響を与えるかもしれません。
特定の DNS サーバーを利用する
特定の DNS サーバーを使うことは、特定の DNS サーバーに関連する DNS の問題をトラブルシューティングする場合に便利です。あるいは、プライベートな DNS サーバーを使用しているネットワーク上で、ISP の DNS サーバーではなく、そのサーバーを使用して問い合わせをしたい場合などです。
nslookupで特定のDNSサーバーを使用するには、照会するドメイン名の後にDNSサーバーを指定する必要があります。例えば、Google DNS サーバー (8.8.8.8) を使用して superuser.com の DNS レコードを照会するには、次のコマンドを実行します。nslookup superuser.com 8.8.8.8
Google DNS サーバーは高速で信頼性が高いのでおすすめですが、どの DNS サーバーを使ってもかまいません。
今回、Google DNS サーバーから DNS レコードを取得しました。superuser.com は 4 つの異なる DNS サーバーを使ってトラフィックを処理しているので、2 つの代わりに 4 つの A レコードを取得しています。 これと同じ手法で、任意のDNSサーバーに問い合わせることができます。ドメイン名の後に、DNSサーバーのIPアドレスを指定します。レコードタイプの指定
デフォルトでは、nslookupはドメインに対するすべてのA DNSレコードを返します。しかし、特定のレコードタイプのみを照会したい場合はどうしたらよいでしょうか。
たとえば、Webサイトにアクセスしようとしているのに、DNSサーバーがそのドメインのAレコードを見つけられないというエラーが発生するとします。この場合、nslookupを使用してAレコードを照会し、それが正しいIPアドレスを返しているかどうかを確認することができます。特定のDNSレコードタイプを問い合わせるには、 -type
オプションを使用します。このオプションは1つの引数を取り、それが問い合わせたいレコードのタイプになります。最も一般的なDNSレコードのタイプは以下のとおりです。
-
A: アドレスレコード - IPv4アドレスにドメイン名をマッピングします。
-
AAAA。IPv6アドレスレコード - IPv6アドレスにドメイン名をマッピングします。
-
CNAME。CNAME: Canonical Name Record - エイリアスを実際のドメイン名にマッピングし、FPTまたはNginx Webサーバーを実行するときに便利です。
-
MX。MX: Mail Exchange Record - ドメイン名を電子メールサーバーにマッピングし、電子メールが正しく設定されているかどうかを確認するのに役立ちます。
-
NS: Name Server Record - ドメイン名をDNSサーバーにマッピングし、どのDNSサーバーがドメインに責任を持ち、どこでそのドメインのDNSレコードを見つけるかを指定します。
-
TXT。テキストレコード - ドメインのテキスト情報を保存し、SPFレコードなどを保存して、スパムやフィッシング攻撃から電子メールを安全に保護するために使用することができます。
特定のレコードタイプを問い合わせるには、次の構文を使用します。
nslookup <ドメイン> set type=
例えば、superuser.comの CNAME
レコードを問い合わせるには、以下のコマンドを実行します。
nslookup superuser.com -type=cname
google.comのMX
レコードを問い合わせるには、以下のコマンドを実行します。
nslookup google.com -type=mx
同様に、他のDNSレコードタイプも問い合わせることができます - コマンドで正しいレコードタイプを使用することだけを確認してください。
全てのDNSレコードタイプを問い合わせる
もし、あるドメインのすべてのDNSレコードタイプを問い合わせたい場合は、 -type=any
オプションを使用する必要があります。これは、A、AAAA、CNAME、MXなどを含む、ドメインのすべてのレコードタイプを返します。
nslookup -type=any superuser.com
以下のように、このコマンドはgoogle.comのすべてのDNSレコードを返します。
DNS逆引きの実行
ドメインに関する情報をDNSサーバーに問い合わせることに加えて、nslookupを使用してIPアドレスに関する情報をDNSサーバーに問い合わせることができます。これは、DNSの逆引きと呼ばれます。
あるサーバーのIPアドレスを持っていて、そのサーバーのホスト名を見つけたいとします。DNSの逆引きは、それを行うのに役立ちます。DNSの逆引きを行うには、nslookup
コマンドの後に、調べたいIPアドレスを指定して実行します。
nslookup 142.250.204.46
これはIPアドレス142.250.204.46を持つサーバーのホスト名を返します。
デバッグモードの有効化
上級ユーザーはDNSクエリに関するより多くの情報を得るために、nslookupのデバッグモードを有効にすることができます。このモードは、DNSの問題をトラブルシューティングしているときに、舞台裏で何が起こっているかを確認したい場合に便利です。
デバッグモードを有効にするには、-debug
オプションを使用します。例えば、google.comのAレコードを照会し、デバッグモードを有効にするには、次のコマンドを実行します。
nslookup -debug google.com
このコマンドは、DNSクエリに関する多くの情報を返します。この情報はDNSの問題をトラブルシュートしようとするときに役に立ちます。
出力のファイルへのログ記録
nslookupの出力をファイルに記録すると便利なことがあります。このファイルを保存して、同僚のシステム管理者と共有することで、DNSの問題のトラブルシューティングを支援することができます。
nslookup の出力をファイルに保存するには、次の構文を使用します。nslookup <ドメイン> > /path/to/file
例えば、google.comのすべてのA DNSレコードを照会して、出力を「google_dns_records.txt」というファイルに保存するには、次のコマンドを実行します。コマンドの出力をファイルにリダイレクトするには、>
シンボルを使用します。
nslookup -debug google.com > google_dns_records.txt
以下の ls -la
コマンドを実行して、ログファイルが作成されたことを確認します。
ls -la google_dns_records.txt
以下のように、ファイルが正常に作成されていることが確認できます。
ファイルの内容を表示するには、以下の cat
コマンドを実行します。
cat google_dns_records.txt
以下のように、ログファイルにはgoogle.comのすべてのDNSレコードが含まれています。
インタラクティブモードの使用
この記事を通して、非対話モードで DNS サーバーに問い合わせるために、異なるオプションを持つ nslookup コマンドを使用してきました。
非対話型モードに加えて、nslookupには対話型モードもある。対話型モードでは、毎回 nslookup コマンド全体を入力しなくても、 DNS サーバーに問い合わせるために異なるコマンドを発行することができる。 一般的に、数回のDNSクエリーを発行するのであれば、非対話型モードが適しています。しかし、多くのDNSクエリーを発行する場合や、異なるnslookupオプションを実験したい場合は、対話型モードの方がより便利で論理的である場合がある。 インタラクティブモードに移行するには、以下のコマンドを実行します。nslookup
プロンプトが以下のように >
に変わります。これは、インタラクティブモードに入ったことを示します。
このチュートリアルで取り上げたすべての nslookup コマンドを、毎回 nslookup
と入力することなく実行することができます。
対話型モードを終了するには、exit
コマンドを実行します。
nslookup vs. dig
nslookup と dig はどちらも DNS サーバーに問い合わせるための素晴らしいツールです。一般的に、どちらのツールも同じ結果を得ることができます。両方のツールを使ってクエリを実行し、その結果を比較することができます。これは、クエリの結果をクロスチェックするための素晴らしい方法です。
もし、どちらかのツールを選ばなければならない場合、nslookupは古いので、digを使うことをお勧めします。nslookupは1980年代初頭にリリースされましたが、開発者によってほとんど放棄されています。対照的に、digはまだ活発に開発されており、nslookupよりもdigの方が新機能やバグフィックスを見つけられる可能性が高いのです。注:“No Route to Host “接続エラーが表示される場合は、こちらで修正しています。
よくある質問
nslookup は DNS ですか?
いいえ。nslookupはドメインネームシステム(DNS)を照会するための ネットワーク管理ツールで、動作するにはDNSサーバーが動作している必要が あります。ただし、nslookupはDNS情報のソースとして「/etc/hosts」と呼ばれるファイルを使用することも可能です。
Linux で DNS の設定を確認するにはどうしたらいいですか?
Linuxでは”/etc/resolv.conf “というファイルがDNSの設定を保存しています。このファイルの内容を見るには、cat
コマンドを使用します。
nslookup を使用する際に “Can’t find server name…” というエラーに遭遇しました。どうすれば直せますか?
これは、nslookupの既知のバグです。回避策としては、ローカルの DNS サーバーを使用してクエリを実行することです。nslookup google.com` としてコマンドからカスタムDNSサーバーのIPアドレスパラメータを省略すれば、うまくいくはずです。
画像引用:Unsplash. すべてのスクリーンショットはNicholas Xuan Nguyenによるものです。