DNS TTL 與傳播時間教學:為什麼改完仍看到舊 IP

用實際時間軸解釋 DNS TTL、遞迴快取與傳播差異,教你搬站前先降低 TTL、等待舊值到期,再用 Windows、Linux 與 macOS 查詢;並說清楚 Cloudflare Auto 300 秒的限制。

DNS TTLDNS傳播DNS快取Cloudflare舊IPTTL 300網域解析dignslookup網站搬家DNS教學

DNS 記錄改完後,你仍看到舊 IP,通常不是「設定沒有儲存」,而是某個遞迴 DNS 還在使用先前快取的答案。TTL 決定一筆 DNS 答案可以被快取多久;它不是按下儲存後,全世界一起倒數的計時器。

因此,搬站時最有效的方法不是改完才把 TTL 調低,而是提前降低 TTL,等待原本較長的 TTL 過去,再切換 IP

你會學到什麼

  • 分清楚 TTL、DNS 快取與俗稱的「DNS 傳播」。
  • 理解為什麼不同網路會同時看到新舊 IP。
  • 知道降低 TTL 為什麼必須在正式變更前做。
  • 正確理解 Cloudflare Proxied 與 DNS only 的 300 秒。
  • 用 Windows、Linux 與 macOS 比對不同 Resolver。
  • 辨認舊記錄快取與 NXDOMAIN 負快取的差異。

開始前先確認

  • 你知道 DNS 由哪個平台管理,以及目前的 NameServer。
  • 你知道要修改的是 A、AAAA、CNAME、MX 或其他哪一筆記錄。
  • 你已記錄舊值、新值與目前 TTL。
  • 網站搬家時,新主機已完成測試,舊主機會保留一段交接時間。
  • Email DNS 變更要另外盤點 MX、SPF、DKIM、DMARC,不要只看網站 IP。

還不熟悉記錄類型時,先看DNS 基礎觀念解析

TTL 是什麼

TTL 是 Time To Live,以秒為單位。DNS 基礎規範 RFC 1034將它定義為 Resource Record 可以留在快取中的時間上限。

例如:

TTL換算代表意思
3005 分鐘Resolver 最多可在這段期間重用答案
180030 分鐘半小時後需要重新向上游查詢
36001 小時最多快取一小時
8640024 小時最多快取一天

TTL 較短,變更後通常能較快讓新的查詢取得新值,但 Resolver 需要更常重新查詢。TTL 較長,可增加快取命中並減少查詢,但計畫變更時要預留更長交接時間。

「DNS 傳播」其實是各地快取陸續過期

大家常說「DNS 正在傳播」,聽起來像新資料正在一台一台推送到全世界。更精確的理解是:

  1. 你在 DNS 管理平台修改記錄。
  2. 權威 DNS 開始回答新值;平台完成更新的速度由供應商決定。
  3. 之前查過這筆記錄的遞迴 Resolver,仍可能保留舊答案。
  4. 每台 Resolver 在自己的舊 TTL 到期後,才重新查詢權威 DNS。
  5. 不同使用者使用不同 Resolver,也在不同時間查過,所以會陸續切換。

這就是為什麼:

  • 你用手機網路看到新站,公司網路仍看到舊站。
  • 同事正常,你的電腦卻還不正常。
  • 1.1.1.18.8.8.8 查到不同結果。
  • 權威 DNS 已是新 IP,遞迴 DNS 仍回舊 IP。

想看完整查詢路徑,可閱讀DNS 解析完整流程圖解

為什麼改完才降 TTL 通常太晚

假設原本記錄是:

example.com  A  192.0.2.10  TTL 3600

時間軸如下:

時間你做的事某台 Resolver 的狀態
12:00尚未變更查到舊 IP,依 TTL 3600 快取到約 13:00
12:10把 TTL 改成 300先前快取仍保有舊的 3600 秒期限
12:20把 IP 改成新值權威 DNS 回新 IP,但該 Resolver 仍可回舊 IP
約 13:00舊快取到期Resolver 重新查詢,才看到新 IP 與 TTL 300

重點是:你把權威記錄的 TTL 改小,不能遠端召回已經存在其他 Resolver 裡的舊答案。 Cloudflare 的 DNS FAQ也提醒,舊資料可能依先前記錄的 TTL 留在快取中;如果預期會變更,應事先降低 TTL。

搬站前正確降低 TTL 的步驟

步驟一:記錄現在的值

先保存:

  • 記錄名稱。
  • 類型。
  • 舊 IP 或目標值。
  • 目前 TTL。
  • Proxy 狀態。
  • 修改人與預計切換時間。

如果是正式網站,先完成網站搬家前 DNS、Email、SSL 檢查表

步驟二:只降低要切換記錄的 TTL

假設現在 TTL 是 3600 秒,可先調整為 300 秒。不要順手修改 IP,也不要在同一時間大量重建其他記錄,否則之後很難判斷哪個變更造成問題。

步驟三:等待「原本的 TTL」完整走過

原本是 3600 秒,就至少等待一小時;原本是 86400 秒,就要預留一天。等待是讓先前取得舊 TTL 的 Resolver 有機會自然過期。

實務上還要考慮你的變更風險、Resolver 行為與使用者分布,所以不要把「等待一個 TTL」誤解成絕對零風險保證。

步驟四:切換到新 IP

新主機應先完成:

  • 網站內容與資料庫測試。
  • 正確的網域與 HTTPS 設定。
  • 必要的防火牆與服務確認。
  • 動態網站的最後資料同步計畫。

再修改 A / AAAA / CNAME。舊主機先保持可用,讓仍持有舊快取的訪客不會直接看到錯誤。

步驟五:同時查權威 DNS 與多個 Resolver

不要只用自己的瀏覽器重新整理。先確認權威 DNS 回新值,再比對公共 Resolver、公司網路與手機網路。

步驟六:穩定後再調回日常 TTL

變更完成並觀察穩定後,再把 DNS only 記錄調回適合日常營運的 TTL。沒有任何變更計畫時,不一定需要永久維持極短 TTL。

Cloudflare 的 Auto 300 秒要怎麼理解

Cloudflare 的 TTL 官方文件目前說明:

  • Proxied(橘色雲朵)記錄:預設 TTL 是 Auto,值為 300 秒,而且不能手動修改。
  • DNS only(灰色雲朵)記錄Auto 同樣是 300 秒,但可依方案支援的範圍選擇其他 TTL。
  • 本機 DNS 快取可能讓實際體驗超過五分鐘,因此 300 秒不是「每位使用者五分鐘內保證看到變更」。

還有三個重要差異。

Proxied 記錄查到的是 Cloudflare IP

Proxied A、AAAA 或 CNAME 對外查詢時,使用者通常看到 Cloudflare Anycast IP,不是原站 IP。當你只修改 Cloudflare 後方的 Origin IP 時,公共 DNS 查詢結果可能仍是 Cloudflare IP,不能用「dig 有沒有顯示新原站 IP」判斷後端設定。

DNS TTL 不等於 CDN Cache TTL

DNS TTL 管理 DNS 答案多久重新查詢;Browser Cache TTL、Edge Cache TTL 管理網頁、圖片或其他 HTTP 內容多久重新抓取。網站仍顯示舊頁面時,可能是 CDN 或瀏覽器內容快取,不一定是 DNS。

NameServer TTL 是另一件事

更換 NameServer 是改變哪一組權威 DNS 負責你的網域,不等於只修改一筆 A 記錄。Cloudflare 文件也將 Nameserver TTL 與一般 DNS record TTL 分開說明。換 DNS 平台前必須先完整複製 Zone,並預留較保守的交接時間。

Windows 怎麼查 DNS 與不同 Resolver

開啟「命令提示字元」或 Windows Terminal。

查 Cloudflare Public DNS:

nslookup example.com 1.1.1.1

查 Google Public DNS:

nslookup example.com 8.8.8.8

查指定類型,例如 MX:

nslookup -type=MX example.com 1.1.1.1

請把 example.com 換成你的網域。比對結果時記錄查詢時間、Resolver 與回傳 IP,不要只寫「有時正常、有時不正常」。

Linux 與 macOS 怎麼查 TTL

Linux / macOS 常用 dig

dig @1.1.1.1 example.com A +noall +answer
dig @8.8.8.8 example.com A +noall +answer

典型回答:

example.com.  247  IN  A  198.51.100.20

247 是這次答案顯示的 TTL 秒數。向同一台有快取的 Resolver 再查時,數字可能逐步下降;快取到期並重新取得答案後,TTL 會從權威記錄提供的值重新計算。

先查網域使用的 NameServer:

dig example.com NS +short

再直接詢問其中一台權威 DNS:

dig @ns1.example-dns.test example.com A +noall +answer

ns1.example-dns.test 只是格式示例,必須換成上一個指令查到的真實 NameServer。若權威 DNS 已回新值、公共 Resolver 仍回舊值,通常就是在等快取;若權威 DNS 自己仍回舊值,先回 DNS 管理平台與 Zone 設定查錯。

更多查詢方式可參考whois 與 nslookup 查詢教學

新增記錄後仍是 NXDOMAIN:可能是負快取

如果名稱先前不存在,Resolver 可能已快取「不存在」的答案,也就是 NXDOMAIN。此時你新增一筆 TTL 300 的記錄,不代表舊的不存在答案會立刻消失。

Cloudflare 的 General DNS issues 官方文件說明,負快取期限與 Zone 的 SOA 設定有關;降低新記錄 TTL 不會加速已存在的負快取到期。

常見情境:

  1. 你先測試 new.example.com,當時記錄不存在。
  2. Resolver 快取 NXDOMAIN。
  3. 你才新增 A 或 CNAME。
  4. 權威 DNS 已有記錄,但同一 Resolver 暫時仍回答不存在。

處理時應先直接查權威 DNS,再換不同 Resolver 比對。清除自己電腦的 DNS 快取只影響本機,不能清除 ISP 或公共 Resolver 已保存的答案。

常見問題

TTL 設 300,為什麼十分鐘後還是舊 IP

可能原因包括:

  • 舊答案是在 TTL 降低前快取,仍依原本較長 TTL 存活。
  • 你查的是本機、公司或 ISP 的不同快取層。
  • 實際問題是 CDN 或瀏覽器內容快取。
  • 修改了錯誤的 DNS 平台,現在的 NameServer 不使用那個 Zone。
  • Proxied 記錄本來就只會顯示 Cloudflare IP。

重新開機能讓全世界更新嗎

不能。重新開機或清除本機 DNS 快取,只處理你這台裝置。上游 Resolver 的快取仍要依自己的期限與行為更新。

可以把 TTL 永久設很短嗎

可以使用平台允許的短值,但不一定有必要。穩定、不常變動的記錄可使用較長 TTL;有明確搬遷計畫時再提前降低。要兼顧變更速度、查詢量與營運風險。

所有人都看到新 IP,就能立刻關舊主機嗎

不建議只靠少數測試立刻關閉。還要確認應用程式資料同步、背景工作、Email、Webhook、API、搜尋引擎與其他外部服務是否仍連到舊環境。保留交接窗口通常更安全。

DNS 切換檢查表

  • 確認目前真正的權威 NameServer。
  • 保存完整 DNS 記錄與舊值。
  • 提前降低要變更記錄的 TTL。
  • 等待原本 TTL 完整走過。
  • 新主機先用測試方式確認網站可用。
  • 變更時不要誤動 MX、SPF、DKIM、DMARC。
  • 直接查權威 DNS。
  • 比對至少兩個公共 Resolver。
  • 用公司網路與手機網路實際測試。
  • 保留舊主機與回復方案。
  • 穩定後再恢復日常 TTL。

如果改完仍不確定卡在哪一層,可依DNS 問題排除教學逐步查;要把網域接到虛擬主機,則看網域指向虛擬主機教學

需要規劃網站搬家、DNS 切換與 Email 共存,可從聯絡侃瑞科技提供目前 NameServer、要修改的記錄類型、舊 TTL 與預計切換時間。我們會先把切換順序與回復點排好,再進行變更。

官方參考資料

DNS、網站與信箱要一起確認?

如果你正準備上線或搬遷,請把網域、DNS 管理處、網站主機與 Email 服務一起整理。