2026年6月13日

2026年6月13日

kdig の出力を読み解くポイント|ヘッダー、EDNS、各セクション、末尾の Received・Time・From の行

kdig の出力は、上から「ヘッダー(応答コードとフラグ)」「EDNS の情報」「問い合わせと答えの各セクション」「末尾の統計」の順に並びます。dig と似ていますが、区切りの記号や末尾の行の形が違い、特に最後の From の行に問い合わせ先・ポート・通信方式がまとめて出るのが kdig の特徴です。この記事では、例の出力を上から順に読み、dig との表記の違い、暗号化 DNS を使ったときに増える行、警告やエラーの読み方までを説明します。

出力の全体像

キャッシュサーバーに A レコードを問い合わせたときの出力の例です。名前とアドレスは説明用の架空のもので、空白や細部の表記は版によって少し異なります(2026年10月現在の Knot DNS 3 系を想定しています)。

$ kdig @192.0.2.53 www.example.com A
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 51234
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1

;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR

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

;; ANSWER SECTION:
www.example.com.    	300	IN	A	203.0.113.10

;; Received 60 B
;; Time 2026-10-18 10:15:42 JST
;; From 192.0.2.53@53(UDP) in 12.4 ms

読むときは、まず1行目の status で成功か失敗かを確かめ、次に2行目のフラグで「誰の答えか」を判断し、そのうえで答えの中身と末尾の行を見ます。

ヘッダーの2行

1行目の status は応答コードです。dig では status: の後ろに出るのと同じ情報で、主なものは次のとおりです。

  • NOERROR:正常に答えが返った。ただし ANSWER が0件なら「名前はあるが、その種別のレコードが無い」状態(NODATA)です。
  • NXDOMAIN:その名前自体が存在しない。
  • SERVFAIL:問い合わせ先が答えを作れなかった。キャッシュサーバーでは DNSSEC の検証失敗や、権威サーバーに届かないことが原因として多く見られます。
  • REFUSED:問い合わせを断られた。担当していないゾーンを権威サーバーに聞いた、外部からの再帰問い合わせが許可されていない、などの場合です。

2行目の Flags: には、応答に立っているフラグが並びます。qr は応答であること、rd は再帰を求めたこと、ra は相手が再帰に対応していること、aa は権威サーバー自身の答えであること、tc は応答が切り詰められたこと、ad は DNSSEC の検証に成功したとキャッシュサーバーが示していることを表します。aa があれば TTL はゾーンの設定値、無ければキャッシュの残り時間と読みます。同じ行の QUERY・ANSWER・AUTHORITY・ADDITIONAL は各セクションの件数です。kdig ではこれらがセミコロンで区切られ、Flags の F が大文字になっている点が dig と見た目で違うところです。

EDNS PSEUDOSECTION

EDNS(DNS の拡張のしくみ)を使った応答では、ヘッダーの下に EDNS PSEUDOSECTION が出ます。dig で OPT PSEUDOSECTION と表示される部分に当たります。

  • Version:EDNS の版で、通常は 0 です。
  • flags:do があれば、DNSSEC の署名も送るよう求めた(+dnssec を付けた)ことを示します。
  • UDP size:相手が受け取れると伝えてきた UDP の大きさの上限です。
  • ext-rcode:拡張された応答コードです。

オプションや相手の設定によって、ここに行が増えます。+nsid を付けると、対応しているサーバーは NSID の行に自分の識別子を返します。エニーキャストの権威サーバーで、どの拠点が答えたかを見分けるのに使えます。また、新しめの版では、キャッシュサーバーが失敗の理由を添えて返す Extended DNS Errors(EDE、RFC 8914)が EDE の行に表示されます。たとえば SERVFAIL と一緒に、番号 6(DNSSEC Bogus)や 7(Signature Expired)、22(No Reachable Authority)といった理由が出ていれば、原因の見当が付けやすくなります。EDE を返すかどうか、どの番号を使うかはキャッシュサーバーの実装次第なので、出ていないからといって原因が無いわけではありません。

問い合わせと答えのセクション

QUESTION SECTION は何を聞いたかを示す行で、先頭が ;; になっています。名前のつづりや、意図しない検索ドメインが付いていないかをここで確かめます。

ANSWER SECTION 以降の行は、左から名前、TTL(秒)、クラス、種別、値の順です。CNAME をたどった答えでは、CNAME の行と置き換え先のレコードの行が続けて出ます。行の先頭の名前を見て、どのゾーンの値かを区別してください。

答えが空で AUTHORITY SECTION に行がある場合は、2つの形があります。

  • SOA が1件だけ:NXDOMAIN か NODATA の答えです。SOA の最後の値と SOA 自体の TTL の短いほうが、「存在しない」という答えがキャッシュされる時間の目安です。
  • NS が並び、aa が無い:親ゾーンのサーバーからの委任(紹介)です。権威サーバーに再帰なしで聞いたときや、TLD のサーバーに聞いたときに見られます。

ADDITIONAL SECTION には、委任先のネームサーバーのアドレス(グルー)などが入ります。ネームサーバー名が自分のドメインの中にあるとき、ここのアドレスが古いと名前解決に失敗するため、ネームサーバーの IP を変えた後は確認しておきます。

kdig では、件数が0のセクションは見出しごと省かれるのが普通です。dig のように空の見出しが並ばないので、「見出しが無い=そのセクションは0件」と読みます。

末尾の3行

kdig の末尾は dig と形が違います。

  • Received 60 B:受け取った応答の大きさです。dig の MSG SIZE rcvd に当たります。数百バイトを超える応答は、経路によっては UDP で届きにくくなります。
  • Time 2026-10-18 10:15:42 JST:問い合わせを行った日時です。dig の WHEN に当たります。結果を記録に残すときの時刻として使えます。
  • From 192.0.2.53@53(UDP) in 12.4 ms:問い合わせ先のアドレス、ポート、通信方式、応答までの時間です。dig の SERVER と Query time を1行にまとめた形です。

From の行の括弧の中は、UDP・TCP のほか、DNS over TLS なら TLS、DNS over HTTPS なら HTTPS、DNS over QUIC なら QUIC のように表示されます。ポートも @853 や @443 に変わるので、暗号化 DNS で問い合わせたつもりが平文の53番に送っていた、という取り違えをこの行で見つけられます。

暗号化 DNS で増える行

+tls や +https で問い合わせると、出力の先頭に通信の状態を示す行が加わります。たとえば DoT では、次のように TLS の版や暗号方式がまとめて出ます。

;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)

この行が出ていれば TLS の接続は確立しています。ただし、証明書がそのサーバーのものかを検証したかどうかは別の話で、検証まで行うには +tls-ca や +tls-hostname を指定します。DoH では HTTP の通信状態を示す行が加わる版もあります。これらの行の書き方は版や使っている TLS ライブラリによって違うので、形をそのまま覚えるより「接続の情報が先頭に出る」と押さえておくと読み違えません。

警告とエラーの行

;; WARNING で始まる行は、問い合わせの途中で起きたことの報告です。応答が切り詰められて TCP で取り直した、1つ目のアドレスに届かず次のアドレスに切り替えた、といった経過が出ます。最終的に答えが表示されていれば、問い合わせ自体は成功しています。

;; ERROR で始まる行で終わり、ヘッダーが出ない場合は、どのサーバーからも応答を得られなかったということです。DNS の設定ではなく通信の問題なので、問い合わせ先のアドレス、ファイアウォールでの53番ポート(DoT なら853番、DoH なら443番)の遮断、サーバーの停止を順に確認します。+tcp で TCP に切り替えて結果が変わるかを見ると、UDP だけが落とされているかを切り分けられます。

表示を変えるオプション

  • +short:値だけを1行ずつ表示します。スクリプトで値を取り出すときに向いています。
  • +noall +answer:答えの行だけを表示します。複数のレコードの TTL を見比べるときに便利です。
  • +multiline:SOA や DNSKEY のような長いレコードを複数行に分け、各値の意味を注釈付きで表示します。
  • +json:新しめの版で使える JSON 形式の出力です。フィールド名や構造は版で変わる可能性があるため、スクリプトに組み込むときは使う版を固定します。

dig の出力との対応

dig の手順書を見ながら kdig を読むときのために、対応する部分を並べておきます。

内容 dig kdig
応答コード status: status:
フラグと件数 flags: の行 Flags: の行
EDNS の情報 OPT PSEUDOSECTION EDNS PSEUDOSECTION
応答の大きさ MSG SIZE rcvd Received ... B
日時 WHEN Time
問い合わせ先と時間 SERVER と Query time From ...(通信方式) in ... ms

まとめ

  • 1行目の status で成否を、2行目の Flags: の aa の有無で権威サーバーの答えかキャッシュの答えかを判断します。
  • EDNS PSEUDOSECTION では DO ビット、UDP の大きさ、NSID、EDE を確かめ、SERVFAIL の理由の手がかりにします。
  • 答えが空のときは AUTHORITY の中身で、NXDOMAIN・NODATA か委任かを見分けます。0件のセクションは見出しごと省かれます。
  • 末尾の From の行で問い合わせ先・ポート・通信方式を確かめ、暗号化 DNS の確認では先頭の TLS などの行と合わせて読みます。

お気軽にご相談ください

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