2026年6月16日
2026年6月16日
DNSViz と delv の違いと使い分け|DNSSEC の不具合を「権威サーバー全体」と「利用者の経路」の両面から確かめる
DNSViz は、ルートから対象のゾーンまでの各段階の権威サーバーにまとめて問い合わせ、委任と DNSSEC の署名のつながりを総点検して図とエラーの一覧で示す診断ツールです。delv は、1台のキャッシュサーバーから受け取った答えを手元で DNSSEC 検証し、「その名前がいま検証に通るか」を短い出力で返すコマンドです。「どこが壊れているか」を探すのは DNSViz、「利用者の環境からいま正しく引けるか」を確かめるのは delv、と覚えておくと迷いません。この記事では、2つのツールの見ている範囲の違い、場面ごとの使い分け、結果が食い違ったときの読み方を説明します。
2つのツールの位置づけ
| 観点 | DNSViz | delv |
|---|---|---|
| 問い合わせ先 | 委任の各段階にある権威サーバーすべて | 指定した1台のキャッシュサーバー(既定は resolv.conf の設定) |
| 判定の視点 | ゾーンを公開する側から見た整合性 | 名前を引く側から見た検証結果 |
| 結果の形 | 図、エラーと警告の一覧、JSON | 先頭の検証結果のコメントとレコード |
| 1回にかかる時間 | 数十秒程度かかることもある | 通常は短い |
| 実行する場所 | Web 版(dnsviz.net)、または CLI 版 | 手元の端末やサーバー |
| 向く用途 | 変更作業の前後の診断、原因の特定 | 日常の確認、監視、利用者の環境での再現 |
delv は ISC の BIND に付属するコマンドで、dig と同じパッケージに入っています。Debian・Ubuntu では bind9-dnsutils、RHEL 系では bind-utils が一般的です(2026年10月現在)。DNSViz は Web 版のほか、オープンソースの CLI 版を Python のパッケージとして導入できます。
DNSViz が得意なこと
DNSViz の強みは「すべての権威サーバーに、いろいろな聞き方で問い合わせる」点です。キャッシュサーバーは権威サーバーのうち1台から答えを取るだけなので、利用者の側からは見えない問題も DNSViz なら表に出ます。
- 権威サーバーのうち1台だけが古い鍵や古い署名を配っている
- 親ゾーンの DS が、子ゾーンに存在しない鍵を指している
- 署名の有効期限が切れている、または切れかけている
- 存在しない名前への応答(NSEC・NSEC3 による否定の証明)が正しく作られていない
- IPv6 や TCP で問い合わせたときだけ応答が無い
1台だけが壊れている状態では、キャッシュサーバーがどのサーバーに当たるかで成功と失敗が入れ替わり、「ときどき引けない」という分かりにくい症状になります。この種の原因を絞り込むには、全サーバーを並べて比べる DNSViz が向いています。
Web 版で解析した結果はサイト上で他の人も閲覧できる形で残るため、社内専用の名前や公開前のゾーンは Web 版に入れず、CLI 版を自分の環境で動かします。CLI 版の使い方は別の記事で扱っています。
delv が得意なこと
delv は、利用者と同じキャッシュサーバーを通した答えを検証できる点が強みです。@ で問い合わせ先を指定すれば、社内のキャッシュサーバーや公開 DNS ごとに結果を比べられます。
# 公開 DNS を経由した答えを検証する
delv @1.1.1.1 www.example.com A
# 検証を止めた結果と比べる
delv @1.1.1.1 www.example.com A -i
# 検証の過程を表示する
delv @1.1.1.1 www.example.com A +vtrace
先頭に ; fully validated と出れば、ルートからのつながりで検証に通った答えです。; unsigned answer は署名されていないゾーンの答えで、DNSSEC を使っていないドメインでは正常な表示です。検証に失敗すると、その旨と理由が表示されます。文言は版によって少し違うことがあります。
-i を付けると答えが返り、付けないと失敗する場合は、名前解決の経路ではなく DNSSEC の設定に原因があると判断できます。1回の実行が軽いので、スクリプトに組み込んで繰り返し実行する用途にも向いています。
一方で、delv が見ているのは「そのキャッシュサーバーが持っていたデータ」です。キャッシュに古い答えが残っていれば、直したはずの問題がまだ見えたり、逆に壊れたばかりの問題がまだ見えなかったりします。どの権威サーバーが原因かも delv だけでは分かりません。
場面ごとの使い分け
「サイトが開かない」と連絡を受けたとき
- 連絡をくれた人が使っているキャッシュサーバー(分からなければ主な公開 DNS)を指定して delv を実行し、検証に失敗しているかを確かめます。
- 失敗していれば
-iを付けて再実行します。答えが返るなら DNSSEC が原因です。 - DNSViz で対象の名前を解析し、エラーが出ている箇所(DS と鍵の対応、特定の権威サーバー、署名の期限など)を特定します。
- 修正したら DNSViz で再解析してエラーが消えたことを確かめ、続けて delv で各キャッシュサーバーからの結果を確認します。
修正後もしばらく失敗が続くことがあります。キャッシュサーバーによっては、検証に失敗した結果を一定時間保持するためです。待つ時間の目安は、関係するレコードの TTL です。
DNSSEC を有効にする・鍵や DS を差し替えるとき
作業の各段階の前後に DNSViz で解析し、結果の図を保存しておきます。DS をレジストラに登録したあとは、delv を複数のキャッシュサーバーに向けて実行し、fully validated に変わっていくかを見ます。DNSViz で整合性を、delv で利用者側への反映を確かめる、という役割分担です。DS の登録は、新しい鍵がすべての権威サーバーで公開されたことを DNSViz で確かめてから行います。
署名の期限切れを防ぐ監視
日常の監視には delv が手軽です。次の例は、いくつかの公開 DNS で検証結果の1行目を記録します。
#!/bin/sh
# 検証結果の1行目を記録する例(表示の文言は手元の版で確認)
name=www.example.com
for r in 1.1.1.1 8.8.8.8 9.9.9.9; do
res=$(delv @"$r" "$name" A 2>&1 | head -n 1)
echo "$(date '+%F %T') $r $res"
done
cron で定期的に実行し、fully validated 以外の行が出たら DNSViz で詳しく調べます。ただし delv は「いま失敗しているか」を見る道具で、期限が近づいていることの警告は出しません。期限切れを事前に知りたい場合は、DNSViz の CLI 版を定期的に実行して警告を拾うか、DNSSEC に対応した外部の監視サービスを検討します。
社内専用のゾーンを確かめるとき
社内向けのゾーンを独自の鍵で署名している場合、ルートからのつながりが無いため、delv も DNSViz も既定の設定では検証できません。delv では -a で独自のトラストアンカーを書いたファイルを指定し、DNSViz の CLI 版ではトラストアンカーを与えて解析します。どちらも指定の書き方は版で変わることがあるので、手元のマニュアルで確かめてください。
結果が食い違うときの読み方
DNSViz ではエラーなのに、delv では fully validated になる一部の権威サーバーだけに問題がある可能性が高い状態です。キャッシュサーバーがたまたま正常なサーバーから答えを取っていると、delv は成功します。また、DNSViz が IPv6 や TCP での問い合わせの失敗を指摘している場合、IPv4 と UDP で問い合わせたキャッシュサーバーでは問題が表に出ません。どちらも、条件次第で利用者に影響するので修正しておきます。
delv では失敗するのに、DNSViz ではエラーが無い次の順に疑います。
- キャッシュサーバーに修正前の答えが残っている。別のキャッシュサーバーを指定して結果が変わるかを確かめます。
- 手元の delv が古く、組み込みのルートのトラストアンカーが現在のものと合っていない。OS のパッケージを更新します。
- 問い合わせ先がローカルのスタブリゾルバ(
127.0.0.53など)で、検証に必要なレコードを中継できていない。@1.1.1.1のように外部のキャッシュサーバーを指定して比べます。 - 手元のネットワークが大きな UDP の応答や TCP での DNS を止めている。別の回線で再現するかを確かめます。
両方で失敗するゾーンの設定に問題がある状態です。DNSViz の図で、どの段階のどのつながりが切れているかを確認して修正します。
まとめ
- DNSViz は全権威サーバーを調べてゾーンを公開する側の整合性を点検し、delv は1台のキャッシュサーバーを通した答えを利用者の側から検証します。
- 原因の特定や変更作業の前後の診断は DNSViz、日常の確認や監視、利用者の環境での再現は delv に任せます。
- delv で失敗したら
-iで検証なしの結果と比べ、DNSSEC が原因なら DNSViz で場所を探します。 - 結果が食い違うときは、一部のサーバーだけの問題、キャッシュに残った古い答え、手元の delv やネットワークの事情を順に疑います。
- 社内専用の名前は Web 版に入れず、CLI 版と独自のトラストアンカーで確かめます。