2026年6月17日
2026年6月17日
whatsmydns の結果をコマンドで比較確認する方法|dig で権威サーバーと公開 DNS の答えを並べて照らし合わせる
whatsmydns.net で各地の答えがばらついて見えたら、同じ問い合わせを dig で「権威サーバー」と「主要な公開 DNS」に投げ、答えを横に並べて比べると、どこで食い違っているかを手元で特定できます。この記事では、比較の基準をどこに置くか、比較を一度に行う小さなスクリプト、結果が一致しないときの読み方、Windows での同じ確認方法までを説明します。
「whatsmydns コマンド」で何をするのか
whatsmydns.net はブラウザで使うウェブサービスで、ドメイン名とレコードの種別を入れると、世界各地のキャッシュサーバーが返した値を地図と一覧で表示します。筆者が確認した範囲では、whatsmydns 自体の公式コマンドラインツールは案内されていません(2026年10月現在)。API の提供や利用条件は変わることがあるため、使う場合はサイトの案内を確認してください。
そこでこの記事でいう「コマンドで比較確認する」とは、whatsmydns で見えた状態を dig で手元から再現し、次の2つを突き合わせることを指します。
- 基準となる答え:ゾーンを実際に持っている権威サーバーが今返している値
- 各地のキャッシュの答え:whatsmydns の各地点や、Google・Cloudflare・Quad9 などの公開 DNS が返している値
whatsmydns だけでは「違う値の地点がある」ことは分かっても、その違いが権威サーバー側の問題なのか、キャッシュが残っているだけなのか、地域ごとに答えを変える設定によるものなのかは判断できません。コマンドで基準と並べることで、その切り分けができるようになります。
手順1:whatsmydns でばらつきの様子を控える
最初に whatsmydns.net で対象の名前と種別(A、AAAA、CNAME、MX、TXT、NS など)を指定して検索し、次の点をメモします。
- 確認した時刻
- 新しい値を返している地点と、古い値や別の値を返している地点の数
- 「結果なし」や失敗になっている地点があるか
whatsmydns の一覧には地点名と一緒に問い合わせ先の事業者名が表示されることがあります。表示される地点や事業者は更新されるため固定の対応表は作れませんが、大手の公開 DNS が含まれていれば、手順2でその事業者に直接問い合わせると同じ状態を再現しやすくなります。
手順2:dig で権威サーバーと公開 DNS を並べる
次のスクリプトは、ゾーンの NS をすべて調べてそれぞれの答えと SOA のシリアル番号を表示し、続けて主要な公開 DNS の答えを「最初の権威サーバーの答え」と比べて OK / DIFF を付けます。dig が入っている Linux や macOS で動きます。
#!/bin/sh
# 使い方: sh dns_compare.sh <名前> <種別> <ゾーン>
# 例: sh dns_compare.sh www.example.com A example.com
name="$1"; type="$2"; zone="$3"
if [ -z "$zone" ]; then
echo "usage: $0 name type zone" >&2
exit 1
fi
# 1) 権威サーバーの答え(最初の NS の答えを基準にする)
ref=""
for ns in $(dig +short "$zone" NS); do
ans=$(dig @"$ns" "$name" "$type" +norecurse +short | sort | tr '\n' ' ')
serial=$(dig @"$ns" "$zone" SOA +norecurse +short | awk '{print $3}')
printf 'AUTH %-26s serial=%-12s %s\n' "$ns" "$serial" "$ans"
[ -z "$ref" ] && ref="$ans"
done
# 2) 公開 DNS の答えを基準と比べる
for r in 8.8.8.8 1.1.1.1 9.9.9.9 208.67.222.222; do
ans=$(dig @"$r" "$name" "$type" +short | sort | tr '\n' ' ')
if [ "$ans" = "$ref" ]; then mark=OK; else mark=DIFF; fi
printf 'CACHE %-26s %-4s %s\n' "$r" "$mark" "$ans"
done
ゾーンを3つ目の引数で明示しているのは、example.co.jp のようにドメインの区切りが2段とは限らないためです。値は sort で並べ替えてから比べているので、複数の A レコードが返る順番の違い(ラウンドロビン)では DIFF になりません。
残り時間も比べたいときは、+short の代わりに +noall +answer を使います。権威サーバーに +norecurse で問い合わせると ANSWER SECTION の TTL はゾーンに設定した値そのままで、公開 DNS に問い合わせるとキャッシュに残っている秒数が表示されます。
dig @ns1.example.net www.example.com A +norecurse +noall +answer
dig @8.8.8.8 www.example.com A +noall +answer
公開 DNS 側の TTL が設定値より小さく、0 に向かって減っていくなら、それはキャッシュから答えている状態です。この残り秒数が、その事業者で古い値が消えるまでのおおよその時間の目安になります。
手順3:比較結果の読み方
出力のパターンごとに、考えられる原因と次の確認を順に挙げます。上にあるものほどよく見かけるケースです。
権威サーバーは新しい値、公開 DNS の一部が DIFF
もっともよくある状態で、変更前の値がキャッシュに残っているだけです。手順2の TTL の残り秒数を確認し、その時間がたってから再度スクリプトを実行します。TTL を下げてすぐ値を変えた場合は、下げる前の長い TTL でキャッシュされた分がその期限まで残る点に注意してください。
権威サーバー同士で答えやシリアルが違う
AUTH の行で値や serial が一致しないなら、プライマリとセカンダリの同期が済んでいません。キャッシュ側はどちらの権威サーバーに尋ねたかで答えが変わるため、whatsmydns でもばらつきが続きます。この場合は待っても解消しないことがあるので、DNS 事業者の管理画面での反映状況や、自前サーバーならゾーン転送の設定とログを確認します。
基準の値そのものが想定と違う
AUTH の行がすべて古い値なら、変更が権威サーバーに入っていません。dig +short example.com NS の結果が、編集した DNS 事業者のネームサーバーと一致しているかを確かめます。別の事業者が使われていると、その管理画面での変更は効きません。
whatsmydns では各地が新しいのに、自分の環境だけ古い
スクリプトの公開 DNS の行が OK なのに、ブラウザやサーバーからの通信が古い宛先へ向かうなら、原因は手元にあります。何も指定しない dig www.example.com A の答えと比べ、OS やルーター、プロバイダーのキャッシュ、hosts ファイルの書き換えを疑います。
地点によって別の値が返り続ける
CDN や地域別の振り分けを使っていると、地点ごとに違う IP が返るのが正常な動作です。Cloudflare などでプロキシを有効にしたレコードは、オリジンサーバーではなく事業者側の IP が返ります。また、公開 DNS の中には問い合わせ元の地域情報(EDNS Client Subnet)を権威サーバーへ渡すものがあり、同じ公開 DNS でも地域によって答えが変わることがあります。dig の +subnet=203.0.113.0/24 のような指定で地域を変えて試せますが、この情報を受け付けるかどうかはリゾルバーごとに異なります。
CNAME の名前で DIFF になる
CNAME を持つ名前に A で問い合わせると、公開 DNS は「CNAME とその先の A」を返す一方、権威サーバーは自分のゾーンにある CNAME だけを返すことがあります。この場合は種別を CNAME にして比較するか、CNAME の行き先の名前で改めて比較します。
「結果なし」が続く
新しく作ったサブドメインを、作る前に一度引いていると「存在しない」という否定応答がキャッシュされます。保持される時間は SOA の設定(最後の値と SOA 自体の TTL の小さいほう)で決まるため、dig example.com SOA +short で確認できます。
Windows で比較する場合
Windows では PowerShell の Resolve-DnsName で同じ比較ができます。-DnsOnly を付けると hosts ファイルなど DNS 以外の名前解決を使わずに問い合わせます。
$name = "www.example.com"
foreach ($r in "8.8.8.8", "1.1.1.1", "9.9.9.9") {
$a = Resolve-DnsName -Name $name -Type A -Server $r -DnsOnly -ErrorAction SilentlyContinue |
Where-Object { $_.Type -eq "A" } |
Select-Object -ExpandProperty IPAddress
"{0,-10} {1}" -f $r, (($a | Sort-Object) -join " ")
}
権威サーバーとの比較を行うときは、-Server に NS の名前を指定し、-NoRecursion を付けて問い合わせます。
WordPress のサーバー移転での使いどころ
WordPress を別のサーバーへ移すときは、DNS を切り替えた直後に旧サーバーと新サーバーの両方へアクセスが分かれる期間があります。このスクリプトで「権威サーバーが新しい IP を返している」「主要な公開 DNS も新しい IP になった」を確認できるまでは、旧サーバー側でのコメント受付や注文の処理が続く可能性を考え、旧サーバーをすぐに止めないようにします。作業者自身のアクセスが新サーバーに届いているかは、手元の dig の結果で確かめてから管理画面での作業を始めると、変更が旧サーバーに保存される事故を避けられます。
まとめ
- whatsmydns はブラウザで各地の答えを見る道具で、「コマンドで比較」は dig で同じ状態を手元から再現して基準と突き合わせることです。
- 比較の基準は権威サーバーの答えと SOA のシリアル番号に置きます。
- 公開 DNS 側の TTL の残り秒数を見ると、古い値が消えるまでの目安が分かります。
- DIFF が出たら、キャッシュの残り、権威サーバー間の同期、NS の食い違い、手元のキャッシュ、地域別の設定、CNAME、否定応答の順に確認します。