2026年6月16日
2026年6月16日
kdig と DNSViz の違いと使い分け|DNSViz で見つけた問題を、kdig で1台ずつ再現して確かめる
DNSViz は、ルートから対象のゾーンまでの委任と DNSSEC の署名のつながりを、すべての権威サーバーに問い合わせて総点検し、図とエラーの一覧で示す診断ツールです。kdig は、指定した1台のサーバーに、指定した条件(IPv4 か IPv6 か、UDP か TCP か、暗号化するか、など)で1回だけ問い合わせ、応答をそのまま見せるコマンドです。「どこがおかしいか」を広く探すのが DNSViz、「その1台がその条件で本当にそう答えるか」を確かめて記録に残すのが kdig、という関係です。この記事では、2つのツールの違いと、DNSViz で見つけた問題を kdig で再現して原因を確定させ、DNS 事業者への連絡や修正後の確認につなげる流れを説明します。
2つのツールの違い
| 観点 | kdig | DNSViz |
|---|---|---|
| 1回の実行で調べる範囲 | 指定した1台・1つの問い合わせ | 委任の各段の権威サーバーすべて |
| DNSSEC | 署名や DS を表示するだけで、検証はしない | つながりを解析し、エラーと警告を出す |
| 通信方式の指定 | UDP・TCP・DoT・DoH・DoQ、IPv4・IPv6 を選べる | 解析の中で各方式を試し、問題を報告する |
| 結果の形 | 応答そのもの(テキスト、新しめの版では JSON も) | 図、エラーと警告の一覧、JSON |
| 実行する場所 | 手元の端末やサーバー | Web 版(dnsviz.net)または CLI 版 |
kdig は Knot DNS に付属するコマンドで、Debian・Ubuntu では knot-dnsutils、RHEL 系では knot-utils などのパッケージで入れられます。DNSViz は Web 版のほか、オープンソースの CLI 版を Python のパッケージとして導入できます。どちらも対応する機能やオプションは版によって変わります(2026年10月現在)。
DNSViz が向いている場面
DNSViz の価値は、自分では思いつかない問い合わせまで含めて、まとめて試してくれる点にあります。次のような問題は、1台ずつ手で調べていると見落としやすいものです。
- 親ゾーンに登録された NS と、ゾーンの中に書かれた NS が食い違っている
- 権威サーバーのうち1台だけが、古い署名や古い鍵を配っている
- 親ゾーンの DS が、子ゾーンに存在しない鍵を指している
- 署名の有効期限が切れている、または近い
- IPv6 や TCP で問い合わせたときだけ応答が無い
DNSSEC の有効化や DNS 事業者の移転の前後に1回ずつ解析し、結果を保存しておくと、変更で何が変わったかを比べられます。Web 版で解析した結果はサイト上で他の人も閲覧できる形で残るため、社内専用の名前や公開前のゾーンは CLI 版を自分の環境で使います。
# CLI 版の例:権威サーバーへの問い合わせ結果を保存し、エラーを一覧にする
dnsviz probe -A -a . example.com > example.json
dnsviz grok -r example.json
オプションの意味や書き方は版で変わることがあるため、dnsviz probe -h で確かめてください。
kdig が向いている場面
kdig の価値は、条件を1つずつ固定して再現できる点にあります。DNSViz のエラーは「どのサーバーに、どの方式で聞いたとき」の結果かが書かれていますが、それが一時的な不調なのか、いつでも起きるのかは、同じ条件で問い合わせ直してみないと分かりません。
# 特定の権威サーバーのアドレスに、IPv6・TCP で再帰なしに聞く
kdig -6 @2001:db8::53 example.com SOA +norec +tcp
# どの拠点が答えたかを確かめる(NSID に対応したサーバーのみ)
kdig @192.0.2.53 example.com SOA +norec +nsid
kdig の出力の末尾には、問い合わせた日時(Time)と、問い合わせ先のアドレス・ポート・通信方式(From)が出ます。この出力をそのまま保存しておけば、「いつ、どのサーバーに、どの方式で聞いたらこう返った」という記録になり、DNS 事業者に調査を頼むときの材料として使えます。エニーキャストで運用されているサーバーでは、+nsid で返る識別子があると、どの拠点の問題かを伝えやすくなります。
一方で、kdig は DNSSEC の検証を行いません。+dnssec を付ければ署名(RRSIG)や DS が表示されますが、それらが正しくつながっているかの判断は DNSViz(または delv)に任せます。kdig の結果だけを見て「DNSSEC は問題ない」と結論しないようにしてください。
DNSViz の指摘を kdig で確かめる
DNSViz が示す主な指摘と、それを kdig で再現するときの問い合わせの組み合わせです。アドレスや名前は例なので、DNSViz の結果に出ているものに置き換えます。
親と子で NS が食い違う
# 親ゾーン(.com の例)に登録されている委任
kdig @a.gtld-servers.net example.com NS +norec
# ゾーンの中に書かれている NS
kdig @ns1.example.net example.com NS +norec
親側の答えは AUTHORITY に、子側の答えは ANSWER に NS が並びます。両者の一覧を比べ、片方にしか無いネームサーバーがないかを見ます。親側を直すにはレジストラの管理画面、子側を直すには DNS 事業者の管理画面を使います。
1台だけシリアルや署名が古い
for a in 192.0.2.53 198.51.100.53; do
kdig @"$a" example.com SOA +norec +short
done
+short の SOA は、3番目の値がシリアル番号です。1台だけ数字が小さければ、そのサーバーへのゾーンの転送が止まっている可能性があります。署名の期限を見たいときは、+dnssec +multiline を付けて RRSIG の有効期限(UTC の年月日時分秒)を確かめます。
DS と鍵が合わない
# 親ゾーンにある DS
kdig @a.gtld-servers.net example.com DS +norec
# 権威サーバーが公開している鍵
kdig @ns1.example.net example.com DNSKEY +norec +dnssec +multiline
DS の値の最初の数字は、指している鍵のタグです。DNSKEY 側のタグは、+multiline の注釈に表示される版もあります。表示されない場合は、DNSViz の図に出ている鍵のタグと照らし合わせます。DS が指す鍵がどの権威サーバーにも無ければ、検証を行うキャッシュサーバーでは名前が引けなくなっているはずです。
TCP や IPv6、大きな応答で失敗する
kdig @192.0.2.53 example.com DNSKEY +norec +dnssec +tcp
kdig -6 @2001:db8::53 example.com DNSKEY +norec +dnssec
kdig @192.0.2.53 example.com DNSKEY +norec +dnssec +bufsize=1232
UDP では答えるのに TCP では答えない、IPv4 では答えるのに IPv6 では答えない、といった差が出れば、サーバーかその手前のファイアウォールの設定の問題です。DNSSEC の鍵や署名を含む応答は大きくなりやすく、TCP で取り直せないと名前解決に失敗する環境があります。なお、手元のネットワーク側で IPv6 や TCP の DNS が使えないと、サーバーに問題が無くても同じ症状に見えます。別の回線からも試して、手元の事情でないことを確かめてください。
修正したあとの確認
- 指摘のあった条件で kdig を実行し直し、応答が変わったことを確かめます。
- DNSViz で再解析し、エラーが消えたことを確かめます。Web 版では、前回の解析結果が残っていることがあるので、新しく解析し直した結果であることを日時で確認します。
- 利用者側への影響は、キャッシュサーバーを経由した確認(delv など)で確かめます。キャッシュに失敗の結果や古い答えが残っている間は、修正後もしばらく症状が続くことがあります。
DNS の設定を変更する前には、DNS 事業者の管理画面で現在のレコードを書き出すか控えておき、元に戻せるようにしておきます。
まとめ
- DNSViz は全権威サーバーと委任の各段をまとめて点検する診断ツール、kdig は1台・1条件の応答をそのまま見るコマンドです。
- 問題を広く探すのは DNSViz、指摘された条件で再現して記録を残すのは kdig、と役割を分けます。
- kdig は
-6・+tcp・+nsid・+dnssecなどで条件を固定でき、出力のTimeとFromの行が記録として役立ちます。 - kdig は DNSSEC の検証をしないため、署名のつながりの判断は DNSViz や delv に任せます。
- 修正後は kdig で再現が止まったこと、DNSViz でエラーが消えたことの両方を確かめます。