1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NSレコードのTTL、結局いくつが正解? 親と子の「不整合」でハマらないためのDNS基礎

1
Posted at

「NSレコードのTTLはいくつに設定すべきか?」
「DNS切り替え時の浸透待ちが予想以上に長いのはなぜか?」

インフラエンジニアやWeb担当者が一度は悩むこの問題について、推奨値と、意外と知られていない 「親(レジストラ)」と「子(DNSサーバー)」のTTL不整合による挙動についてまとめました。

結論:推奨設定値

まずは結論から。運用フェーズによって推奨値は異なります。

フェーズ 推奨TTL値 秒数表記 理由
通常運用時 24時間 〜 48時間 86400 / 172800 キャッシュ効率向上、安定性確保、サーバー負荷軽減
DNS移行時 5分 〜 1時間 300 / 3600 切り替えを素早く反映させるため

基本は 24時間(86400秒) にしておき、DNSサーバーの引っ越しなど「これから設定を変えるぞ」という時だけ、事前に短くするのが鉄則です。


なぜ「親」と「子」を意識する必要があるのか?

NSレコードには2つの設定場所が存在します。

  1. 親(Parent): レジストラ(お名前.com, Route53 Domains等)に登録するネームサーバー情報。上位のTLDサーバーが答える情報。
  2. 子(Child): 実際のDNSサーバー(Route53, Cloudflare等)のゾーンファイルに書くNSレコード。権威サーバーが答える情報。

私たちが手動でTTLを自由に変更できるのは、主に 2. 子(DNSサーバー) 側ですが、DNSの仕組み上、親の設定がボトルネックになるケースがあります。

ケース1:親が長く、子が短い場合(よくあるパターン)

  • 設定: 親(48時間) / 子(5分)
  • 状況: 「DNS移行をするから、あらかじめ自分のサーバー(子)のTTLを5分に下げておいた!準備万端!」

この状態でDNS切り替えを行うと、最大48時間切り替わらないユーザーが出てきます。

▼ なぜ?
リゾルバ(キャッシュサーバー)はまず親に聞きに行き、「あそこのサーバーに行け(有効期限48時間)」という情報をキャッシュします。このキャッシュが生きている48時間は、そもそも子(TTL 5分)を見に来てくれないため、子の設定が無視される形になります。

教訓: 子のTTLを下げても、親のTTL(変更できないことが多い)が長い場合、移行準備期間は「親のTTL」分だけ待つ必要がある。

ケース2:親が短く、子が長い場合

  • 設定: 親(5分) / 子(24時間)
  • 状況: 「親の設定が短いから、いざという時はすぐに切り替わるだろう」

この状態でDNS切り替えを行うと、最大24時間切り替わりません。

▼ なぜ?
DNSには 「紹介(親)よりも本人(子)の確定情報を信じる」というルールがあります。
リゾルバは親から「5分有効」として紹介されても、その後に子から「私は管理者です。この情報は24時間有効です」と言われると、キャッシュを24時間で上書き
します。これを「権威ある回答(Authoritative Answer)」と呼びます。

結果、古いサーバーへのパスが24時間残り続け、いわゆる「幽霊ドメイン現象」が起きます。


【図解】TTL不整合の勝敗ルール

覚え方はシンプルです。
「基本的に、長い方のTTLに引きずられる(悪い方に作用する)」 と覚えてください。

まとめ表

あなたの設定 親の設定(固定多し) 結果(実際の反映待ち時間) 解説
5分 (短) 48時間 (長) 48時間 親のキャッシュが消えるまで、子を見に来てくれない。
24時間 (長) 5分 (短) 24時間 子の「権威ある回答」でキャッシュ期間が上書きされる。

正しいDNS移行のステップ

上記を踏まえた、事故らないためのDNS移行スケジュールは以下の通りです。

  1. 【移行の2〜3日前】
    現行のDNSサーバー(子)で、NSレコードのTTLを 300(5分) に下げる。
  • ※ここで「親のTTL(例:48時間)」が切れるのをじっくり待つのが重要です。
  1. 【移行当日】
    レジストラ側(親)の設定を変更し、新DNSサーバーへ向ける。
  • ※すでに子のキャッシュは5分になっているため、親のキャッシュが切れ次第、スムーズに新サーバーへ流れます。
  1. 【移行完了後】
    新DNSサーバー(子)で、NSレコードのTTLを 86400(24時間) に戻す。

最後に

「DNSは浸透するまで待つしかない」と言われますが、仕組みを理解していれば、その待ち時間が「親のせい」なのか「子のせい」なのかを判断し、ある程度コントロール(または予測)することができます。

普段は 24時間(86400) でどっしりと構え、移行時だけ 親のTTLを計算に入れた上で 短く設定する。これがベストプラクティスです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?