2026年6月12日

2026年6月12日

host を使った DNS レコードの比較確認手順|権威サーバー間の SOA 比較と、DNS 移転前後の差分チェック

host コマンドで DNS レコードを比較するときは、「何と何を比べるのか」を先に決め、問い合わせ先を明示して同じ種別の結果を並べるのが基本です。この記事では、host の -C オプションで権威サーバー同士の SOA を比べる方法と、DNS 事業者を移すときに旧サーバーと新サーバーのレコードを一括で比べて差分を出す方法を、手順として説明します。

host は BIND 9 に付属するコマンドで、dig と同じパッケージに入っていることがほとんどです。出力が「〇〇 has address 〇〇」のような1行の文になるため、差分を取る用途に向いています。オプションは版によって変わることがあるので、手元では man host の記載を優先してください(2026年10月現在)。

比べる組み合わせを決める

DNS の比較確認は、目的によって比べる相手が変わります。先に組み合わせを決めておくと、結果の読み違いを減らせます。

  • 権威サーバー同士:同じゾーンを持つ複数のネームサーバーが、同じ内容を返しているか。ゾーン転送の遅れや、片方だけ古いままの状態を見つけます。
  • 旧 DNS と新 DNS:DNS 事業者を移す前に、移転先に全レコードを入れ終えたか。ネームサーバーを切り替える前に確認します。
  • 権威サーバーと公開 DNS:変更がどこまで広まったか。公開 DNS 側の値はキャッシュなので、権威サーバーの値を基準にします。

どの比較でも、host の第2引数で問い合わせ先を指定します。省くと /etc/resolv.conf のサーバーに聞くことになり、どこの答えなのかが曖昧になります。

# 書式:host -t 種別 名前 問い合わせ先
host -t A example.com ns1.example.net
host -t MX example.com 8.8.8.8

手順1:権威サーバーの一覧を確認する

まず、そのドメインの権威サーバーを調べます。

host -t NS example.com

「example.com name server ns1.example.net.」のような行が、権威サーバーの数だけ表示されます。ここに出た名前が、以降の比較の問い合わせ先になります。ドメインの登録事業者で設定した NS と、ゾーンの中に書かれた NS が食い違っていることもあるため、気になる場合は親ゾーンの情報も確認しますが、その調査には委任をたどれる dig の +trace のほうが向いています。

手順2:-C で権威サーバー同士の SOA を比べる

host には、ゾーンの権威サーバーすべてに SOA を問い合わせて並べる -C オプションがあります。

host -C example.com

権威サーバーごとに「Nameserver 〇〇:」の見出しと、その下に SOA の内容(プライマリーサーバー名、管理者のメールアドレス、シリアル番号、各種の時間)が表示されます。見るべきはシリアル番号です。ゾーンを更新するとシリアル番号を上げる運用の場合、すべてのサーバーで同じ番号なら、全サーバーが同じ版のゾーンを持っていると判断できます。

一部のサーバーだけ番号が小さい場合は、そのサーバーへのゾーン転送が止まっているか遅れている可能性があります。自前でプライマリーとセカンダリーを運用しているなら、セカンダリー側のログや、転送を許可する設定を確認します。

ただし、マネージド DNS の中には、シリアル番号を固定の値のまま運用していたり、独自の規則で付けていたりするサービスもあります。その場合、シリアル番号が同じでも中身が同じとは言い切れないので、次の手順でレコードの中身を直接比べてください。

手順3:個別のレコードを権威サーバーごとに比べる

気になるレコードを、権威サーバーを1台ずつ指定して問い合わせます。

for ns in ns1.example.net ns2.example.net; do
  echo "== $ns"
  host -t A www.example.com "$ns"
done

-r を付けると再帰を要求しない問い合わせになり、権威サーバーが自分の持っているデータだけで答えているかを確かめられます。権威サーバーに直接聞くときは、付けておくと意図がはっきりします。

結果の読み方の要点です。

  • 「has address」などの行が返る:その値が設定されています。
  • 「has no AAAA record」のように表示される:名前は存在するが、その種別のレコードがありません。
  • 「not found: 3(NXDOMAIN)」:名前そのものが存在しません。サブドメインの作り忘れや綴りの誤りを疑います。
  • 「not found: 2(SERVFAIL)」やタイムアウト:サーバー側の不調や、そのサーバーがゾーンを持っていない可能性があります。

TTL も比べたいときは -v を付けます。dig に近い詳しい形式で表示され、TTL の列が確認できます。

手順4:DNS 移転の前に旧サーバーと新サーバーを一括で比べる

DNS 事業者を移すときは、ネームサーバーを切り替える前に、新しい事業者のサーバーへ同じレコードが入っているかを確かめます。切り替えてから足りないレコードに気付くと、メールが届かない、サブドメインが表示されない、といった障害につながります。

確認したい名前と種別を一覧にし、旧サーバーと新サーバーの結果を並べて差分を取ります。

#!/bin/sh
# 使い方: sh compare.sh 旧NS 新NS
old="$1"; new="$2"
# 「名前 種別」を1行ずつ並べる(例)
cat > /tmp/targets.txt <<'EOF'
example.com A
www.example.com A
example.com MX
example.com TXT
_dmarc.example.com TXT
EOF

query() {
  while read -r name type; do
    # 先頭の「Using domain server:」などのヘッダー行を除いて並べ替える
    # (タイムアウトなどのエラー行は残して差分に出す)
    host -r -t "$type" "$name" "$1" \
      | grep -v -e '^Using domain server:' -e '^Name:' -e '^Address:' -e '^Aliases:' -e '^$' \
      | sort
  done < /tmp/targets.txt
}

query "$old" > /tmp/old.txt
query "$new" > /tmp/new.txt
diff /tmp/old.txt /tmp/new.txt && echo "差分なし"

問い合わせ先を指定すると、host は結果の前に問い合わせ先の情報を数行表示します。このスクリプトではその部分を取り除き、並べ替えてから比べています。複数の値を持つレコード(MX や TXT など)は返る順番が毎回変わることがあるため、並べ替えずに比べると、内容が同じでも差分が出てしまいます。

差分が出たら、行の先頭の < が旧サーバーだけにある値、> が新サーバーだけにある値です。旧サーバーにしか無い値は移し忘れの可能性が高いので、新しい事業者の管理画面で追加します。

名前の一覧は、旧事業者の管理画面からゾーンを書き出せるならそれを使うのが確実です。書き出しができない場合は、管理画面の一覧を見ながら手で作ります。DNS では、外から問い合わせて全レコードの一覧を得る方法は通常用意されていません(ゾーン転送は、許可された相手にしか応じないのが一般的な設定です)。

手順5:切り替え後に公開 DNS と比べる

ネームサーバーを切り替えたら、権威サーバーの値と公開 DNS の値を比べ、変更が広まっているかを確認します。

host -t A www.example.com ns1.example.net   # 基準になる権威サーバーの値
host -t A www.example.com 1.1.1.1
host -t A www.example.com 8.8.8.8

公開 DNS の値が古い場合は、TTL の期限が切れるのを待つ段階です。旧事業者の DNS はすぐに解約せず、少なくとも NS の TTL が過ぎるまでは同じ内容で動かしておくと、切り替え途中の利用者にも正しい値を返せます。

つまずきやすい点

  • 名前の補完:host は /etc/resolv.conf の search 設定で短い名前を補うことがあります。比較では www.example.com のように完全な名前を書きます。
  • CNAME の扱い:A を問い合わせた名前が CNAME の場合、「is an alias for」の行と、別名先の値が一緒に表示されます。比べるときは CNAME の行も含めて見ます。
  • 地域で答えを変える DNS:GeoDNS や CDN を使っていると、問い合わせ元によって答えが変わり、差分が出ても誤りとは限りません。

まとめ

  • 比較の前に、権威サーバー同士・旧と新・権威と公開 DNS のどれを比べるかを決め、問い合わせ先を明示します。
  • host -C で権威サーバーごとの SOA を並べ、シリアル番号の食い違いからゾーン転送の遅れを見つけます。
  • DNS 移転の前は、名前と種別の一覧を旧サーバーと新サーバーに問い合わせ、並べ替えてから diff を取ります。
  • 切り替え後は権威サーバーの値を基準に公開 DNS を比べ、旧 DNS は TTL が過ぎるまで残します。
  • オプションは版によって変わるため、man host で手元の版を確認します。

お気軽にご相談ください

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