DNS の反映時間

DNS の変更が全体に行き渡るまでの時間は、変更前のレコードの TTL で決まります。

「最大 72 時間」と言われるのは、ネームサーバーを変更するときの親側 (レジストリ) の TTL の話です。

TTL とは

TTL (Time To Live) は、DNS の答えをキャッシュしてよい時間です。数字は秒で、3600 なら 1 時間です。

問い合わせを中継するサーバー (プロバイダや社内のキャッシュ DNS) は、TTL の間は前の答えを返し続けます。変更がすぐ見えないのはこのためです (RFC 1035 §3.2.1)。

反映時間の目安

変更の内容何で決まるか目安
A・CNAME・MX・TXT などのレコードを変える変更前のレコードの TTLTTL 3600 なら最大 1 時間
レコードを新しく追加する「無い」という答えの TTL (SOA の最後の値と SOA 自身の TTL の小さい方)数分〜1 時間ほど
ネームサーバーを変える (.jp)JPRS 側に置かれた NS の TTL最大 1 日 (86400 秒)
ネームサーバーを変える (.com / .net)Verisign 側に置かれた NS の TTL最大 2 日 (172800 秒)

「無い」という答えのキャッシュ時間は RFC 2308 で決まっています。SOA レコードの書き方 も参照してください。

旧ネームサーバー側の NS の TTL が長いと、それより長くかかることがあります (RFC 2181 §5.4.1)。

ネームサーバー変更に時間がかかる理由

ネームサーバーの情報は、自分の DNS だけでなく親ゾーン (.jp なら JPRS、.com / .net なら Verisign) にも登録されています。キャッシュ DNS は親ゾーンの NS を、親ゾーン側の TTL の間覚えています。

親ゾーン側の TTL は自分では変えられません。実際の値は次のコマンドで確かめられます (ANSWER または AUTHORITY 欄の 2 列目が TTL)。

dig example.jp NS @a.dns.jp +norec
example.jp.  86400  IN  NS  ns1.example.net.

移管やネームサーバーの切り替えの前後しばらくは、旧・新どちらのネームサーバーにも同じレコードを置いておくと、切り替え中も止まりません。ネームサーバーとは

TTL 換算

秒を時間に、時間を秒に直します。

1 時間 0 分

この値のレコードを変えると、最大 1 時間 0 分 で行き渡ります。

300 秒

DNS 設定画面の TTL 欄にこの数字を入れます。

早く切り替えたいときの手順

  1. TTL を 300 に下げる切り替えの数日前 (いまの TTL 以上の時間) に、変えるレコードの TTL を 300 秒にします。
  2. 値を変える古い答えのキャッシュは最大 5 分で切れるので、5 分ほどで行き渡ります。
  3. TTL を戻す新しい値で問題が無いと確かめてから、3600 などの元の値に戻します。

この手順が効くのはレコードの変更です。ネームサーバーの変更では、親ゾーン側の TTL は下げられません。

反映したか確かめる

ネームサーバーに直接問い合わせた値と、キャッシュ DNS が返す値を並べて確かめられます。

よくある質問

キャッシュを消せば早く反映できますか?

消せるのは自分の端末や社内のキャッシュだけです。プロバイダなど他のキャッシュ DNS は、TTL が切れるまで古い答えを返します。

いつまで待っても反映しません。

まず、変更したネームサーバーが実際に使われているかを確かめます。ドメインの NS が別の DNS サービスを向いていると、そちらを変えない限り反映しません。次に、ホスト名の打ち間違いと、同じ名前に古いレコードが残っていないかを確かめます。

TTL は短いほどいいですか?

短いほど切り替えは早くなりますが、問い合わせが増え、DNS に障害があったときの影響も早く出ます。普段は 3600 前後にし、切り替えの前だけ下げるのが一般的です。