2026年6月14日

2026年6月14日

SOAレコードのTTLを検証する方法|設定値・ネガティブキャッシュ・全権威サーバーの一致をdigで確かめる

SOAレコードのTTLを検証するときは、「SOAレコード自体のTTL」と「SOAの最後の数値(MINIMUM)」の2つを読み、そこから実際に効いている「存在しない応答のキャッシュ時間」を確かめ、最後にすべての権威DNSサーバーで値がそろっているかを見ます。この記事では、dig を使った具体的な確認手順と、結果の読み方、値が妥当かを判断する目安を説明します。

SOAのTTLを省略・既定値に戻す方法や、SOA全体の誤設定の直し方は別の記事で扱っているため、ここでは「今の値が正しく効いているかを確かめる」ことに絞ります。

検証の対象になる3つの値

SOAに関係するTTLは、混同されやすいので最初に整理します。

  1. SOAレコード自体のTTL: SOAという1件のレコードを、キャッシュDNSが何秒覚えておいてよいか
  2. MINIMUM: SOAの値の最後の数値。現在の仕様(RFC 2308)では、「その名前やレコードは存在しない」という応答をキャッシュする時間の上限として使われる
  3. 実際のネガティブキャッシュ時間: 1と2のうち小さいほう。キャッシュDNSが「存在しない」という応答を覚えておく時間

日常の運用で影響が大きいのは3です。新しいサブドメインやTXTレコードを追加したのに、しばらく「存在しない」と返され続ける現象は、この時間で決まります。

ステップ1:SOAの値を読み取る

+multiline を付けると、各数値の意味を注釈付きで表示してくれます。

dig +multiline +noall +answer example.com SOA
example.com.		3600 IN SOA ns1.example.net. hostmaster.example.com. (
				2026101801 ; serial
				7200       ; refresh (2 hours)
				3600       ; retry (1 hour)
				1209600    ; expire (2 weeks)
				3600       ; minimum (1 hour)
				)

先頭の行の 3600 がSOAレコード自体のTTL、括弧の中の最後の 3600 がMINIMUMです。この例では両方とも1時間なので、ネガティブキャッシュの時間も1時間になります。

ここで公開DNS経由の結果を見ている場合、先頭のTTLはキャッシュの残り秒数になっていることがあります。設定値を見るには、次のステップのように権威DNSに直接問い合わせます。

ステップ2:権威DNSに直接問い合わせる

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

dig +short NS example.com

表示されたサーバーを指定し、再帰問い合わせをしない設定で聞きます。

dig @ns1.example.net +norecurse +multiline +noall +answer example.com SOA

この結果のTTLは、キャッシュの影響を受けない設定値です。管理画面やゾーンファイルに書いた値と一致しているかを確かめます。BINDのゾーンファイルでは、SOAの行にTTLを書いていなければ、ファイル先頭の $TTL の値が使われます。ゾーンファイルの変更が読み込まれているかは、シリアル番号が増えているかで判断できます。

ステップ3:すべての権威サーバーでそろっているか

権威DNSが複数ある場合、そのうちの1台だけ古い値を返していると、問い合わせ先によって結果が変わります。+nssearch を使うと、各権威サーバーのSOAをまとめて確認できます。

dig +nssearch example.com

各行のシリアル番号が同じなら、すべてのサーバーが同じ版のゾーンを持っています。1台だけシリアルが古い場合は、ゾーン転送が止まっているか、そのサーバーへの変更の反映が遅れています。

TTLまで比べたいときは、サーバーごとに問い合わせます。

for ns in $(dig +short NS example.com); do
  echo "== $ns"
  dig @"$ns" +norecurse +noall +answer example.com SOA
done

マネージドDNSでは通常、全サーバーに同じ値が配られますが、DNSサービスの移行中に旧サービスのネームサーバーがNSに残っているといった場合には食い違います。

ステップ4:ネガティブキャッシュ時間を実測する

実際に「存在しない」応答がどれだけキャッシュされるかは、存在しない名前を問い合わせると確かめられます。

dig @ns1.example.net +norecurse nonexistent-check.example.com A

status: NXDOMAIN の応答に、AUTHORITY SECTION としてSOAが付いて返ってきます。

;; AUTHORITY SECTION:
example.com.		3600 IN SOA ns1.example.net. hostmaster.example.com. 2026101801 7200 3600 1209600 3600

この行のTTLが、キャッシュDNSが「存在しない」応答を覚えておく時間です。仕様では、権威サーバーはここにSOAのTTLとMINIMUMの小さいほうを入れることになっているため、ステップ1で計算した値と一致するはずです。一致しない場合は、DNSサービスが独自の値を使っている可能性があります。

存在する名前でも、問い合わせたレコード型が無ければ同じようにSOAが付きます(status: NOERROR で回答が空になります)。すでにAレコードがある名前にAAAAやTXTを追加し、その前に問い合わせが来ていたケースは、こちらに当たります。

キャッシュDNS側でも確かめたい場合は、同じ問い合わせを公開DNSに2回送ります。

dig @8.8.8.8 nonexistent-check.example.com A | grep -A1 "AUTHORITY SECTION"

2回目のTTLが減っていれば、その公開DNSに否定応答がキャッシュされ、残り時間が数えられていることが分かります。

ステップ5:値が妥当かを判断する

決まった正解はありませんが、次を目安にします。

  • ネガティブキャッシュ時間: RFC 2308 では1〜3時間程度がうまく機能するとされています。長すぎると、追加したレコードが見えるまでの待ち時間が延びます
  • SOAレコード自体のTTL: ほかのレコードと同程度(1時間前後)にしている運用が多く見られます
  • キャッシュDNSの上限: キャッシュDNSの多くは、否定応答のキャッシュ時間に独自の上限を設けています。SOAで1日と書いても、実際にはそれより短く扱われることがあります

レコードの追加を控えている時期は、MINIMUMとSOAのTTLを短めにしておくと、追加前の問い合わせで「存在しない」がキャッシュされても早く解消します。変更する場合は、ゾーンファイルやDNSの設定をバックアップしてから行い、変更後にステップ2〜4をもう一度実行します。

マネージドDNSでは、SOAを編集できるサービスと、固定値で変更できないサービスがあります。設定可能な範囲はサービスやプランで違い、変わることもあります(2026年10月現在)。編集できない場合は、ステップ4で実際の時間を把握し、作業計画に組み込みます。

外部ツールでの補助的な確認

DNSViz や Zonemaster のような外部の診断サービスを使うと、権威サーバー間のSOAの食い違いや、値の組み合わせに関する警告をまとめて確認できます。ただし判断の根拠は、ここまでの dig の結果と、自分で書いた設定値の照合に置くのが確かです。ツールの表示や判定基準は更新で変わることがあります。

まとめ

  • SOAのTTL、MINIMUM、そして実際のネガティブキャッシュ時間(両者の小さいほう)を分けて読む
  • 設定値は権威DNSに +norecurse で直接問い合わせて確かめる
  • +nssearch で全権威サーバーのシリアルがそろっているかを見る
  • 存在しない名前への問い合わせで、AUTHORITY SECTION のSOAのTTLを実測する
  • 1〜3時間程度を目安に、レコード追加の予定に合わせて値を見直す

お気軽にご相談ください

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