2026年6月8日
2026年6月8日
kdig と dig の違いと使い分け|dig の調査手順を kdig で再現するときのオプション対応と挙動の差
kdig と dig は書式がよく似ていますが、オプション名や既定の動作に細かな違いがあり、dig 前提の手順書をコマンド名だけ置き換えると、エラーになったり、結果の見え方が変わったりします。この記事では、dig でよく使う調査手順を kdig で再現するときのオプションの対応と、比較するときに注意したい挙動の差を整理し、調査の場面ごとにどちらを使うかを判断できるようにします。
両ツールの出自や導入方法、暗号化 DNS への対応の概要は別の記事で扱っているため、ここでは「すでに片方を使えて、もう片方に乗り換える・併用する」人向けに、つまずきやすい点に絞って説明します。
最初に版を確認する
kdig も dig も、版によって使えるオプションが変わります。手順を試す前に、手元の版を確かめておくと、存在しないオプションで悩む時間を減らせます。
dig -v # BIND 9 の版が表示される
kdig -V # Knot DNS の版が表示される
man kdig # 手元の版で使えるオプションの一覧
ディストリビューションの標準パッケージは版が古いことがあります。たとえば長期サポート版の OS では、dig が暗号化 DNS 関連のオプションに対応していない版のまま、ということもあります。この記事のオプションは執筆時点(2026年10月現在)の各ツールのマニュアルを基準にしていますが、細部は手元の man の記載を優先してください。
よく使うオプションの対応
dig の手順書に出てくる主なオプションと、kdig での書き方の対応です。名前が同じでも意味が少し違うものがあるため、比較が必要な場面として表にまとめます。
| 目的 | dig | kdig |
|---|---|---|
| 回答の値だけ表示 | +short |
+short |
| 回答セクションだけ表示 | +noall +answer |
+noall +answer |
| 再帰を要求しない | +norecurse |
+norecurse |
| TCP で問い合わせ | +tcp |
+tcp |
| DNSSEC の署名も要求 | +dnssec |
+dnssec |
| 検証を無効にして問い合わせ | +cd |
+cdflag |
| 応答したサーバーの識別子 | +nsid |
+nsid |
| 1回の待ち時間 | +time=秒 |
+timeout=秒 |
| 再試行の回数 | +tries=回 / +retry=回 |
+retry=回 |
| 委任をたどる | +trace |
対応なし |
| 逆引き | -x アドレス |
-x アドレス |
注意したいのは待ち時間と再試行です。dig の +time は kdig では受け付けられず、+timeout を使います。監視スクリプトをコマンド名だけ差し替えると、ここで失敗しやすいです。また、dig の +tries は「最初の1回を含む試行回数」、+retry は「再試行の回数」と意味が分かれています。kdig の +retry は再試行の回数なので、dig の +tries=3 に相当するのは kdig の +retry=2 と考えると合わせやすくなります。
検証を無効にする CD フラグは、dig では +cd、kdig では +cdflag と名前が違います。DNSSEC の検証に失敗して SERVFAIL になっているのかを切り分けるときに使うオプションなので、名前の違いを覚えておくと便利です。
比較で食い違いやすい挙動の差
同じサーバーに同じ名前を問い合わせても、両ツールの結果の見え方が違うことがあります。DNS の応答が違うのではなく、問い合わせの組み立て方や表示の仕方が違うためです。
EDNS と DNS Cookie の付け方
最近の dig は、既定で EDNS を付け、DNS Cookie も送る動作になっています。kdig は、オプションの指定によって EDNS を付けるかどうかが変わる場合があります。古い権威サーバーやファイアウォールが EDNS 付きの問い合わせをうまく扱えないとき、片方のツールだけタイムアウトする、という現象が起きることがあります。
食い違いが出たら、両方の出力で OPT の疑似セクションが表示されているか、つまり EDNS が付いていたかを見比べてください。dig では +noedns、kdig では +noedns で EDNS を外して問い合わせられるので、外したときにだけ応答が返るなら、相手側の EDNS の扱いに問題がある可能性が高いです。
応答が切り詰められたときの扱い
UDP の応答が大きすぎると、サーバーは TC フラグを立てて切り詰めた応答を返します。dig も kdig も、既定ではこのとき TCP で問い合わせ直します。どちらも +ignore を付けると問い合わせ直しをしないので、「UDP だけだとどう見えるか」を確認したいときに使います。DNSSEC の署名付きの大きな応答や、TXT レコードを大量に持つドメインで、TCP の 53 番ポートが塞がれていないかを確かめるときに役立ちます。
設定ファイルと既定の問い合わせ先
dig は ~/.digrc に書いた既定のオプションを読みますが、kdig はこのファイルを読みません。~/.digrc に +noall +answer を書いている人が kdig を使うと、出力が急に長くなったように見えます。
どちらも @ で問い合わせ先を省くと、/etc/resolv.conf に書かれたサーバーへ問い合わせます。結果を比べるときは、@ で問い合わせ先を明示して、同じサーバーに聞いていることをはっきりさせてください。
終了コード
dig は、NXDOMAIN(名前が存在しない)や SERVFAIL の応答でも、応答を受け取れていれば終了コード 0 を返し、応答が無かったときに 0 以外を返します。kdig の終了コードの規則は dig と同じとは限りません。スクリプトで成功・失敗を判定するなら、終了コードだけに頼らず、出力のヘッダーにある status の値も確認する作りにしておくと、ツールを差し替えても判定がずれにくくなります。
調査の場面ごとの使い分け
ここまでの差を踏まえ、調査の場面ごとに向いているツールを整理します。
- ネームサーバー変更が反映されない:委任をたどる
+traceを使うため dig を選びます。kdig で同じことをするには、親ゾーンの権威サーバーに+norecurseで NS を問い合わせ、次の段階のサーバーに順に聞いていく手作業になります。 - DNSSEC 導入後に一部の利用者だけ名前解決できない:dig と kdig のどちらでも調べられます。検証するリゾルバーに通常どおり問い合わせて SERVFAIL になり、CD フラグ付き(dig は
+cd、kdig は+cdflag)なら答えが返る場合は、署名や DS レコードの問題が疑われます。 - anycast の権威サーバーのどの拠点が答えたかを知りたい:両方とも
+nsidが使えます。相手のサーバーが NSID に対応していれば、拠点の識別子が表示されます。 - 暗号化 DNS のリゾルバーが応答するかを確かめたい:kdig のほうがオプションがそろっていて扱いやすいです。
- サポート窓口や手順書とやり取りする:dig の出力を貼るほうが話が早く進みます。多くの手順書が dig を前提にしているためです。
迷ったら、普段は dig、暗号化 DNS や特定のオプションが必要なときだけ kdig、という分け方が現実的です。両方を入れておき、結果が食い違ったら上の「挙動の差」の順に確認すると、ツールの違いと DNS 側の問題を切り分けやすくなります。
WordPress サイトの運用で気をつけること
WordPress サイトの移転や DNS 事業者の変更では、作業前後で同じ問い合わせを繰り返して結果を比べます。このとき、作業前に dig で取った記録と、作業後に kdig で取った記録を比べると、上で説明した表示の差を「変化」と取り違えることがあります。比較する記録は、同じツール、同じオプション、同じ問い合わせ先で取るようにしてください。
また、レンタルサーバーの SSH 環境では dig しか使えないことが多く、kdig は手元の PC や VPS で使う、という分担になりがちです。手元とサーバー側では問い合わせ先のリゾルバーも違うため、結果を比べるときは @ で同じ公開 DNS や権威サーバーを指定して揃えます。
まとめ
- kdig と dig は書式が似ていますが、待ち時間(
+timeと+timeout)、再試行、CD フラグ(+cdと+cdflag)などオプション名が違うものがあります。 - 既定の EDNS や DNS Cookie の扱い、
~/.digrcの有無、終了コードの規則が違うため、結果の比較は同じツール・同じオプション・同じ問い合わせ先で行います。 - 委任の追跡は dig の
+trace、暗号化 DNS の確認は kdig が向いています。 - 片方だけ失敗するときは、EDNS の有無、TCP への切り替え、問い合わせ先の順に確かめます。
- オプションは版で変わるため、手元の
manの記載を優先します。