分類
技術文章 教學 最新文章

根本就沒有 DNS 傳播,不是那樣的!

你一定聽過 DNS 傳播 (DNS Propagation) 約要 24 ~ 48 小時,為什麼那麼久呢?DNS 傳播到底是什麼?其實,根本就沒有 DNS 傳播時間,因為 DNS 是被動的,並不會主動傳播。

網路上都會提及一個東西叫做 DNS 傳播 (DNS Propagation),告訴你在修改 DNS 紀錄之後要等待 24 ~ 48 小時的 DNS 傳播時間。到底什麼是 DNS 傳播呢?

什麼是 DNS 傳播時間

一般的域名註冊商都在您修改 DNS 紀錄的時候告知要等待 24 ~ 48 小時的 DNS 傳播時間,也就是當你在變更 DNS 紀錄的時候,都會顯示的一段訊息。

在 DNS 中,會透過 TTL (Time To Live) 的設定來決定 DNS 紀錄暫存在快取伺服器的時間,單位是秒。我們隨便查詢一筆紀錄就可以看到 TTL 的設定:

[haway@localhost ~]$ dig @8.8.8.8 haway.30cm.gg a

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> @8.8.8.8 haway.30cm.gg a
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61394
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;haway.30cm.gg.                 IN      A

;; ANSWER SECTION:
haway.30cm.gg.          299     IN      A       172.105.218.233

299 就是 TTL,每一筆紀錄都會有自己獨立的 TTL,299 的意思就是 299 秒,也就是這筆紀錄會在 8.8.8.8 這台伺服器停留 299 秒,才會重新查詢新的紀錄。

但其實用 8.8.8.8 來當範例不好,因為 8.8.8.8 是 Google 提供的 Public DNS 服務,雖然你看到的是一個 IP 位址,但其實後面可能有上千台電腦,所以你這次透過 8.8.8.8 查詢可能與下次的電腦是不同的。如果你可以找到單一伺服器的 Public DNS 來觀察 TTL 的變化,比較好。

用 DNS 傳播這個翻譯其實會讓人容易誤解,這樣會讓你感覺在修改完 DNS 紀錄之後,伺服器會把新的資料 “傳” 到其他伺服器,然後你要等 24 個小時,等最新的資料 “傳” 到全球快取伺服器。

不不不!不是這樣的!根本就 “沒有 DNS 傳出去的動作”,DNS 資料是存在名稱伺服器內,等待查詢,是被動的,說傳出去是不對的,當使用者輸入網址後,就會發起 DNS 查詢,這時候才會有伺服器 “過來查詢 DNS 紀錄”,就會取得新的 DNS 紀錄。所以你要等到所有的 DNS 伺服器都過來查詢新的紀錄,全球才會更新。不是由你的伺服器傳播出去的。

DNS Propagation 只有在變更 NameServer (名稱伺服器) 的時候會需要等待 24-48 小時,DNS 紀錄的更新並不用。

所以 DNS 傳播要等多久呢

在你更新 DNS 紀錄之後,基本上應該在 5 分鐘之內連線就會開始連到新的伺服器,如果您去新伺服器的日誌檔查看,應該會看到有連線紀錄,如果沒有,那可能要檢查一下 DNS 更新有沒有生效

大約等待 2 倍的 TTL 時間,全部的 DNS 舊資料應該要消失,連線都會轉到新的伺服器才對,記得,把舊的伺服器關掉之前,先檢查一下日誌檔還有沒有連線的資訊。

DNS Propagation 的檢查工具

DNS 傳播的檢查工具網路上一堆:

https://www.whatsmydns.net/

https://dnsmap.io/

這類型的工具是讓你檢查 DNS 在全世界的連線有沒有問題,也就是你的 DNS 紀錄能不能被動的傳播到其他地區,譬如中國有防火牆,或是某些地區的人說連不到你的網站,你可以用這些工具檢查有哪些地方的查詢不到你的 DNS 紀錄,不是查詢你的 DNS 有沒有傳播出去,DNS 只有被動查詢,沒有主動傳播這件事情。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。