2026年6月4日

2026年6月4日

drill の出力を読み解くポイント|dig との表記の違い、DNSSEC のレコード、-T と -S の結果の見方

drill の出力は dig とよく似た構成ですが、応答コードが rcode と表示される、空のセクションも見出しが残る、DNSKEY に鍵の番号の注釈が付く、といった細かな違いがあります。さらに drill ならではの -T(ルートからのトレース)と -S(署名の追跡)は、通常の問い合わせとは出力の形が大きく変わります。この記事では、通常の出力を上から順に読んだうえで、DNSSEC 関連のレコードの見方と、-T・-S の結果の読み方を説明します。

drill は NLnet Labs の DNS ライブラリ ldns に付属するツールで、Debian・Ubuntu では ldnsutils、Fedora などでは ldns-utils、Homebrew では ldns のパッケージで入ります(2026年10月現在)。表示の細部は ldns の版で変わることがあるため、ここでの例は形をつかむためのものと考えてください。

通常の出力の全体像

キャッシュサーバーに A レコードを問い合わせたときの例です。名前とアドレスは説明用の架空のものです。

$ drill www.example.com A @192.0.2.53
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 27184
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;; www.example.com.	IN	A

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

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 15 msec
;; SERVER: 192.0.2.53
;; WHEN: Sun Oct 18 10:20:31 2026
;; MSG SIZE  rcvd: 49

ヘッダーの2行で dig と違うところ

1行目の rcode は応答コードで、dig の status に当たります。NOERROR(正常)、NXDOMAIN(名前が存在しない)、SERVFAIL(答えを作れなかった)、REFUSED(断られた)の読み方は dig と同じです。区切りがカンマになっているので、dig の出力向けに書いた grep の条件(status: NOERROR など)はそのままでは当たりません。

2行目の flags: の後には、qr(応答)、aa(権威サーバー自身の答え)、rd(再帰を求めた)、ra(再帰に対応)、ad(検証に成功)、cd(検証を無効にした)、tc(切り詰められた)などが並びます。フラグの並びの後にセミコロン、件数はカンマ区切りです。aa があれば TTL はゾーンに設定された値、無ければキャッシュの残り時間か、親ゾーンからの委任の値と読みます。

セクションと末尾の行

drill は、件数が0のセクションも見出しだけを表示します。例の AUTHORITY SECTION: の下が空なのは「0件」という意味で、表示の不具合ではありません。dig よりも「どのセクションに何も無いか」が見た目で分かりやすい反面、出力をスクリプトで切り出すときは、見出しの行と空行を読み飛ばす処理が要ります。

QUESTION SECTION の行は ;; で始まり、何を聞いたかを示します。各レコードの行は、左から名前、TTL(秒)、クラス、種別、値です。答えが空で AUTHORITY に SOA が1件だけあれば NXDOMAIN か NODATA(名前はあるがその種別が無い)、AUTHORITY に NS が並んで aa が無ければ委任(紹介)の答えです。

末尾の行は次の意味です。

  • Query time:応答までの時間です。
  • SERVER:問い合わせ先です。@ を省いた場合は /etc/resolv.conf に書かれたサーバーになります。
  • WHEN:問い合わせた日時です。
  • MSG SIZE rcvd:受け取った応答の大きさ(バイト)です。

DNSSEC の署名を求める -D や、受け取れる大きさを指定する -b を付けたときなど、EDNS を使った応答では、末尾に ;; EDNS: version 0; flags: do ; udp: 1232 のような行が加わります。do は DNSSEC の署名も送るよう求めたこと、udp は相手が伝えてきた UDP の大きさの上限です。

DNSSEC のレコードの見方

-D を付けると、答えに RRSIG(署名)が加わります。DNSKEY や DS を問い合わせたときは、drill ならではの注釈が付くので読み方を押さえておきます。

$ drill -D example.com DNSKEY @ns1.example.net
;; ANSWER SECTION:
example.com.	3600	IN	DNSKEY	257 3 13 mdsswUyr3D... ;{id = 23456 (ksk), size = 256b}
example.com.	3600	IN	DNSKEY	256 3 13 oJMRESz5E4... ;{id = 12345 (zsk), size = 256b}
example.com.	3600	IN	RRSIG	DNSKEY 13 2 3600 20261101000000 20261018000000 23456 example.com. ...

DNSKEY の値の最初の3つの数字は、フラグ、プロトコル、アルゴリズムです。フラグが 257 なら KSK(鍵署名鍵)、256 なら ZSK(ゾーン署名鍵)として使われるのが一般的で、行末の注釈にも ksk・zsk と出ます。アルゴリズムの 13 は ECDSAP256SHA256、8 は RSASHA256、15 は Ed25519 です。

注釈の id は鍵の番号(キータグ)です。親ゾーンに登録した DS レコードの値の最初の数字もキータグなので、DS を問い合わせて、その番号が KSK の id と一致しているかを見比べます。一致しなければ、DNS 事業者の移転や鍵の更新の後に DS を更新していない可能性があります。

RRSIG の値では、署名の有効期限と開始日時(20261101000000 のような年月日時分秒、UTC)と、署名に使った鍵のキータグが読み取れます。有効期限が過ぎている、または近いのに更新されていない場合、検証を行うキャッシュサーバーは SERVFAIL を返すようになります。

-T(トレース)の出力の読み方

drill -T 名前 種別 は、手元のキャッシュサーバーを使わずにルートサーバーから順に問い合わせ、各段で受け取ったレコードを表示します。ヘッダーやセクションの見出しは出ず、レコードの行が段ごとに続く形です。

$ drill -T www.example.com A
.	518400	IN	NS	a.root-servers.net.
.	518400	IN	NS	b.root-servers.net.
(中略)
com.	172800	IN	NS	a.gtld-servers.net.
com.	172800	IN	NS	b.gtld-servers.net.
(中略)
example.com.	172800	IN	NS	ns1.example.net.
example.com.	172800	IN	NS	ns2.example.net.
www.example.com.	300	IN	A	203.0.113.10

上から、ルートの NS、TLD(com)の NS、自分のドメインの NS(親ゾーンが返した委任)、最後に答えの順に読みます。途中の example.com. の NS の TTL は、TLD 側が決めた値です。ここに古い DNS 事業者のネームサーバーが出ていれば、レジストラでの NS の変更がまだ済んでいないか、反映を待っている段階です。

出力が途中の段で止まる、またはエラーの行で終わる場合は、その次に問い合わせるはずだったサーバーに届かなかったということです。最後に表示された NS のサーバーに、@ で直接問い合わせて応答を確かめます。なお -T では @ で指定した問い合わせ先は使われません。また、外向きの DNS 通信が制限されたネットワークでは、最初の段から進まないことがあります。

-S(署名の追跡)の出力の読み方

drill -S 名前 種別 は、答えの署名を親ゾーンへ向かってたどり、信頼の起点(トラストアンカー)となる鍵まで検証を試みます。起点の鍵は -k ファイル で指定でき、指定しない場合は既定の場所のファイルが使われます。既定の場所は配布元によって異なるため、エラーになるときは man drill で確認してください。

出力は版によって形が違いますが、多くは次の要素で読みます。

  • 各段の DNSKEY・DS・答えのレコードに、行頭や行末で印が付きます。凡例が出力の末尾に表示される形式では、[T] が信頼の起点につながったもの、[S] が自分の鍵での署名は正しいが起点にはつながっていないもの、[B] が検証に失敗したもの、といった意味です。
  • 鍵と DS の対応を木の形で示す形式では、答えから親ゾーンの鍵へ向かって枝が伸び、どの鍵がどの DS に結び付いているかが並びます。
  • 最後に、追跡が成功したかどうかを示す行が出ます。

読むときは、[B] や失敗を示す行が最初に現れる段を探します。その段の DS のキータグと DNSKEY の id を見比べると、鍵と DS の食い違いか、署名の期限切れかの見当が付きます。印の種類や表示形式は ldns の版によって変わるため、手元の出力の凡例を優先してください。連鎖の切れ目を図で確かめたいときは DNSViz と合わせて見ると判断しやすくなります。

警告とエラーの表示

  • 応答が切り詰められた(tc が立った)ときは、TCP(-t)や大きなバッファの指定(-b)での問い合わせを勧める趣旨の警告が出ます。drill は自動で TCP に切り替えないことがあるので、警告が出たら -t を付けて取り直します。
  • どのサーバーからも応答が無いときは、ヘッダーが出ずに Error: で始まる行(ネットワークのエラーで送受信できなかった、など)だけが表示されます。DNS の設定ではなく通信の問題なので、問い合わせ先のアドレスやファイアウォールを確認します。

まとめ

  • 応答コードは rcode、区切りはカンマで、dig 向けの grep の条件はそのまま使えません。aa の有無で TTL の意味を読み分けます。
  • 件数が0のセクションも見出しが残ります。EDNS を使った応答では末尾に EDNS: の行が加わります。
  • DNSKEY の注釈の id と ksk・zsk、DS のキータグ、RRSIG の有効期限を見比べると、DNSSEC の不整合の見当が付きます。
  • -T は上から段ごとに委任を読み、止まった段のサーバーを個別に確かめます。-S は失敗を示す印が最初に出る段を探し、凡例は手元の出力に従います。

お気軽にご相談ください

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