はじめに
Webサイトの閲覧やメールの送受信など、私たちが日常的に利用するインターネットサービスは、その裏側で「DNS(Domain Name System)」という仕組みによって支えられています。
DNSはドメイン名とIPアドレスを結びつける、インターネットに不可欠なシステムです。
バックエンドエンジニアとして、システムの安定稼働やトラブルシューティングを行う上で、このDNSの挙動を正確に把握することは非常に重要です。
もしDNSの基本的な仕組みや役割について、「そもそも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リソースレコードについての解説は以下をご覧ください。

具体的なコマンド例:
# 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の有効化 |
+noedns | EDNS0の無効化 |
+dnssec | 問い合わせのDNSSEC3 OK(DO)ビットをセット |
+tcp | TPCで問い合わせ |
+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
status
とflags
が重要です。
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
コマンドは原因究明のための的確な情報を提供してくれます。status
やflags
、各種レコード情報を読み解くことで、問題の切り分けが迅速に行えるようになります。 - 設定変更の結果を正確に確認できる: DNSレコードの変更後、その設定が正しく反映されているかを自分の目で確かめることができます。これにより、設定ミスによる影響を最小限に抑えることができます。
- DNSへの理解が深まり、自信につながる:
dig
コマンドを日常的に活用することで、DNSの仕組みそのものへの理解が深まります。これは、バックエンドエンジニアとしての基礎体力を強化し、より複雑なシステム設計や運用にも自信を持って取り組むための土台となるでしょう。
あなたがもし、これまでDNSに対して「何となく難しそう」「トラブルが起きたらお手上げ」といった苦手意識を持っていたとしても、この記事で紹介した知識とテクニックを武器にすれば、その意識はきっと変わるはずです。
今後のステップとして
- 実際にコマンドを叩いてみる: まずは自分のPCやサーバーで
dig
コマンドを実際に実行し、この記事で解説したオプションや出力結果を体験してみてください。知っているドメイン、気になるドメイン、何でも構いません。 - 日々の業務で意識して使ってみる: ちょっとした確認作業でも、積極的に
dig
コマンドを使ってみる習慣をつけましょう。使えば使うほど、その便利さと奥深さに気づくはずです。 - DNSSECなど、さらに進んだトピックへ: DNSの世界は奥深く、DNSSEC(DNS Security Extensions)のようなセキュリティ技術など、さらに学ぶべきトピックはたくさんあります。
dig
コマンドはそのような高度な技術を理解する上でも役立ちます。
DNSはインターネットを支える根幹技術の一つであり、バックエンドエンジニアにとって避けては通れない道です。dig
コマンドという強力な羅針盤を手に、あなたもDNSの世界を自由に航海できるようになることを心から願っています。
参考文献
- 「私の代わりに名前解決をして、◯◯のIPアドレスを教えてください」という問い合わせ。スタブリゾルバーからフルリゾルバーへの問い合わせです。一方で、フルリゾルバーから権威サーバーへの問い合わせは「◯◯のIPアドレスを教えてください」のように、名前解決要求が無効化されています。つまり、
+recurse
と+norecurse
はスタブリゾルバーとして振る舞うか、フルリゾルバーとして振る舞うかを制御できるのです。 ↩︎ - 512バイトを超えるDNSメッセージをUDPで扱えるようにしたいという要求から生まれた拡張機能です。 ↩︎
- DNSの応答に偽装が困難な電子署名を追加し、問い合わせ側でそれを検証できるようにするための仕組みです。 ↩︎
コメント