2026年6月10日
2026年6月10日
drill と dig の違いと使い分け|オプションの対応表、DNSSEC の確かめ方、環境に合わせた選び方
drill と dig は、どちらも DNS サーバーに問い合わせて答えをそのまま表示するコマンドで、できることの大部分は共通しています。違いが出るのは、オプションの書き方、DNSSEC の署名の連鎖を自分でたどれるかどうか、暗号化 DNS への対応、そして最初からどの環境に入っているかの4点です。結論から言えば、普段の確認は手元に入っている方で十分で、DNSSEC の連鎖を手早く確かめたいときは drill、暗号化 DNS や情報の多さを求めるなら dig が向いています。この記事では、両者の対応表と、つまずきやすい書き方の違い、場面ごとの選び方を説明します。
出自と入れ方
dig は ISC の BIND 9 に付属するコマンドです。macOS には最初から入っており、Debian・Ubuntu では bind9-dnsutils(古い版では dnsutils)、RHEL 系では bind-utils、Alpine Linux では bind-tools というパッケージで入ります。解説記事やサポートの手順書のほとんどが dig を前提にしているのは、この普及の広さが理由です。
drill は NLnet Labs の DNS ライブラリ ldns に付属するコマンドです。Debian・Ubuntu では ldnsutils、macOS では Homebrew の ldns、Alpine Linux では drill という名前のパッケージで入り、FreeBSD では標準で使えます。パッケージが小さいため、コンテナの中で手早く DNS を確かめたいときにも使われます。
ここに挙げたパッケージ名は記事作成時点のものです(2026年10月現在)。配布元の都合で変わることがあるので、見つからないときは各ディストリビューションのパッケージ検索で確かめてください。Windows では、どちらも WSL の Linux 環境に入れて使うのが手軽です。
基本の書き方
どちらも「問い合わせ先・名前・種別」を並べる書き方で、見た目はほぼ同じです。
dig @1.1.1.1 www.example.com A
drill @1.1.1.1 www.example.com A
@ を省くと、OS に設定された DNS サーバー(Linux なら多くの場合 /etc/resolv.conf の内容)に問い合わせます。種別を省いた場合はどちらも A になります。
最も間違えやすいのが -t です。dig の -t は種別の指定ですが、drill の -t は「TCP で問い合わせる」という意味です。dig のつもりで drill -t MX example.com と書くと、意図とは違う解釈になります。drill では、種別は名前の後ろに書くと覚えておくと迷いません。
オプションの対応表
よく使う操作の対応を表にまとめます。drill の細かい挙動は版によって違うことがあるため、使う前に man drill で確かめてください。
| やりたいこと | dig | drill |
|---|---|---|
| 値だけを表示する | +short |
該当なし(-Q で表示を減らせる版がある) |
| TCP で問い合わせる | +tcp |
-t |
| ルートから委任をたどる | +trace |
-T |
| DNSSEC の署名も受け取る | +dnssec |
-D |
| 署名の連鎖を検証する | 該当なし(delv を使う) | -S |
| 再帰を求めない | +norecurse |
-o rd |
| 検証を止めて聞く | +cd |
-o CD |
| 逆引き | -x |
-x |
| IPv4 / IPv6 に限る | -4 / -6 |
-4 / -6 |
| 暗号化 DNS(DoT・DoH) | +tls / +https(BIND 9.18 以降) |
非対応 |
drill の -o は、応答のヘッダーにあるフラグを指定する書き方で、大文字で「立てる」、小文字で「下ろす」という意味になります。権威サーバーに再帰を求めずに聞きたいときは、RD を下ろす -o rd を使います。
出力の違い
drill の出力は dig とよく似ていて、ヘッダー、QUESTION、ANSWER、AUTHORITY、ADDITIONAL の各セクション、最後に応答時間や問い合わせ先の行が続きます。dig は先頭にバージョンの行と、EDNS の情報を示す OPT PSEUDOSECTION を表示するので、dig の方が情報は多めです。応答コード(rcode や status)とフラグ(aa・ad など)の読み方はほぼ同じなので、どちらかの読み方を身につければ、もう一方もすぐに読めます。
スクリプトで値だけを取り出したいときは、dig の +short が便利です。drill には同じ働きのオプションが無いので、ANSWER セクションの行を grep や awk で拾う処理が必要になります。どちらの場合も、「名前が存在しない」ときにコマンドの終了コードが成功のまま返ることがあるため、終了コードだけで判断せず、出力の応答コードを確かめてください。
DNSSEC を確かめるときの違い
DNSSEC の扱いは、両者の違いが最もはっきり出る部分です。
dig の +dnssec は、答えと一緒に署名(RRSIG)を受け取るだけで、dig 自身は署名を検証しません。検証を行うキャッシュサーバーに問い合わせ、答えに ad フラグが付いているかで「そのサーバーが検証に成功した」ことを読み取ります。dig の古い版には署名を自分でたどる +sigchase がありましたが、現在の版では削除されており、BIND では同梱の delv が検証の役割を担っています。
drill の -S は、ルートから順に DS と DNSKEY をたどり、各段で署名が検証できたかを記号付きで表示します。キャッシュサーバーの判定に頼らずに、どの段で連鎖が切れているかを手元で確かめられるのが利点です。トラストアンカーを記したファイルを -k で渡す使い方もあります。
drill -D www.example.com A # 署名も受け取る
drill -S www.example.com A # 署名の連鎖をたどって検証する
dig @8.8.8.8 www.example.com A +dnssec # ad フラグで検証の成否を見る
DNS 事業者を移したあとに一部の利用者だけ名前解決に失敗する、といったときは、drill の -S で連鎖が切れている段を探すと、親ゾーンの DS と新しい鍵の不一致を見つけやすくなります。
委任をたどるときの違い
dig の +trace と drill の -T は、どちらもルートサーバーから順に問い合わせ、委任の段をたどって最終的な答えまで表示します。手元のキャッシュサーバーを使わずに、各段のサーバーへ直接問い合わせるため、キャッシュの影響を受けずに「今の委任がどうなっているか」が分かります。表示の細かさは dig の方が多く、各段でどのサーバーが答えたかが行ごとに示されます。drill の -T は表示が簡潔で、委任の流れを素早く追うのに向いています。
場面ごとの選び方
- サーバーやコンテナにどちらか一方しか入っていない:入っている方を使います。基本の確認ならどちらでも同じ結果が得られます。
- 手順書やサポートの指示に沿って確かめる:指示が dig で書かれていることが多いため、dig を使う方が読み替えの手間がかかりません。
- DNSSEC の連鎖を確かめる:drill の
-S、または BIND の delv を使います。 - DoT や DoH の動作を確かめる:BIND 9.18 以降の dig を使います。drill は対応していないので、kdig や doggo も候補になります。
- 値をスクリプトで使う:dig の
+shortが扱いやすく、行の取り出しが簡単です。
まとめ
- drill と dig は基本の書き方がほぼ同じですが、drill の
-tは TCP の指定で、種別は名前の後ろに書きます。 - 値だけの表示は dig の
+short、署名の連鎖の検証は drill の-Sが得意です。dig で検証の成否を見るときは、検証を行うキャッシュサーバーのadフラグを確かめます。 - 暗号化 DNS は BIND 9.18 以降の dig が対応し、drill は対応していません。
- 普段は手元に入っている方で十分で、手順書に合わせるなら dig、DNSSEC の調査なら drill と使い分けます。