2026年6月11日

2026年6月11日

dig の出力を読み解くポイント|ヘッダー・フラグ・各セクション・末尾の行を上から順に読む

dig の出力は、上から「ヘッダー(応答コードとフラグ)」「OPT 疑似セクション(EDNS)」「QUESTION」「ANSWER」「AUTHORITY」「ADDITIONAL」「末尾の統計情報」の順に並んでいます。まず status と flags で「どんな種類の答えか」を判断し、そのあとで各セクションの中身を見る、という順に読むと読み違いが減ります。この記事では、出力全体の例をもとに各行が何を表すかを説明し、ANSWER が空のとき、上位のサーバーから委任の案内(referral)が返ったとき、警告やエラーが出たときの読み方までをまとめます。

出力全体の構成

オプションを付けずに実行すると、次のような出力になります(値は説明用の例です)。

; <<>> DiG 9.18.x <<>> www.example.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5821
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
www.example.com.        1784    IN      CNAME   example.com.
example.com.            1784    IN      A       203.0.113.10

;; Query time: 3 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sun Oct 18 10:00:00 JST 2026
;; MSG SIZE  rcvd: 75

先頭の ; <<>> DiG 9.18.x <<>> の行には dig の版と、実行したコマンドの引数が表示されます。資料と表示が違うときは、まずここで版を確かめてください。表示の細部(OPT 疑似セクションの項目や、SERVER 行のプロトコル表記など)は版によって異なります。この記事は執筆時点(2026年10月現在)で Ubuntu 24.04 や Debian 12 に収録されている BIND 9.18 系の dig を前提にしています。

ヘッダー行:status は最初に見る

->>HEADER<<- の行で最も大事なのは status です。

  • NOERROR:問い合わせは正常に処理された。ただし ANSWER が0件のこともある
  • NXDOMAIN:その名前自体が存在しない
  • SERVFAIL:問い合わせ先が答えを作れなかった。DNSSEC の検証失敗や、権威サーバーに届かないときに出る
  • REFUSED:問い合わせ先が応答を拒否した。再帰問い合わせを許可していないサーバーや、担当外のゾーンを聞いたときに多い
  • FORMERR / NOTIMP:問い合わせの形式を理解できない、または未対応。古い機器や一部の DNS 実装との相性で見られる

flags 行:どこから来た答えかを判断する

flags は、応答の性質を表す短い記号の並びです。

  • qr:応答であることを示す。常に付く
  • aa:権威サーバーの答え(authoritative answer)
  • tc:応答が切り詰められた(truncated)。dig は通常、自動で TCP で問い合わせ直す
  • rd:再帰を求めた(問い合わせ側が立てた印がそのまま返る)
  • ra:問い合わせ先が再帰問い合わせに対応している
  • ad:問い合わせ先のキャッシュサーバーが DNSSEC の検証に成功した
  • cd:検証を行わないよう求めた(+cd を付けたときだけ現れる)

読み方の型は3つ覚えておけば足ります。qr rd ra で aa が無ければ、キャッシュサーバーが答えています。qr aa があれば、そのゾーンを担当する権威サーバーの答えです。aa が無く、ANSWER が0件で AUTHORITY に NS が並んでいれば、後述する referral です。

ad は、DNSSEC で署名されたドメインを検証するキャッシュサーバーに聞いたときに付きます。署名していないドメインでは付かないのが正常です。また ad は「問い合わせ先がそう判断した」という印にすぎず、手元とそのサーバーの間の通信が改ざんされていないことまでは保証しません。

flags の後ろの QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 は、各セクションに入っているレコードの件数です。ANSWER の数を見れば、答えが返ったかどうかをすぐ判断できます。

OPT 疑似セクション:EDNS と詳しいエラー理由

OPT PSEUDOSECTION は、EDNS という DNS の拡張機能の情報です。udp: 1232 は、応答側が受け取れる UDP の最大サイズを示します。+dnssec を付けて問い合わせると flags の欄に do が表示されます。COOKIE の行はなりすまし対策の情報で、調査では読み飛ばしてかまいません。

調査で役立つのは EDE の行です。これは Extended DNS Errors(RFC 8914)という仕組みで、SERVFAIL などの理由を番号と短い説明で返します。対応しているキャッシュサーバーに聞いたときだけ表示されます。

;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30114
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 9 (DNSKEY Missing)

よく見る番号には、6(DNSSEC Bogus:検証に失敗)、7(Signature Expired:署名の期限切れ)、9(DNSKEY Missing:DS に対応する鍵が無い)、22(No Reachable Authority:権威サーバーに届かない)、23(Network Error)があります。SERVFAIL の原因を絞り込む手がかりになります。

QUESTION:何を聞いたかを確かめる

QUESTION セクションには、実際に問い合わせた名前と種別が表示されます。名前の打ち間違いや、種別の指定漏れ(何も付けなければ A になります)に気づくのはここです。dig は既定では resolv.conf の search 設定を使わないので、表示される名前は入力したとおりです。末尾のドットは「ルートまで含めて書いた名前(FQDN)」という意味で、異常ではありません。

ANSWER:TTL の意味が問い合わせ先で変わる

ANSWER の各行は、左から名前・TTL(秒)・クラス・種別・値です。TTL の読み方は、問い合わせ先によって変わります。

  • 権威サーバーに聞いた場合:ゾーンに設定されている TTL の値そのもの
  • キャッシュサーバーに聞いた場合:キャッシュに残っている残り時間。繰り返し実行すると減っていく

公開 DNS に繰り返し問い合わせると、TTL が減ったり戻ったりすることがあります。同じ IP の裏で多数のサーバーが動いていて、それぞれが別々にキャッシュを持っているためで、異常ではありません。

例のように CNAME が含まれる場合は、別名から最終的な A までの連なりが上から順に表示されます。CNAME の行だけがあって A が無いときは、別名の向き先が引けていない状態です。CDN やサービスの解約後に、向き先が無くなった CNAME が残っていないかを確認してください。A が複数返る場合は、並び順が問い合わせのたびに入れ替わることがありますが、どれも有効な値です。

AUTHORITY と ADDITIONAL:答えが無いときに読む

名前はあるが種別が無い(NODATA)と、名前が無い(NXDOMAIN)

status が NOERROR で ANSWER が0件、または NXDOMAIN の場合、AUTHORITY にそのゾーンの SOA が入ります。

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

;; AUTHORITY SECTION:
example.com.  900  IN  SOA  ns1.example.net. hostmaster.example.com. 2026101801 7200 3600 1209600 900

この SOA は「答えが無い」という結果をキャッシュしてよい時間を伝えるためのものです。キャッシュ時間は、SOA レコード自体の TTL と、SOA の最後の数値(minimum)の小さいほうになります(RFC 2308)。レコードを追加する前にその名前を問い合わせてしまうと、この時間が過ぎるまで「存在しない」という結果がキャッシュに残ります。追加したはずの名前が引けないときは、ここを確認してください。

委任の案内(referral)

上位のサーバーに再帰を求めずに問い合わせると、答えではなく「この先はこのサーバーに聞いてください」という案内が返ります。

dig @a.gtld-servers.net example.com A +norecurse

この場合、status は NOERROR、flags に aa は無く、ANSWER は0件で、AUTHORITY に NS が、ADDITIONAL にそのネームサーバーの IP(グルー)が並びます。AUTHORITY の NS は、レジストラで登録したネームサーバーが上位のゾーンに反映されているかを確認する材料になります。権威サーバーのつもりで問い合わせたのにこの形の応答が返る場合は、問い合わせ先がそのゾーンを担当していません。

末尾の行:誰が、どのくらいで答えたか

  • Query time:応答までの時間。キャッシュにあれば数ミリ秒、無ければ上位への問い合わせの分だけ長くなります。2回続けて実行して大きく縮めば、1回目でキャッシュされたと判断できます
  • SERVER:実際に答えたサーバーと、使ったプロトコル(UDP や TCP)。127.0.0.53 は systemd-resolved のスタブで、その先の実際のキャッシュサーバーは resolvectl status で確認します
  • WHEN:実行日時。結果をファイルに保存して比較するときの手がかりになります
  • MSG SIZE rcvd:応答のバイト数。DNSSEC の署名を含めたり、TXT が多かったりすると大きくなります

警告やエラーのメッセージ

応答が得られなかった場合や、途中で問題があった場合は、;; で始まる行にメッセージが出ます。

  • connection timed out; no servers could be reached:どのサーバーからも応答が無い。問い合わせ先の停止、ファイアウォールでの53番ポートの遮断、指定した IP の誤りを疑います
  • communications error to ...: timed out:一部の試行で応答が無かった。その後に結果が表示されていれば、通信の取りこぼしがあったという意味です
  • Truncated, retrying in TCP mode.:UDP の応答が切り詰められたので TCP で問い合わせ直した。これ自体は正常な動作ですが、その後に失敗する場合は TCP の53番ポートが遮断されている可能性があります
  • WARNING: recursion requested but not available:再帰を求めたが、問い合わせ先が対応していない。権威サーバーに +norecurse を付けずに聞いたときに出るもので、答え自体に問題があるわけではありません
  • couldn't get address for '...':@ に指定したサーバー名を IP に変換できなかった。名前の綴りを確かめるか、IP で指定します

読み取った結果を次の確認につなげる

SERVFAIL なら、EDE を確認したうえで +cd を付けて問い合わせ直し、答えが返れば DNSSEC が原因と見当を付けます。NXDOMAIN なら、権威サーバーにそのレコードがあるかを @ で確かめ、必要なら +trace で上位からの委任をたどります。NODATA なら種別の指定と管理画面のレコードを、古い値が返るなら TTL の残りと権威サーバーの値を比べます。

まとめ

  • 出力はヘッダー・OPT 疑似セクション・QUESTION・ANSWER・AUTHORITY・ADDITIONAL・末尾の統計の順に並びます。
  • 最初に status、次に flags を見て、キャッシュの答えか、権威の答えか、referral かを判断します。
  • SERVFAIL のときは EDE の番号と説明が原因の手がかりになります。
  • TTL は権威サーバーなら設定値、キャッシュサーバーなら残り時間です。
  • 答えが無いときは AUTHORITY の SOA から、否定の結果がキャッシュされる時間を読み取ります。
  • 末尾の SERVER 行で、実際に答えたサーバーとプロトコルを確認します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲