digコマンドを使いこなす!DNS設定確認と問題解決のための実践テクニック

目次

はじめに

Webサイトの閲覧やメールの送受信など、私たちが日常的に利用するインターネットサービスは、その裏側で「DNS(Domain Name System)」という仕組みによって支えられています。
DNSはドメイン名とIPアドレスを結びつける、インターネットに不可欠なシステムです。

バックエンドエンジニアとして、システムの安定稼働やトラブルシューティングを行う上で、このDNSの挙動を正確に把握することは非常に重要です。

もしDNSの基本的な仕組みや役割について、「そもそもDNSって何だっけ?」という方は、先に以下記事をご一読いただくと、本記事の内容がよりスムーズに理解できるかと思います。

あわせて読みたい
バックエンドエンジニアのためのDNS基礎 はじめに Webアプリケーションを開発し、ユーザーに届けるバックエンドエンジニアにとって、ネットワークの知識は避けて通れません。中でも「DNS」は、私たちが普段何気...

この記事で解説するdigコマンドは、DNSサーバーに直接問い合わせを行い、その応答を詳細に表示してくれる、まさにDNSの”聴診器”とも言える強力なツールです。

この記事の対象読者

この記事は、特に以下のような悩みや目標を持つ若手バックエンドエンジニアの方々に向けて書かれています。

  • DNSのトラブルに遭遇したけど、何から確認すればいいか分からず困っている方
  • digコマンドの存在は知っているものの、まだ十分に使いこなせていないと感じている方
  • DNSの設定変更後、その結果を迅速かつ正確に確認したい方
  • 実践的なDNSの知識を身につけ、障害対応能力を向上させたい方
  • 先輩エンジニアのように、digコマンドを駆使してスマートに問題を解決できるようになりたい方

一つでも「これは自分のことだ」と感じた方は、ぜひ読み進めてみてください。

この記事のゴール

本記事を最後までお読みいただくことで、あなたは以下の状態を目指せます。

  • digコマンドの基本的な使い方から主要なオプションまでを理解し、自信を持って使えるようになる。
  • digコマンドの出力結果(各種フラグやセクション)を正しく読み解き、DNSの状態を正確に把握できるようになる。
  • 権威サーバーやフルリゾルバーの動作確認をdigコマンドで行えるようになる。
  • よくあるDNS関連のトラブルに対するdigコマンドを用いた具体的な調査手順を習得できる。
  • 結果として、DNSに関する問題解決能力が向上し、日々の業務におけるトラブルシューティングがより迅速かつ的確になる。

digコマンドは、最初は少し取っつきにくく見えるかもしれませんが、一度その便利さと強力さを知れば、あなたのエンジニアとしてのスキルセットに欠かせないツールとなるはずです。

digコマンドの基礎知識

digコマンドは、DNSに関する情報を調査するための非常に強力で柔軟なコマンドラインツールです。
その名前は「Domain Information Groper」の略で、ネットワーク管理やDNSのトラブルシューティングにおいて、世界中のエンジニアに広く利用されています。

digコマンドの基本的な構文は以下の通りです。

dig [オプション] [@サーバー] ドメイン名 [タイプ] [クラス]
  • オプション: (省略可能) digコマンドの動作を制御するための様々なオプションを指定します。詳細は後述です。
  • @サーバー: (省略可能) 問い合わせ先のサーバーのドメイン名またはIPアドレスを指定します。省略した場合、システムに設定されているフルリゾルバーが使用されます。
  • ドメイン名: (必須) 問い合わせ先のドメイン名を指定します。
  • タイプ: (省略可能) 問い合わせたいDNSリソースレコードのタイプを指定します。省略した場合、Aが指定されます。
  • クラス: (省略可能) 問い合わせたいDNSリソースレコードのクラスを指定します。省略した場合、INが指定されます。

タイプをはじめ、DNSリソースレコードについての解説は以下をご覧ください。

あわせて読みたい
DNSリソースレコード徹底解説 はじめに WebサイトのURLを入力したら目的のページが表示される、メールアドレス宛にメールを送ったら相手に届く。普段何気なく利用しているインターネットの仕組みです...

具体的なコマンド例:

# www.google.com のAレコードをシステムに設定されているフルリゾルバーに問い合わせる
dig www.google.com

# gmail.com のMXレコードを 8.8.8.8 (Google Public DNS) に問い合わせる
dig @8.8.8.8 gmail.com MX

# example.com のNSレコードを問い合わせ、簡潔な形式で表示する
dig example.com NS +short

digコマンドの主要オプション

digコマンドを使いこなすためには、多様なオプションを理解することが不可欠です。
これらのオプションを駆使することで、DNSサーバーの挙動を細かく制御し、より的確な情報を引き出すことができます。
ここでは、特に重要かつ利用頻度の高いオプションに絞って、その機能概要を把握しておきましょう。

オプション機能
+recurseまたは+rec (デフォルト)名前解決要求1の有効化
+norecurseまたは+norec名前解決要求の無効化
+edns (デフォルト)EDNS02の有効化
+noednsEDNS0の無効化
+dnssec問い合わせのDNSSEC3 OK(DO)ビットをセット
+tcpTPCで問い合わせ
+traceルートから委任情報をトレース
-x指定されたIPアドレスを逆引き用ドメイン名に変換
+multilineまたは+multi複数行形式で出力

digコマンドの出力結果を読み解く

digコマンドの出力を正確に読み解くためには、DNSメッセージがどのような構造になっているのかを理解しておくことが助けになります。
DNSの問い合わせと応答は、共通のメッセージフォーマットを使用します。
このフォーマットはいくつかのセクションに分かれています。

digコマンドの標準的な出力は、このDNSメッセージの各セクションに対応する形で情報を表示してくれます。

  • Headerセクション: 各種制御情報を含むヘッダー部
  • Questionセクション: 問い合わせるドメイン名や探す情報のタイプなど
  • Answer, Authority, Additionalセクション: 問い合わせに対する応答が設定される

では、実際の出力例をもとに読み解いていきましょう。

% dig @8.8.8.8 www.google.com IN A

; <<>> DiG 9.10.6 <<>> @8.8.8.8 www.google.com IN A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8681
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
www.google.com.		11	IN	A	142.251.42.196

;; Query time: 14 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue May 20 10:42:59 JST 2025
;; MSG SIZE  rcvd: 59

Headerセクションを見てみましょう。

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8681
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

statusflagsが重要です。

statusには応答コードが表示されます。

応答コード意味
NOERROR通常応答
SERVFAILサーバー側の異常で名前解決に失敗した
NXDOMAINその名前とその下の階層にはいずれのリソースレコードも存在しない
REFUSEDアクセス制限や管理ポリシーなどによりリクエストを拒否した

flagsについては、名前解決要求であるrd(Recursion Desired)、応答相手(Google Public DNS)が名前解決要求を処理できる、つまりフルリゾルバーであることを示すra(Recursion Available)が表示されています。

次に、Questionセクションを見てみましょう。

;; QUESTION SECTION:
;www.google.com.			IN	A

ここには、応答のQuestionセクションの内容が表示されます。
問い合わせのドメイン名とタイプがそのままコピーされています。

最後に、Answerセクションを見てみましょう。

;; ANSWER SECTION:
www.google.com.		11	IN	A	142.251.42.196

求めていた情報であるIPアドレスが表示されています。

digコマンドを使った動作確認

これまでに学んだdigコマンドのオプションや出力の読み解き方を活用して、実際にDNSサーバーが期待通りに動作しているかを確認してみましょう。
ここでは、「権威サーバー」と「フルリゾルバー」のそれぞれについて、確認すべきポイントと具体的なdigコマンドの実行例を示します。

権威サーバーの動作確認

google.comのIPアドレスを、google.comの権威サーバー216.239.32.10に問い合わせしてみます。
あなたが権威サーバーの管理者であり、正しくgoogle.comのIPアドレスを応答できるのか確認するイメージです。

権威サーバーへの問い合わせは名前解決要求ではないので、+norecオプションの指定が必要です。

% dig +norec @216.239.32.10 google.com A

; <<>> DiG 9.10.6 <<>> +norec @ns1.google.com google.com A
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49203
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
google.com.		300	IN	A	142.251.42.142

;; Query time: 11 msec
;; SERVER: 2001:4860:4802:32::a#53(2001:4860:4802:32::a)
;; WHEN: Tue May 20 11:00:02 JST 2025
;; MSG SIZE  rcvd: 55

IPアドレスが応答されていることと、HeaderセクションにAAビットがセットされていることを確認します。
AAは「Authoritative Answer」のことで、応答したサーバーが問い合わされたドメイン名の情報に対する管理権限を持つことを示しています。

次に、フルリゾルバーとして振る舞っていないことを確認します。
この権威サーバーの管理外のドメイン名について、+norecオプションを指定せずに問い合わせます。

% dig @216.239.32.10 amazon.co.jp A

; <<>> DiG 9.10.6 <<>> @216.239.32.10 amazon.co.jp A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 6865
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;amazon.co.jp.			IN	A

;; Query time: 12 msec
;; SERVER: 216.239.32.10#53(216.239.32.10)
;; WHEN: Tue May 20 11:21:20 JST 2025
;; MSG SIZE  rcvd: 41

statusの内容が「REFUSED」となっており、かつ、名前解決要求を処理可能であるRAビットがセットされていないので、想定通りに動作していることがわかります。

フルリゾルバーの動作確認

今回は簡易な例として、システムに設定されているフルリゾルバーの動作を確認してみます。
特定のフルリゾルバーを指定したい場合は、@で指定しましょう。

% dig amazon.co.jp A

; <<>> DiG 9.10.6 <<>> amazon.co.jp A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12572
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;amazon.co.jp.			IN	A

;; ANSWER SECTION:
amazon.co.jp.		57	IN	A	52.119.164.121
amazon.co.jp.		57	IN	A	52.119.161.5
amazon.co.jp.		57	IN	A	52.119.168.48

;; Query time: 10 msec
;; SERVER: 240b:12:4241:5500:fab7:97ff:fe6d:c408#53(240b:12:4241:5500:fab7:97ff:fe6d:c408)
;; WHEN: Tue May 20 14:51:41 JST 2025
;; MSG SIZE  rcvd: 89

statusの内容が「NOERROR」である、AnswerセクションにIPアドレスが表示されていることを確認します。

digコマンドを使ったDNSトラブルシューティング事例

DNS以外が原因のことも多々ありますが、問題を切り分けるためにも「DNSが原因の問題かどうか」を判断できることは重要なスキルです。

Webサイトが表示されない

以下のようなことを確認してみましょう。

  • dig my-site.com Aを実行する
    • たとえば、正しいIPアドレスが表示されるならDNSの問題ではなさそう、表示されないならDNSが問題かも
  • フルリゾルバーを変えてみて結果が変わるかどうか確認する
    • たとえば、Google Pubic DNSに変えてみて結果が変わるならシステムに設定されているフルリゾルバーがおかしいかも
  • 権威サーバーに直接問い合わせをしてみて正しいIPアドレスが取得できるか確認する
    • できるなら+traceオプションを使ってみてどこがおかしいか確認する、できないなら権威サーバーの設定を確認する

メールが届かない・送信できない

以下のようなことを確認してみましょう。

  • dig my-site.com MXを実行する
    • メールサーバーのドメイン名が設定されているか
    • そのドメイン名のAレコードがひいてこれるか
  • SPF, DKIM, DMARC関連のTXTレコードがひいてこれるか確認する
    • 値が間違っていないことも確認する

特定のWebサイトへのアクセスが時々遅い

以下のようなことを確認してみましょう。

  • dig my-site.com Aを実行する
    • 何度か実行して応答時間を見てみる
    • フルリゾルバーを変えてみて結果がかわるか見てみる
  • +traceオプションを使って各権威サーバーごとの応答時間を確認する

まとめ

本記事では、DNSの設定確認やトラブルシューティングに不可欠なdigコマンドについて、その基本的な使い方から主要なオプション、出力結果の読み解き方、さらには権威DNSサーバーやフルリゾルバーの動作確認、具体的なトラブルシューティング事例に至るまで、幅広く解説してきました。

最初は多くの情報量に圧倒されたかもしれませんが、一つ一つのオプションの意味や出力のポイントを理解することで、digコマンドがどれほど強力で便利なツールであるかを感じていただけたのではないでしょうか。

digコマンドを使いこなすことで得られるメリットは多いです。

  • DNSの挙動が手に取るようにわかる: 複雑に見えるDNSの名前解決プロセスも、+traceオプションなどを使えば、その経路や各サーバーの応答を具体的に追跡できます。
  • トラブルシューティング能力が格段に向上する: Webサイトが表示されない、メールが届かないといった問題が発生した際に、digコマンドは原因究明のための的確な情報を提供してくれます。statusflags、各種レコード情報を読み解くことで、問題の切り分けが迅速に行えるようになります。
  • 設定変更の結果を正確に確認できる: DNSレコードの変更後、その設定が正しく反映されているかを自分の目で確かめることができます。これにより、設定ミスによる影響を最小限に抑えることができます。
  • DNSへの理解が深まり、自信につながる: digコマンドを日常的に活用することで、DNSの仕組みそのものへの理解が深まります。これは、バックエンドエンジニアとしての基礎体力を強化し、より複雑なシステム設計や運用にも自信を持って取り組むための土台となるでしょう。

あなたがもし、これまでDNSに対して「何となく難しそう」「トラブルが起きたらお手上げ」といった苦手意識を持っていたとしても、この記事で紹介した知識とテクニックを武器にすれば、その意識はきっと変わるはずです。

今後のステップとして

  1. 実際にコマンドを叩いてみる: まずは自分のPCやサーバーでdigコマンドを実際に実行し、この記事で解説したオプションや出力結果を体験してみてください。知っているドメイン、気になるドメイン、何でも構いません。
  2. 日々の業務で意識して使ってみる: ちょっとした確認作業でも、積極的にdigコマンドを使ってみる習慣をつけましょう。使えば使うほど、その便利さと奥深さに気づくはずです。
  3. DNSSECなど、さらに進んだトピックへ: DNSの世界は奥深く、DNSSEC(DNS Security Extensions)のようなセキュリティ技術など、さらに学ぶべきトピックはたくさんあります。digコマンドはそのような高度な技術を理解する上でも役立ちます。

DNSはインターネットを支える根幹技術の一つであり、バックエンドエンジニアにとって避けては通れない道です。digコマンドという強力な羅針盤を手に、あなたもDNSの世界を自由に航海できるようになることを心から願っています。

参考文献

  1. 私の代わりに名前解決をして、◯◯のIPアドレスを教えてください」という問い合わせ。スタブリゾルバーからフルリゾルバーへの問い合わせです。一方で、フルリゾルバーから権威サーバーへの問い合わせは「◯◯のIPアドレスを教えてください」のように、名前解決要求が無効化されています。つまり、+recurse+norecurseスタブリゾルバーとして振る舞うか、フルリゾルバーとして振る舞うかを制御できるのです。 ↩︎
  2. 512バイトを超えるDNSメッセージをUDPで扱えるようにしたいという要求から生まれた拡張機能です。 ↩︎
  3. DNSの応答に偽装が困難な電子署名を追加し、問い合わせ側でそれを検証できるようにするための仕組みです。 ↩︎
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

10年目のバックエンドエンジニアです。
若手バックエンドエンジニアの道標となる情報を発信します。
PHP, Laravel, MySQL, AWS, Dockerが得意です。
よろしければXのフォローもよろしくお願いします。

コメント

コメントする

CAPTCHA


目次