SpeedData

DNS TTL

DNSのTTL値: チュートリアルとベストプラクティス

2023年10月25日
翻訳: 竹洞 陽一郎

この記事は米Catchpoint Systems社のチュートリアル記事 "DNS TTL Values: Tutorial & Best Practices"の翻訳です。
Spelldataは、Catchpointの日本代理店です。
この記事は、Catchpoint Systemsの許可を得て、翻訳しています。


インターネットの旅はDNSから始まります。
ブラウザでWebサイトの名前を入力したり、ソーシャルメディアのアプリケーションを開いたり、メールを送るたびに、コンピュータやスマートフォンはDNSルックアップを行い、接続先のIPアドレスを決定します。

DNSルックアップのパフォーマンスは、アプリケーションやWebサイトでのエンドユーザ体験が良いか悪いかを最初に決定する要素です。
DNSの実装には一般的にキャッシングが用いられ、最近解決されたドメイン名を保存して、それらをIPアドレスに変換する際に必要な時間を節約します。
TTL値は、キャッシュに保存される基本的なDNS情報の有効期限を決定するので、DNSのパフォーマンス、そして全体としてのネットワークシステムのパフォーマンスを決定する重要な役割を果たします。

この記事では、DNSのTTL値について詳しく説明し、高いネットワークパフォーマンスを確保するためのTTL値の選び方や変更のベストプラクティスについて議論します。

キーコンセプトのまとめ

この記事で取り上げる内容を簡単にまとめました。

DNS解決 DNS解決は、DNSサーバとクライアントがDNSアドレスをIPアドレスに変換するためのプロセスです。
DNSレコードのキャッシングとブラウジング体験 DNSリゾルバとTTL値は、エンドユーザ体験を決定する重要な役割を果たします。
DNSゾーンファイルの形式 BIND DNSゾーンファイルは、異なるレコードタイプとTTL値を持つ特別な形式に従います。
長いTTL値と短いTTL値の長所と短所 高いTTL値と低いTTL値の両方には、潜在的に肯定的および否定的な影響があります。
TTL値を選ぶためのベストプラクティス さまざまなタイプのDNSレコードに適切なTTL値を設定するための推奨事項に従うことで、パフォーマンスが向上します。
DNSを使用したサービスの負荷分散とフェイルオーバー PowerDNSの設定スニペットは、アプリケーションのチェックを行い、サービスのフェイルオーバーを実施することができます。
ダイナミックDNSのTTL TTL値の選択は、ダイナミックDNSレコードに影響を与えます。

DNS解決プロセス

DNSのTTL(Time To Live)値とその重要性を理解するための前提として、DNS解決プロセスがどのように機能するのかについて説明しましょう。

DNSルックアップには2種類あります。
再帰的なルックアップと反復的なルックアップです。

再帰的な問い合わせは、DNSサーバがエンドクライアントの代わりにDNSレコードの完全なルックアップを行うものです。
反復的なルックアップは、DNSサーバがリソースレコードを返すか、または別のDNSサーバにルックアップを行わせるかのいずれかです。

再帰的なDNS解決は通常、8ステップのプロセスです。

  1. クライアントがサービスプロバイダのDNSリゾルバに、WebサイトのIPアドレスを取得するようにリクエストを送ります。
  2. リゾルバのDNSは、WebサイトのIPアドレスを提供する権限を持つネームサーバについて、トップレベルのDNSルートサーバに問い合わせを送ります。
  3. DNSルートサーバは、トップレベルドメイン(TLD)サーバのアドレスとともに応答を返します。
  4. リゾルバはTLDサーバにリクエストを送ります。
  5. TLDサーバは、Webサイトドメインの権限を持つネームサーバを返します。
  6. リゾルバは、WebサイトのIPアドレスを取得するためにそのネームサーバに問い合わせを送ります。
  7. アドレスがリゾルバに返されます。
  8. Webサイトのアドレスが要求したクライアントに提供されます。

解決プロセスが完了すると、クライアントは提供されたIPを使用してWebサーバに接続します。

DNSの名前解決プロセス

DNSレコードのキャッシングとブラウジング体験

IPアドレスを取得するためにかかる時間は、クライアントでのブラウジング体験に直接影響します。
このため、DNSリゾルバはクライアントに返される回答をキャッシュして、解決プロセスをより効率的にし、より良いユーザ体験を提供します。
このキャッシュされた回答は、次に同じWebサイトのアドレスを要求するクライアントに送り返されることができます。

DNSレコードは、Time to Live(TTL)値で設定されており、この値はDNS解決レコードがキャッシュにどれだけの時間残るか、そしていつそれを更新・リフレッシュする必要があるかを指定します。
適切な値を選ぶことは、高いパフォーマンスを維持するとともに、キャッシュに保存された回答が定期的に更新・リフレッシュされるようにするためのバランスです。

DNSゾーンファイルの形式

ドメイン名システム(DNS)は、グローバルインターネット内のすべてのドメイン名に渡る階層構造です。
その膨大なサイズのため、DNSをゾーンと呼ばれる特定の部分に分割する必要があります。
これらのゾーンは、通常、特定の組織によって管理されています。

例えば、MyDomainという名前の組織は、mydomain.comというDNSゾーンを管理する責任を持つかもしれません。

特定のDNSゾーンがどのように機能するかに関する基本情報は、そのDNSゾーンファイルに格納されています。
ゾーンファイルには、ゾーンの動作を制御するパラメータが含まれており、DNS名とそれに対応するIPアドレスのマッピングもそこにあります。
この記事での目的に重要な点として、ゾーンファイルはDNSキャッシングを制御するために使用されるさまざまな種類のTTL値も指定します。

上述したように、これらの値はDNSおよびサイトのパフォーマンスにおいて重要な役割を果たします。

以下に示すのは、BIND DNSで設定されたドメイン名の設定ファイルの形式です。
ファイルの先頭にゾーンのデフォルトのTTL値が表示されています。
このケースでは、それは3日間です。
このTTLは、明示的に上書きされない限り、後ほど見るようにゾーン内のすべてのDNSリソースレコードに対するデフォルトとして使用されます。


$TTL 3d    ; default TTL for zone
$ORIGIN mydomain.com.

@       IN      SOA     ns1.mydomain.com. hostmaster.mydomain.com. (
                                2023021001      ; serial number
                                6h              ; refresh
                                15m             ; update retry
                                4w              ; expiry
                                1h              ; minimum
                                )

;NAME   TTL     CLASS   TYPE    Resource Record

                IN      NS      ns1.mydomain.com.
                IN      NS      ns2.mydomain.com.

                IN      MX      10 mail.mydomain.com.

ns1             IN      A       192.168.10.11
ns2             IN      A       192.168.10.12
mail    1d      IN      A       192.168.10.13
www     1800    IN      A       192.168.10.16
app     300     IN      A       192.168.10.10

ORIGINレコードの後には、ゾーンドメイン名を指定するStart of Authority(SOA)レコードがあります。
このSOAレコードには、ゾーンに関する管理情報が含まれています。
SOAレコードには特定の構文があり、次の情報が含まれています。

以上の各項目がSOAレコードには含まれています。

DNSレコードの構文とTTL値

DNSリソースレコードは以下の構文を持っています。


NAME		TTL		CLASS		TYPE		Resource Record

このレコード内のTTL値はオプションであり、指定されていない場合、デフォルトの値としてゾーンファイルの先頭で定義されたゾーンTTLが使用されます。
TTL値は秒単位で指定されますが、それがm(分)、h(時間)、d(日)、またはw(週)で後置された場合はその単位で指定されます。

長いTTL値と短いTTL値の長所と短所

TTL値は、DNSレコードの更新が伝播されるまでの時間に直接影響を与えます。
長いTTL値は、権威DNSサーバから提供される情報がDNSリゾルバによってより長い時間キャッシュされることを意味します。
より小さい値は、より頻繁な更新を意味します。

長いTTL時間の利点は、権威サーバが処理する問い合わせが少ないため負荷が減ることです。
さらに、権威DNSがダウンした場合でも、これらのレコードはリゾルバにキャッシュされたままなので、DNS解決には影響しません。
これにより、エンドユーザにとってより良いWebサイトの閲覧体験が得られます。

長いTTL値の欠点は、DNSレコードの変更が伝播するまでの遅延が生じることです。
これはまた、キャッシュされたレコードのTTL値が期限切れになるまで、エラーや他の不正確な動作を引き起こす可能性があります。

当然ながら、短いTTL値は長いものとは逆の長所と短所を持っています。
短いTTL値は、DNSレコードへの変更が非常に迅速に反映されることを意味します。
欠点は、権威DNSサーバへの負荷と依存度が高くなることです。

短いTTLはまた、DNSリゾルバがレコードをより短い時間保持するようにするため、権威DNSサーバへの繰り返し問い合わせが生じ、結果としてDNS解決の遅延と全体的なアプリケーションのロード時間の増加を引き起こします。

TTL値を選ぶためのベストプラクティス

TTL値が長い方が、頻繁に変更されないレコードや安定した静的なインフラストラクチャの一部であるレコードに最適です。
短いTTL値は、頻繁に変更が予想されるレコードに適しています。

以下は、異なるリソースレコードのTTL値に対する具体的な推奨事項です。

ネームサーバレコード(NS)
ドメイン名のネームサーバレコードは通常、寿命が長いものです。
これらはTLDサーバでグルーレコードとして定義され、めったに変更されることはありません。
NSレコードのTTLは、通常1〜3日として指定できます。
メール交換レコード(MX)
ドメインのメールサーバは、安定したインフラストラクチャの一部であるべきであり、通常、MXレコードのTTLは他のアプリケーションレコードよりも高い値で設定されます。
また、複数のメール交換機を使用することで、メール配信の信頼性が高まります。
MXレコードのTTLは、時間(12〜24時間)で定義できます。
エイリアスレコード(CNAME)
このレコードは、異なるDNSレコードのエイリアスを定義するために使用されます。
最も一般的に使用されるのはwww.mydomain.comであり、これはmydomain.comレコードを指しています。
mydomain.comのアドレスは変更される可能性がありますが、このレコードを指すエイリアスはめったに更新されません。
CNAMEのTTL値は、時間(12〜24時間)または日(1〜3日)で定義できます。
アドレスレコード(A/AAAA)
このレコードは、リソースに対するIPv4(A)またはIPv6(AAAA)アドレスへの名前のマッピングを提供します。
アドレスは、インフラストラクチャリソースまたはアプリケーションエンドポイントのいずれかであり、TTL値は展開方法によって異なります。
静的なアプリケーションの場合、TTLは長く(数時間または数日)設定できますが、高可用性とフェイルオーバーシナリオで展開されるアプリケーションの場合、TTL値は短く(数分)設定されます。

長寿命のレコードを変更するための推奨事項

長いTTL値を持つレコード(例えば、メールサービスや権威DNSサービスの変更)を変更する必要がある場面もあり、設定されたTTLよりも早く変更を反映させる必要がある場合があります。
このようなシナリオでは、適切な計画を行い、以下の4つのステップで変更を実施することが常に推奨されます。

  1. サービスの切り替えを行う予定のメンテナンス活動の時間枠を計画します。
    この時間枠は、予期せぬ問題が発生した場合のサービスへの影響が少ないと考えられる時間帯が望ましいです。
    さらに、この時間枠は、設定されたTTL値よりも前に日数または時間で計画されるべきです。
  2. 事前にTTL値を短い値(分)に変更します。
    これは、DNSリゾルバー内のレコードが期限切れになり、新しい短いTTL値でキャッシュされるようにするためです。
  3. リソースレコードを変更します。
    これは、ステップ2でレコードのTTL値が短縮されたため、数分以内に反映されるはずです。
    これにより、成功または失敗が迅速に確認できます。
  4. 変更が成功した場合は、TTLを元の値に戻します。
    失敗した場合は、リソースレコードを元の値に戻して、サービスをはるかに迅速に復旧できます。
    問題を修正した後、ステップ1から4を経て別の活動の時間枠を計画することができます。
    いずれにせよ、変更活動前のTTL値に戻すべきです。

DNSを使用したサービスのロードバランシングとフェイルオーバー

現代の世界では、サービスの可用性がエンドユーザ体験の重要な一部であるため、アプリケーションは高可用性の設計でデプロイされています。
ロードバランシングと自動フェイルオーバーを有効にするために、DNSレコードは複数のサーバに対するエンドユーザのトラフィックをリダイレクトし、アプリケーションのエンドポイントが上がったり下がったりする際にレコードの変更を行います。
リソースレコードに添付されたTTL値は、レコードの変更がエンドユーザにどれだけ迅速に影響するかを決定します。

PowerDNSの権威サーバは、要求するクライアントのIPや位置、サーバの可用性、またはその他の要因に基づいて動的に生成されたDNSレコードをサポートしています。
これらのレコードは、LUAコードスニペットを使用して生成されます。

以下に、PowerDNSサーバのリソースレコード設定の例を示します。
このレコードは、複数のエンドポイント(172.16.16.20および172.16.17.30)でウェブサービス(web.domain.com)の継続的な健康状態チェック(ifurlup)を実行するように設定されています。
設定は、ヘルスチェックに合格したすべてのIPアドレスを返します。
レコードにはTTL値が120秒設定されており、任意のエンドポイントでステータスが変更されると、権威サーバはTTL値の有効期限が切れた後にDNSリゾルバーで反映される更新されたレコードを提供します。

2番目のレコードは、着信DNSリクエストのGeoIP位置検索を実行します。
クライアントのIPがUSの国コードに属している場合、USに基づいたサーバのIPアドレスが返されます。
リクエストが世界の他の地域からの場合、US以外のサーバのIPアドレスが返されます。
この情報は、5分ごと(TTL 300秒)に更新することができます。


web.domain.com	120	IN	LUA	A "ifurlup('https://domain.com/', 
					{'172.16.16.20', '172.16.17.30'} )"

app.domain.com	300	IN	LUA	A ";if countryCode('US') 
				then return {'172.16.16.20', '172.16.17.30'} 
				else return {'172.16.18.30', '172.16.19.40'} 
				end"

ダイナミックDNSのTTL

ダイナミックDNS(DDNS)は、動的に変更されるIPアドレスにDNSドメイン名を割り当てるメカニズムです。
DDNSは通常、ISPによって動的に割り当てられたIPアドレスでインターネット向けのサービスを実行するための住宅用ブロードバンド接続で使用されます。

DDNSを使用するには、DDNSサービスプロバイダのいずれかに登録する必要があり、通常は有料と無料のサービスが提供されています。
クライアント側でIPアドレスが変更されるたびに、そのIPアドレスをDDNSプロバイダに登録し、新しいリソースレコードの値を反映する必要があります。
有料サービスでは通常、小さいTTL値(5分)が許されていますが、無料サービスでは長いTTL値(15〜60分)が設定されています。

DDNSを使用するには、クライアント側のアプリケーションまたはインターネットルーター内のDDNS設定が必要です。
アプリケーションまたはルーターは、クライアントのインターネットアドレスをDDNSサービスプロバイダに登録します。
クライアントのインターネットアドレスが変更される(通常はDHCPリースが期限切れになった後)と、DNSリソースレコードは無効になり、TTL値が期限切れになって新しいレコードがDNSリゾルバー内で反映されるまで、ホストされているアプリケーションはアクセスできなくなります。
重要なホストされているアプリケーションでは、より速い更新を確保するために有料のDDNSサービスに加入する必要がある場合があります。

結論

この記事では、異なるDNSレコードタイプに対するTTL値の基本的な推奨事項について説明しました。
DNSのTTL値の設定は、インフラストラクチャの要件、権威DNSサーバの負荷管理、情報の変更頻度、および必要なエンドユーザ体験に基づいて慎重に計画される必要があります。

次は?

1. DNS委任

DNS委任のアプリケーションと利点について全て学びましょう。実装のベストプラクティスも含みます。

2. DNSフラッド攻撃

DNSサーバをターゲットにした分散型サービス拒否(DDoS)攻撃であるDNSフラッド攻撃のタイプと影響、そしてそれらからどのように保護するかについて学びましょう。

3. プライベートDNS

プライベートDNSについて全て学びましょう。利点、異なるアーキテクチャタイプ、およびベストプラクティスを含みます。

4. DNSのTTL値

この無料ガイドでは、DNS Time to Live(TTL)値、その重要性、およびさまざまなレコードタイプに対して適切な数字を選択するためのベストプラクティスについて全て学びましょう。

5. マネージドDNS

マネージドDNSの利点と欠点を探り、手動DNS管理と比較してみましょう。

6. DNS攻撃

DNS攻撃がどのように機能し、それらを特定し軽減する方法を学びましょう。これには、DNSポイズニング、トンネリング、フラッド、ハイジャックが含まれます。

7. 遅いDNS

DNSパフォーマンスに影響を与える要因を学び、遅いDNSの状態を診断する方法とDNS速度を最適化するためのベストプラクティスについて学びましょう。

8. DNSハイジャック

DNSハイジャックがどのように発生するかを一例を用いて学び、これらのサイバー攻撃を検出し、修復し、防ぐためのベストプラクティスについて学びましょう。