DNS の反映時間
DNS の変更が全体に行き渡るまでの時間は、変更前のレコードの TTL で決まります。
「最大 72 時間」と言われるのは、ネームサーバーを変更するときの親側 (レジストリ) の TTL の話です。
TTL とは
TTL (Time To Live) は、DNS の答えをキャッシュしてよい時間です。数字は秒で、3600 なら 1 時間です。
問い合わせを中継するサーバー (プロバイダや社内のキャッシュ DNS) は、TTL の間は前の答えを返し続けます。変更がすぐ見えないのはこのためです (RFC 1035 §3.2.1)。
反映時間の目安
| 変更の内容 | 何で決まるか | 目安 |
|---|---|---|
| A・CNAME・MX・TXT などのレコードを変える | 変更前のレコードの TTL | TTL 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 欄にこの数字を入れます。
早く切り替えたいときの手順
- TTL を 300 に下げる切り替えの数日前 (いまの TTL 以上の時間) に、変えるレコードの TTL を 300 秒にします。
- 値を変える古い答えのキャッシュは最大 5 分で切れるので、5 分ほどで行き渡ります。
- TTL を戻す新しい値で問題が無いと確かめてから、3600 などの元の値に戻します。
この手順が効くのはレコードの変更です。ネームサーバーの変更では、親ゾーン側の TTL は下げられません。
反映したか確かめる
ネームサーバーに直接問い合わせた値と、キャッシュ DNS が返す値を並べて確かめられます。
よくある質問
キャッシュを消せば早く反映できますか?
消せるのは自分の端末や社内のキャッシュだけです。プロバイダなど他のキャッシュ DNS は、TTL が切れるまで古い答えを返します。
いつまで待っても反映しません。
まず、変更したネームサーバーが実際に使われているかを確かめます。ドメインの NS が別の DNS サービスを向いていると、そちらを変えない限り反映しません。次に、ホスト名の打ち間違いと、同じ名前に古いレコードが残っていないかを確かめます。
TTL は短いほどいいですか?
短いほど切り替えは早くなりますが、問い合わせが増え、DNS に障害があったときの影響も早く出ます。普段は 3600 前後にし、切り替えの前だけ下げるのが一般的です。