TTLの実際の選び方
DNSキャッシュをフラッシュする方法
お使いのマシンは、リクエストのたびに再問い合わせをしなくて済むよう、DNSの答えを保存しています。レコードが変更されたあとも古い接続先が表示され続けるのは、この保存されたコピーが残っているためです。フラッシュするとそれが破棄され、新しい検索が強制されます。
ただし、何かをフラッシュする前に、古いキャッシュが本当に原因なのかを30秒かけて確認する価値があります。多くの場合、原因はキャッシュではないからです。
最初に、原因がキャッシュであることを確認する
自分と情報源との間にあるすべてのキャッシュを迂回して、権威ネームサーバーに直接問い合わせます。
dig +short example.com @ns1.example.com- 権威サーバーは新しい値を返すのに、自分には古い値が見える場合は、キャッシュが原因です。フラッシュが効く可能性があります。
- 権威サーバーも古い値を返す場合は、フラッシュしても何も変わりません。レコードが保存されていないか、ドメインが 委任されていない プロバイダーで編集してしまっています。
重要なポイント
フラッシュで消去できるのは、自分で管理しているマシンのキャッシュだけです。ISPのリゾルバーや他人のリゾルバーには手が届かず、それらはレコードのTTLに従って、それぞれのスケジュールで期限切れになります。
Windows
コマンドプロンプトまたはPowerShellを管理者として開き、次を実行します。
ipconfig /flushdnsDNS リゾルバー キャッシュは正常にフラッシュされました。 と表示されるはずです。管理者権限がないと、権限エラーで失敗します。
ipconfig /displaydnsmacOS
Big Sur以降のすべてのバージョンで、コマンドは1つです。パスワードの入力を求められます。
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder成功しても出力はありません。何も表示されなければ、成功したということです。両方のコマンドに意味があります。前半はディレクトリサービスのキャッシュを消去し、後半は残りを保持しているリゾルバーのデーモンを再起動します。
Linux
Linuxは、使われているリゾルバーのデーモンがディストリビューションによって異なるため、方法も異なります。まず、どれを使っているかを確認してください。
systemctl is-active systemd-resolved
systemctl is-active nscd
systemctl is-active dnsmasqsudo resolvectl flush-caches
# Confirm it worked:
resolvectl statisticssudo systemctl restart nscdsudo systemctl restart dnsmasqブラウザー
ブラウザーは、オペレーティングシステムとは独立して、独自のDNSキャッシュを持っています。OSのキャッシュをフラッシュしても、これは消去されません。dig ではすでに新しいアドレスが表示されているのに、Chromeでは古いアドレスからサイトが読み込まれ続けることがあるのは、このためです。
| ブラウザー | 消去方法 |
|---|---|
| Chrome / Edge / Brave | chrome://net-internals/#dns を開き、ホストキャッシュをクリアをクリックする |
| Firefox | about:networking#dns を開き、DNSキャッシュをクリアをクリックする |
| Safari | macOSのキャッシュを使用するため、OSレベルでフラッシュする |
ルーター
家庭用ルーターは、世帯全体のDNSをキャッシュしていることがよくあります。そのため、すべてのデバイスを1台ずつフラッシュしても、解決しない場合があります。ルーターを再起動するとキャッシュが消えます。荒っぽい方法ですが、効果的です。ファームウェアによっては、管理画面にDNSキャッシュのクリア機能が用意されています。
ネガティブキャッシュ:新しいレコードが見えない理由
通常の場所をいくらフラッシュしても直らない、意外なケースが1つあります。まったく新しいサブドメインを作成し、すぐに問い合わせると「存在しない」と返ってきます。そして、レコードは間違いなく有効になっているのに、しばらくの間その状態が続くのです。
これがネガティブキャッシュです。リゾルバーは、ある名前が存在しないと告げられると、実在する答えと同じように、その不在もキャッシュします。再度問い合わせても、キャッシュされた否定の答えが返るだけです。
その保持期間は、作成したばかりのレコードでは決まりません。ゾーンの SOA レコードの最後のフィールド、つまり最小TTLから決まります。値は300〜3600秒が一般的なので、新しく作成した名前が最大1時間も見えない状態になることがあります。
ローカルのキャッシュをフラッシュすることは、ここでも有効です。否定の答えも、ほかの答えと同様にすべての層で保存されているからです。しかし、ISPのリゾルバーは独自のコピーを保持しており、それは期限切れを待つしかありません。この保持期間がどこから来るのかは、TTL をご覧ください。
そもそもキャッシュがある理由
習慣的にフラッシュしたくなる衝動は、抑えるのが賢明です。DNSのキャッシュは、実際に大きな役割を果たしています。1回のページ読み込みでは、サイト自身、フォント、アクセス解析、画像の名前を解決します。キャッシュがなければ、それらのすべてで、1バイトも取得する前に新たな往復が必要になります。
キャッシュは、あなたを守ってもくれます。DNSプロバイダーに障害が起きても、期限切れになっていないレコードのコピーを持つリゾルバーはそれを返し続けるので、訪問者は何も気づきません。キャッシュを積極的に消去すると、この緩衝材がなくなります。フラッシュするのは、特定の古い答えを追いかけているときだけにして、日常的な衛生管理としては行わないでください。
全手順を順番に
権威サーバーのレコードを確認する
新しい値が情報源で実際に有効になっていることを確かめます。そうでなければここで中止してください。これはキャッシュの問題ではありません。
ブラウザーのキャッシュをフラッシュする
最もよくある原因で、最も簡単に消去できます。プライベートウィンドウでテストするだけでも構いません。
OSのキャッシュをフラッシュする
上記の、お使いのプラットフォーム用のコマンドを使います。
ルーターを再起動する
同じネットワーク上のほかのデバイスでも古い値が表示される場合は、共有されている層が原因である可能性が高いです。
別のネットワークからテストする
モバイルデータ通信は、まったく別のリゾルバーの経路を使います。そちらで正しく表示されるなら、残っている古いキャッシュはISPのものです。解消できるのは時間だけです。
すべてフラッシュしても古い答えが表示されるなら、自分では管理できないキャッシュが切れるのを待っている状態です。待ち時間が何で決まるのかは DNS伝播 で、次回その時間を短くする方法は TTL で説明しています。
ドメインの公開DNSアドレスを調べたい場合は、Domain IP Lookupツールをお試しください。
よくある質問
関連記事
「伝播」の正体は、キャッシュの有効期限切れ
0分
変更を保存
0-5分
DNSホストが更新
TTLまで
古い回答がまだキャッシュ中
TTL後
全員に新しい回答が表示
どこにも何も送られず、各キャッシュがコピーの再利用をやめるだけ
DNS伝播とは?変更の反映に時間がかかる理由
実際には、何も伝播していません。待っている間に何が起きているかが分かれば、どのくらいかかるのか、どう短縮できるのかが正確に分かります。
TTLの実際の選び方
DNS TTLとは?最適な値の選び方
たった1つの数字が、変更が反映される速さと、発生するDNSトラフィックの量を左右します。意図して選ぶ方法を紹介します。
再帰的なDNS検索を1ホップずつ見る
ブラウザー
example.comを要求
リゾルバー
ISP / 1.1.1.1
ルート + TLD
.comの管理元は?
権威サーバー
正式な回答
この連鎖の各ホップはそれ自体がDNS検索で、結果はその後キャッシュされます
DNSの仕組み:ドメイン名からIPアドレスまで
インターネットの電話帳を、端から端まで追跡します。ドメインを入力してから最初のパケットがサーバーに届くまでの数ミリ秒に、何が起きているのかを解説します。