DNSDNSレコードインフラ

DNS SOA TTL の推奨値|実務でハマらない設定

ドメイン番人6 分で読めます
目次

SOA レコードの 5 フィールド構造

この記事でわかること

  • SOA レコードの 5 つの数値(Serial / Refresh / Retry / Expire / Minimum TTL)の推奨値
  • RFC 1912 が示すベースラインと、現代運用での実務値
  • 短すぎる / 長すぎる設定で起きる典型的なトラブル 3 パターン
  • マネージド DNS とオンプレ運用での違い

SOA レコードそのものの基礎は DNS SOA レコードとは|7 フィールド入門解説 に詳しくまとまっています。本記事は「では具体的にどの値にすべきか」に絞った実務記事です。

SOA TTL の推奨値(早見表)

実務でそのまま使える値を最初に置いておきます。

フィールド 推奨値 単位 根拠
Serial YYYYMMDDnn 形式 整数 慣例 / 自動更新推奨
Refresh 3600〜86400 秒(1 時間〜1 日) RFC 1912
Retry 900〜3600 秒(15 分〜1 時間) RFC 1912
Expire 1209600〜2419200 秒(14 日〜28 日) RFC 1912
Minimum TTL(負キャッシュ) 300〜3600 秒(5 分〜1 時間) RFC 2308

迷ったらこの中央値(Refresh 7200 / Retry 1800 / Expire 1209600 / Minimum 300)から始めれば、ほぼ事故りません。マネージド DNS のデフォルトもこの近辺に設定されています。

なぜ「短すぎ」も「長すぎ」もダメなのか

SOA の TTL 群は プライマリとセカンダリの同期サイクルリゾルバのキャッシュ寿命 という 2 軸を支配します。1 つの値だけ極端に振ると、全体のバランスが崩れて運用事故につながります。

ゾーン転送(AXFR / IXFR)の挙動と SOA の関係は AXFR(DNS ゾーン転送)とは に詳述しています。

Refresh / Retry / Expire のタイムライン

Refresh / Retry / Expire の動作タイムライン

通常時はセカンダリが Refresh 間隔で Serial を確認し、差分があればゾーン転送で同期します。プライマリが落ちると、セカンダリは Retry 間隔で再試行を続け、最終的に Expire を超えると保持データを破棄して応答停止します。

この 3 つの値は 「Retry < Refresh ≪ Expire」 の関係性を守るのが大原則です。

ハマりやすい設定 3 パターン

パターン 1: Retry が短すぎてセカンダリ過負荷

Retry を 60 秒(1 分)など極端に短く設定すると、プライマリ障害時にセカンダリが毎分接続を試み続け、復旧後のプライマリに対する瞬間負荷が跳ね上がります。中小企業の規模では問題が顕在化しにくいものの、監視ログが Retry 失敗で埋まり、本当の障害シグナルを見落とす という副作用が起きます。

推奨は 900〜3600 秒。Retry は「数十分」スケールで考えるのが定石です。

パターン 2: Expire が短すぎて障害時にゾーン消失

Expire を 86400 秒(1 日)など短く設定すると、プライマリが 24 時間止まっただけでセカンダリも応答停止し、ゾーン全体が SERVFAIL になります。

DNS の最終防衛線である「プライマリが死んでもセカンダリが応答し続ける」性質を活かすには、Expire は最低でも 14 日(1209600 秒)、できれば 28 日(2419200 秒)を確保しましょう。「Expire は短い方が安全」というのは誤解で、長い方が事故に強い のが SOA の特徴です。

パターン 3: Minimum TTL が長すぎて新規レコード追加が反映されない

Minimum TTL は RFC 2308 で ネガティブキャッシュ(NXDOMAIN)の TTL に再定義されています。ここを 86400 秒(1 日)に設定すると、新しく追加した DKIM レコードが「以前は存在しなかった」というリゾルバ側のキャッシュに最大 1 日阻まれて見つかりません。

SPF / DKIM / DMARC のような 新規追加が頻発するレコード を運用するゾーンでは、Minimum TTL は 300〜3600 秒に抑えるのが鉄則です。

マネージド DNS でのデフォルト値

主要マネージド DNS のデフォルト SOA 値は、おおむね RFC 1912 推奨レンジに収まっています。

  • Cloudflare: Refresh 10000 / Retry 2400 / Expire 604800 / Minimum 1800
  • Route 53: Refresh 7200 / Retry 900 / Expire 1209600 / Minimum 86400
  • Google Cloud DNS: Refresh 21600 / Retry 3600 / Expire 1209600 / Minimum 300

Route 53 の Minimum TTL 86400 は他社より長めです。SPF / DKIM / DMARC を頻繁にいじるなら、SOA の Minimum TTL を 300〜3600 秒に下げる調整を検討しましょう(Route 53 では SOA レコードを直接編集可能)。

なお、マネージド DNS では Serial の自動インクリメント が標準動作なので、利用者が Serial を意識する場面はほぼありません。逆にオンプレで BIND / NSD を運用している場合は、Serial 更新忘れが「セカンダリにデータが伝わらない」事故の典型原因になります。

レコード単体の TTL との関係

SOA の Minimum TTL は ネガティブキャッシュ専用 の値で、A / MX / TXT といった各レコードの正のキャッシュ TTL とは別物です。

  • 各レコードの TTL → そのレコード行に書かれた値(例: A 300 IN 192.0.2.1 なら 300 秒)
  • ネガティブキャッシュ TTL → SOA の Minimum TTL(NXDOMAIN や NODATA 応答のキャッシュ寿命)

レコード移行(IP 変更、メールサーバー移行)の直前に 各レコードの TTL を 60〜300 秒に下げて準備し、切替後に元に戻す のが定番の安全策です。DNS レコード全体の TTL 設計は DNS レコードの種類と役割 で各レコード別の典型値を整理しています。

SOA を見直すべきタイミング

普段触らない SOA ですが、次のタイミングで一度見直しましょう。

  • マネージド DNS に乗り換えた直後(移行ツールが古い SOA を引き継いでいることがある)
  • メール認証(SPF / DKIM / DMARC)の運用を本格化する前
  • プライマリ DNS の SLA を変更したとき
  • DNSSEC を有効化したとき

特にメール認証導入直前は Minimum TTL を確認しておくと、レコード追加直後の「届かない」「dig しても出てこない」というハマりを防げます。

まとめ

  • SOA の TTL 群は「Retry < Refresh ≪ Expire」を守るのが大原則
  • 迷ったら Refresh 7200 / Retry 1800 / Expire 1209600 / Minimum 300 の中央値で始める
  • Expire は短くしない(長い方が事故に強い)
  • Minimum TTL は 300〜3600 秒に抑える(メール認証導入時の必須事項)
  • マネージド DNS は概ね妥当なデフォルト。Route 53 だけ Minimum TTL が長め

まずは現状を把握しましょう

ドメイン番人の 無料診断 で、SPF / DKIM / DMARC / DNS の基本構成をまとめてチェックできます。SOA 値そのものは診断対象外ですが、レコード追加が正しく公開できているかは 30 秒で確認できます。SOA や TTL の設計でお困りの場合は お問い合わせ からどうぞ。

関連記事: DNS SOA レコードとは|7 フィールド入門解説 / AXFR(DNS ゾーン転送)とは / DNS レコードの種類と役割

次の一歩は無料診断から。