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 などの行と合わせて読みます。