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 と使い分けます。

お気軽にご相談ください

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