DNS TTL (Time to Live) is a critical DNS record setting measured in seconds that controls how long recursive resolvers cache DNS responses before discarding them and querying the authoritative server again. The TTL value represents a fundamental trade-off between performance and agility: longer TTLs reduce query volume to authoritative servers and lower lookup latency for users at scale, while shorter TTLs enable faster propagation of changes but increase server load and service dependency on authoritative availability. Common operational challenges include stale cached answers when TTLs are not lowered before migrations, inconsistent TTLs across record sets causing unpredictable resolver behavior, and resolver-level overrides that may contradict published zone configuration, requiring careful planning and monitoring to balance speed against the ability to respond quickly to infrastructure changes.
DNSのTTLの仕組み
すべてのDNSリソースレコードには、権威ゾーンの管理者が設定したTTL値(秒単位)が含まれています。リゾルバーは、この値に基づいて、保存された応答が有効である期間を決定します。
- 権威ある応答:再帰型リゾルバーが権威サーバーにクエリを送信すると、権威サーバーは設定されたTTL(例えば3600秒)とともにレコードを返します。
- キャッシュの保存:リゾルバーはレコードを保存し、TTLを元の値からカウントダウンし始めます。
- キャッシュヒット:TTLがゼロより大きい間、リゾルバーはキャッシュから一致するクライアントのクエリに応答します。各応答に含まれるTTLは、元の値ではなく、残り秒数を示しています。
- 有効期限:TTLがゼロになると、リゾルバーはキャッシュからそのレコードを削除します。
- リフレッシュ:次に一致するクエリが発生すると、リゾルバーは権威サーバーに再度問い合わせを行い、TTLが完全に更新されます。
オペレーティングシステム、ブラウザ、フォワーディングリゾルバーなど、複数のレイヤーにあるキャッシュはそれぞれ独自のカウントダウンを適用するため、変更がすべての場所で反映されるまでに1つのTTL以上の時間がかかる場合があります。 存在しない名前などの否定応答もキャッシュされ、その有効期間はRFC 2308に記載されているSOAレコードによって規定されます。一部のリゾルバーでは、公開されているTTLを上書きする最小値または最大値の制限が適用される場合があります。
DNSのTTLに関する一般的な問題
レコードが変更されたにもかかわらず、キャッシュされたコピーが期限切れになるまで、一部のクライアントが古いアドレスにアクセスし続けてしまうことがあります。その原因は通常、変更時に設定されたTTLが長すぎることによるものであり、この遅延は古いTTLの期間分だけ続く可能性があります。
管理者は移行当日にTTLを短縮し、即座に効果が現れることを期待します。しかし、旧値でレコードをキャッシュしていたリゾルバーは、旧TTLが切れるまでそのレコードを保持し続けるため、変更の少なくとも1つの旧TTL期間前に短縮を行う必要があります。
数秒といった非常に短い値を設定すると、権威サーバーへのクエリ量が増加し、検索の遅延が生じます。権威サーバーがダウンしている間、リゾルバーが頼れるキャッシュデータはほとんどないため、障害の影響がユーザーにすぐに及んでしまいます。
1つの名前に対する複数のAレコードなど、同じセット内のレコードは、1つのTTLを共有することが想定されています。値が一致しない場合、キャッシュの有効期限が異なるタイミングで切れるにつれて応答がばらついてしまうため、リゾルバーの挙動が予測不能になり、トラブルシューティングが困難になる可能性があります。
一部のキャッシュ機能を持つリゾルバーでは、TTLの最小値または最大値が設定されているため、実際の動作がゾーンの設定とは異なる場合があります。エンジニアは、公開されたTTLを超えて古いデータが残っていたり、レコードが予想より早く更新されたりする現象を目にするため、ゾーンの設定だけでなく、リゾルバーの設定も確認する必要があります。