清除 Public DNS 服務快取的管道

當 DNS 紀錄有更動的時候,為了盡快看到並確認結果,我們會想要在紀錄的存活時間 (TTL, Time To Live) 到期之前就手動清除瀏覽器或是系統上的 DNS 紀錄快取資料 (例如像 Flush local DNS cache on a browser and local system 這邊有紀錄了幾個常用的方式),但這僅限於我們手邊的裝置,如果 DNS 伺服器上面的紀錄仍然是被快取過的結果,清除本機的快取可能就派不上用場了。

如果想要清除 DNS 伺服器上的快取紀錄該怎麼做呢?如果是自己管理的 DNS 伺服器,可以透過重新啟動服務等方式清除快取,但如果不是自己管理的伺服器應該怎麼辦呢?

例如,自己手上管理的某套服務剛做完 DNS 紀錄變更,我希望使用者也能盡快拿到最新的結果,而不是查詢到被快取在伺服器上面的舊版紀錄,但是大多數的使用者使用的肯定都不是我管理的 DNS,也就是不在我的控制範圍內,比較常見的狀況可能是使用 ISP 預設提供的 DNS 服務,或是其他大型企業提供的 Public DNS 服務 (例如:常用 Public DNS resolver 清單整理 這邊鎖整理),這時候要怎麼做才可以讓使用者更快取得新的 DNS 紀錄而不必等到 TTL 都到期呢?

Google Public DNSCloudflare 1.1.1.1 兩家知名的 Public DNS 服務就有對外提供 Flush Cache / Purge Cache 的功能,界面都相當簡潔,只要輸入對應的網域名稱 (Domain name) 、資源紀錄類型 (Record type),就可以很方便、快速的清除快取紀錄,讓最新的設定能盡快生效,他們的網址分別是:

Google Public DNS 的 Flush Cache 界面
Google Public DNS 的 Flush Cache 界面

另一家知名的 OpenDNS 提供類似的服務則是 CacheCheck ,使用者必須先輸入要確認的網域名稱進行檢查,讓 OpenDNS 將目前他們所紀錄到各伺服器上的的結果 (看起來是只有 A / CNAME Record) 顯示出來,確認過有需要後(自行判斷)才可以點選下方的 REFRESH THE CACHE 進行快取清理的動作

另外像 Verisign Public DNS 有提供比較簡易的 Cache Flush 頁面:https://www.verisign.com/en_US/security-services/public-dns/dns-cache/index.xhtml,但不像 Google 和 Cloudflare 能自行選擇對應的紀錄類型,比較可能像是 OpenDNS 只有提供 A / CNAME Record 的快取清理,猜測是不包含其他像是 TXT 、MX、 NS 、SRV 等類型的紀錄。

目前看到有公開提供快取清理機制的 DNS 服務並不多,變更 DNS 紀錄最保險的作法可能還是要等待紀錄的存活時間到期,在 TTL 到期以前,舊有的紀錄所指向的位置仍然必須要能夠正常提供服務,並且持續追蹤監測透過舊有紀錄提供服務的使用情形,才能避免服務可用性受到影響,好在 Google DNS 和 Cloudflare DNS 目前都是相當多使用者在使用、甚至也是許多系統管理員會拿來當作 DNS 上游的服務,能夠清理這兩家 DNS 的快取紀錄 (外加 OpenDNS 也是滿大的 Public DNS,可惜目前看起來只支援 A Record 的清理) 應該已經能夠有效加速 DNS 變更後的紀錄擴散,當有需要或希望變更能夠用更快的速度生效(在使用者端)時以上方法應該可以作為參考。

發表迴響