Linux で dig と nslookup を使って DNS レコードをクエリする

CompTIABeginner
オンラインで実践に進む

はじめに

このラボでは、Linux 環境のコマンドラインからドメインネームシステム(DNS)レコードをクエリする基本を学びます。dignslookup という、強力で一般的な 2 つのユーティリティを使用して、さまざまな種類の DNS ルックアップを実行します。この実践的な経験は、ネットワーク管理者やシステムエンジニアが名前解決の問題をトラブルシューティングし、ネットワーク構成を理解するために不可欠です。

まず、/etc/resolv.conf ファイルを調べることで、お使いのシステムのデフォルト DNS サーバーを特定します。次に、ドメインの IP アドレス(A レコード)の検索、IP アドレスからホスト名を特定する逆引き(PTR レコード)、ドメインのメール交換(MX)レコードの検索など、いくつかの一般的な DNS クエリを実行します。最後に、システムのデフォルトを使用するのではなく、特定のパブリック DNS サーバーにクエリを向ける方法を学びます。

cat コマンドでシステムのデフォルト DNS サーバーを特定する

このステップでは、システムが使用するように構成されているデフォルトの DNS サーバーを特定する方法を学びます。DNS(ドメインネームシステム)サーバーは、人間が読めるドメイン名(www.google.com など)を、機械が読める IP アドレス(142.250.186.132 など)に変換する役割を担っています。どの DNS サーバーがデフォルトでシステムによってクエリされるかを理解することは、名前解決の問題を診断する上で最初かつ最も重要なステップです。

ほとんどの Linux システムでは、この設定は /etc/resolv.conf にあるファイルに保存されています。ここでは、ファイルのコンテンツを表示するための標準的なユーティリティである cat コマンドを使用します。

ターミナルを開き、次のコマンドを実行して resolv.conf ファイルの内容を表示します。

cat /etc/resolv.conf

以下のような出力が表示されます。nameserver ディレクティブの後にリストされている IP アドレスは、システムがドメイン名を解決するために連絡する DNS サーバーです。

## Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
##     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
## 127.0.0.53 is the systemd-resolved stub resolver.
## run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
options timeout:2 attempts:3 rotate single-request-reopen

出力から、このシステムでは 127.0.0.53 がプライマリ DNS サーバーであることがわかります。特定のサーバーを指定せずに実行する DNS クエリは、デフォルトでここに送信されます。デフォルトの DNS サーバーを見つける方法がわかったので、次のステップで最初の DNS クエリを実行する準備ができました。

dignslookup でドメインの IP アドレス(A レコード)を検索する

このステップでは、ドメイン名を IP アドレスに解決するプロセスである標準的なフォワード DNS ルックアップを実行します。これは DNS の最も一般的な機能の 1 つです。ドメイン名を IPv4 アドレスにマッピングする特定のレコードタイプは、A レコードと呼ばれます。このタスクには、nslookupdig という 2 つの一般的なコマンドラインツールを使用します。

まず、これらのツールがインストールされていることを確認する必要があります。これらは、Ubuntu のような Debian ベースのシステムでは dnsutils パッケージの一部です。パッケージリストを更新してインストールしましょう。

sudo apt-get update
sudo apt-get install -y dnsutils

ツールが準備できたので、nslookup("name server lookup" の略)を使用して www.google.com の IP アドレスを見つけましょう。

nslookup www.google.com

出力には、クエリに応答したサーバー(ステップ 1 のデフォルト)と、www.google.com に関連付けられた IP アドレスを含む「非権威応答(Non-authoritative answer)」が表示されます。

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   www.google.com
Address: 142.250.189.196
Name:   www.google.com
Address: 2607:f8b0:4005:80d::2004

次に、dig(Domain Information Groper)を使用して同じクエリを実行しましょう。dig は、より詳細で構造化された出力を提供するため、システム管理者によく利用されます。

dig www.google.com

dig からの出力を確認します。これはセクションに分かれています。QUESTION SECTION は、要求した内容(www.google.comA レコード)を示します。ANSWER SECTION は、IP アドレスと TTL(Time To Live)値を含む結果を提供します。TTL は、リゾルバーがこの情報をキャッシュできる期間を示します。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5247
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         7       IN      A       142.251.46.196

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:55:18 CST 2025
;; MSG SIZE  rcvd: 59

両方の出力を比較すると、どちらのツールも同じ目標を達成していますが、dig は DNS 応答のより包括的なビューを提供していることがわかります。

dig -xで IP アドレスからホスト名を検索する(PTR レコード)

このステップでは、リバース DNS ルックアップを実行します。フォワードルックアップがドメイン名を IP アドレスに解決するのに対し、リバースルックアップはその逆を行い、指定された IP アドレスに関連付けられたホスト名を見つけます。このプロセスは、PTR(Pointer)レコードと呼ばれる特別なタイプの DNS レコードに依存します。リバースルックアップは、メールサーバーが送信者の身元を確認するためや、ネットワークトラブルシューティングでトラフィックのソースを特定するために一般的に使用されます。

前のステップで発見した www.google.com の IP アドレスのいずれかを使用します。例として 142.251.46.196 を使用しましょう。

まず、すでに慣れている nslookup でリバースルックアップを試してみましょう。引数として IP アドレスを指定するだけです。

nslookup 142.251.46.196

出力には、IP アドレスに関連付けられた name が表示されます。これは、リバース DNS に使用される特別な in-addr.arpa ドメインに格納されています。

196.46.251.142.in-addr.arpa     name = nuq04s45-in-f4.1e100.net.

Authoritative answers can be found from:

次に、dig を使用して同じリバースルックアップを実行しましょう。dig コマンドは -x オプションを使用してリバースルックアップを指定します。これは、クエリを正しくフォーマットしてくれる便利なショートカットです。

dig -x 142.251.46.196

出力を観察します。ANSWER SECTION には、IP アドレスをホスト名にマッピングする PTR レコードが見つかります。QUESTION SECTION には、IP アドレスが逆順になり .in-addr.arpa が追加されている様子が表示されます。これは IPv4 リバース DNS クエリの標準的な形式です。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> -x 142.251.46.196
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46896
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;196.46.251.142.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
196.46.251.142.in-addr.arpa. 10 IN      PTR     nuq04s45-in-f4.1e100.net.

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:56:11 CST 2025
;; MSG SIZE  rcvd: 94

これで、nslookupdig の両方を使用してリバース DNS ルックアップを正常に実行し、IP アドレスをホスト名に変換することができました。

dig でドメインのメール交換(MX)レコードを検索する

このステップでは、別の重要な DNS レコードタイプであるメール交換(MX)レコードをクエリする方法を学びます。MX レコードは、メール配信に不可欠です。ドメインに代わってメールメッセージを受け入れる責任を持つメールサーバーを指定します。user@example.com にメールを送信すると、メールサーバーはまず example.comMX レコードの DNS ルックアップを実行して、メッセージをどこに送信すべきかを見つけます。

前のステップで学習した dig コマンドを使用して、google.com ドメインの MX レコードを検索し続けます。これを行うには、ドメイン名の後にレコードタイプ(MX)を指定します。

ターミナルで、次のコマンドを実行します。

dig google.com MX

出力は以前見たものと似ていますが、ANSWER SECTION には A レコードの代わりに MX レコードが含まれます。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> google.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45070
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.                    IN      MX

;; ANSWER SECTION:
google.com.             10      IN      MX      10 smtp.google.com.

;; Query time: 12 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:56:29 CST 2025
;; MSG SIZE  rcvd: 60

ANSWER SECTION のメールサーバーのホスト名の前の数字(10)に注目してください。これは優先度またはプライオリティ値です。メールサーバーは、最初に最も低い優先度番号を持つサーバーにメールを配信しようとします。そのサーバーが利用できない場合は、次に低いサーバーを試します。これにより、プライマリおよびバックアップメールサーバーのシステムが提供されます。

dig @<server>で特定のパブリック DNS サーバーに問い合わせる

この最後のステップでは、システムのデフォルト DNS サーバーをバイパスし、特定のパブリック DNS サーバーに直接クエリを送信する方法を学びます。これはトラブルシューティングに非常に役立つテクニックです。例えば、デフォルトサーバーでドメインを解決できない場合、Google(8.8.8.8)や Cloudflare(1.1.1.1)のような信頼できるパブリックサーバーに問い合わせることで、問題がローカル設定にあるのか、それともより広範な問題なのかを判断できます。

dig コマンドはこれを容易にします。使用したい DNS サーバーの IP アドレスの前に @ シンボルを付けることで、それを指定できます。

Google のパブリック DNS サーバー 8.8.8.8 に問い合わせて、www.cloudflare.com の IP アドレスを見つけてみましょう。

dig @8.8.8.8 www.cloudflare.com

次に、出力を注意深く確認します。下部にある SERVER 行に特に注意してください。8.8.8.8#53 と表示されているはずです。これは、クエリがシステムのデフォルトサーバー(ステップ 1 の 127.0.0.53)ではなく、Google の DNS サーバーに送信され、応答されたことを確認します。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> @8.8.8.8 www.cloudflare.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62439
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.cloudflare.com.            IN      A

;; ANSWER SECTION:
www.cloudflare.com.     300     IN      A       104.16.123.96
www.cloudflare.com.     300     IN      A       104.16.124.96

;; Query time: 16 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Mon Jul 14 14:56:45 CST 2025
;; MSG SIZE  rcvd: 79

特定のサーバーに DNS クエリを送信することに成功しました。これは、ネットワークおよび名前解決の問題を診断するための強力なスキルです。これで、クライアントサイドの DNS クエリに nslookup および dig を使用する実験は終了です。

まとめ

この実験では、Linux システムで基本的な DNS クエリを実行する方法を学びました。まず、cat コマンドを使用して /etc/resolv.conf ファイルを調べることで、システムのデフォルト DNS サーバーを特定しました。次に、dig および nslookup ユーティリティを使用して標準的なフォワードルックアップを実行し、ドメイン名を対応する IP アドレス(A レコード)に解決しました。

その後、より高度なクエリを探索しました。これには、dig -x を使用して IP アドレスからホスト名を見つける逆引き(PTR レコード)や、ドメインのメール交換(MX)レコードを取得する方法が含まれます。最後に、dig @<server> 構文を使用して DNS クエリを特定のパブリックサーバーに直接送信することで、システムのデフォルト設定をバイパスする方法を学びました。これは、名前解決のトラブルシューティングやテストに不可欠なスキルです。