很多人知道 DNS 會把網域轉成 IP,但只停在這一層還不夠。當你之後遇到 propagation、某些地區能開某些不能開,或 NS 設錯時,就會需要理解整條解析流程。這篇就是把這件事講到你真的有感。
你如果不想每次都只是照著別人的畫面一步一步跟著按,卻不知道自己到底改了什麼,這篇會比較適合你。重點不是讓你背流程,而是讓你下次遇到類似情況時,還知道該怎麼自己判斷。
你會學到什麼
- 把 DNS 查詢流程串成一個完整畫面。
- 知道不同層級的 DNS 伺服器各自在做什麼。
- 了解 DNS 快取在哪些層級運作,以及對排錯的影響。
- 理解 CDN 如何改變 DNS 的解析行為。
- 之後遇到解析問題時,更容易判斷問題可能卡在哪裡。
什麼情況最適合先看這篇
- 正在處理網域、解析、Cloudflare 或郵件紀錄,想一次把觀念和排錯順好的人
- 你現在正要處理「DNS 解析完整流程圖解」這類操作
- 你希望做完之後不只功能能用,連驗證與排錯也有概念
開始前先確認
- 先有基本 DNS 名詞概念(如果還沒有,先看 DNS 基礎觀念解析)。
- 最好手邊有一個實際網域可以對照。
- 如果你常要改 NS 或代管平台,這篇特別值得看。
先提醒你一件事
DNS 問題常常不是設定全錯,而是你同時改了太多地方,最後分不清楚是哪一步造成的。
詳細教學與操作步驟
本文將帶你深入了解 DNS 解析的背後機制,透過直觀的流程圖解,告訴你當你輸入一個網址後,電腦是如何在不到 0.1 秒的時間內找到目標伺服器的。
完整 DNS 解析流程圖
一、 遞迴查詢 (Recursive Query)
當你在瀏覽器輸入 kanrays.net 時,電腦會先問「遞迴解析器」(通常是 ISP 或 Google 的 8.8.8.8)。解析器就像是一個快遞員,它負責幫你跑遍全球去尋找答案。在 侃瑞科技 VPS 的環境下,我們建議使用穩定且快速的解析器以減少延遲。
遞迴解析器收到你的請求後,會按照以下順序逐步查詢,直到找到最終答案:
- 先檢查自己的快取裡有沒有答案。
- 沒有的話,去問根伺服器。
- 根伺服器指路後,去問 TLD 伺服器。
- TLD 伺服器指路後,去問權威伺服器。
- 拿到答案後回傳給你,同時把結果快取起來。
二、 根伺服器與 TLD 的協力
如果解析器沒有紀錄,它會問:
- 根伺服器 (Root Server): 全世界有 13 組根伺服器(A 到 M),它們是 DNS 架構的最頂層。根伺服器不會直接告訴你網域的 IP,而是告訴解析器要去哪裡找
.net、.com、.tw等頂級網域的伺服器。 - 頂級網域伺服器 (TLD Server): 負責管理
.net,它會告訴解析器kanrays.net是由哪台「權威伺服器 (Authoritative Server)」管轄。
三、 權威名稱伺服器 (Authoritative DNS)
這是最關鍵的一步。權威伺服器擁有網域的「最終解釋權」。它會告訴解析器:kanrays.net 的 IP 位址是 123.45.67.89。這也是你在管理介面修改 DNS 紀錄後,資料真正存放的地方。關於如何設定,請參考我們的 網域指向教學。
四、 DNS 快取層級圖解
為了避免每次都跑完整的查詢流程,DNS 在多個層級設有快取機制。理解這些層級,對於排除「為什麼改了設定卻沒生效」的問題特別重要。
快取對排錯的影響:
當你改了一筆 DNS 記錄後,權威伺服器上的資料是立即更新的。但要等到所有中間層的快取都過期(根據 TTL),全世界才會看到新的結果。這就是為什麼你可能改完紀錄後自己的電腦還是看到舊的 IP。
各層快取的清除方式:
| 快取層級 | 清除方式 |
|---|---|
| 瀏覽器 | 關閉所有分頁或使用無痕模式 |
| 作業系統 | Windows: ipconfig /flushdns、macOS: sudo dscacheutil -flushcache |
| 路由器 | 重新啟動路由器 |
| ISP 解析器 | 無法主動清除,只能等 TTL 過期,或改用其他 DNS(如 8.8.8.8) |
| 權威伺服器 | 不需要清除,修改即生效 |
五、 CDN 對 DNS 的影響
當你使用 CDN(如 Cloudflare)時,DNS 的解析行為會發生變化。理解這一點對排錯特別重要。
沒有 CDN 時的解析:
使用者 → DNS 查詢 → 取得主機 IP → 直接連線到主機
使用 CDN 時的解析:
使用者 → DNS 查詢 → 取得 CDN 邊緣節點 IP → CDN 轉發到主機
CDN 對 DNS 排錯的影響:
- 看不到真實 IP:開啟 Cloudflare Proxy(橘色雲朵)後,
dig查到的是 Cloudflare 的 IP,不是你主機的 IP。這是正常的。 - Anycast 路由:CDN 會根據使用者的地理位置,回傳離他最近的邊緣節點 IP。所以你在台灣查到的 IP 和在美國查到的 IP 可能不同,但都是正確的。
- 快取層更多:CDN 本身也有快取,當你更新主機上的內容但 CDN 快取還沒過期時,使用者看到的可能還是舊內容。這不是 DNS 的問題,而是 CDN 快取的問題。
Cloudflare 的 Anycast DNS:
Cloudflare 使用 Anycast 技術,讓全球使用者查詢 DNS 時,自動連到離他們最近的 Cloudflare 資料中心。這代表:
- DNS 查詢速度更快(通常 < 10ms)。
- 即使某個資料中心離線,其他資料中心會自動接手。
dig查到的結果可能因為地理位置不同而有差異,但都是指向 CDN。
六、 用 dig +trace 實際觀察解析流程
如果你想親眼看到 DNS 是怎麼一層一層查下來的,dig +trace 是最好的工具。以下是一個實際的查詢範例:
$ dig kanrays.net +trace
; <<>> DiG 9.18.18 <<>> kanrays.net +trace
;; global options: +cmd
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
...(13 台根伺服器)
net. 172800 IN NS a.gtld-servers.net.
net. 172800 IN NS b.gtld-servers.net.
...(.net 的 TLD 伺服器)
kanrays.net. 86400 IN NS xxx.ns.cloudflare.com.
kanrays.net. 86400 IN NS yyy.ns.cloudflare.com.
(Cloudflare 的權威伺服器)
kanrays.net. 300 IN A 151.158.27.102
(最終拿到 IP 位址)
從這個輸出你可以清楚看到:
- 第一段:根伺服器回應了 13 台根伺服器的位址。
- 第二段:根伺服器指引到
.net的 TLD 伺服器。 - 第三段:TLD 伺服器指引到 Cloudflare 的權威伺服器。
- 第四段:權威伺服器回傳最終的 A 記錄。
這個過程在實際環境中通常只需要 50-200ms,而且大部分時候因為有快取,根本不需要走完全部步驟。
七、 公共 DNS 解析器比較
選擇不同的 DNS 解析器會影響你的上網速度和隱私。以下是台灣站長常用的公共 DNS 服務比較:
| 服務 | IPv4 位址 | 特色 | 適合 |
|---|---|---|---|
| Cloudflare | 1.1.1.1 / 1.0.0.1 | 速度最快、隱私保護佳 | 一般使用 |
8.8.8.8 / 8.8.4.4 | 穩定、全球覆蓋廣 | 開發除錯 | |
| Quad9 | 9.9.9.9 | 自動過濾惡意網域 | 安全需求 |
| 中華電信 | 168.95.1.1 / 168.95.192.1 | 台灣在地,查詢台灣網域快 | 本地網站 |
在 VPS 上設定 DNS 解析器:
如果你的 VPS 放在台灣,可以在 /etc/resolv.conf 設定:
nameserver 1.1.1.1
nameserver 8.8.8.8
這樣你的 VPS 在做 DNS 查詢時(例如寄送 Email、呼叫外部 API)會使用這些解析器,而不是依賴 VPS 供應商的預設 DNS。
八、 DNS over HTTPS (DoH) 與 DNS over TLS (DoT)
傳統 DNS 查詢是明文傳輸的,任何在網路路徑上的人都可以看到你在查詢什麼網域。DoH 和 DoT 是兩種加密 DNS 查詢的方式:
| 特性 | DoH | DoT |
|---|---|---|
| 加密方式 | HTTPS(port 443) | TLS(port 853) |
| 優點 | 與一般 HTTPS 流量混在一起,難以被封鎖 | 專用 port,容易管理與監控 |
| 常見實作 | Firefox、Chrome 內建支援 | Android 9+ 內建支援 |
| 適用情境 | 一般使用者隱私保護 | 企業環境、伺服器 |
目前主要的公共 DNS 服務都支援 DoH 和 DoT:
- Cloudflare:
https://cloudflare-dns.com/dns-query(DoH)、1dot1dot1dot1.cloudflare-dns.com(DoT) - Google:
https://dns.google/dns-query(DoH)、dns.google(DoT)
如何在瀏覽器啟用 DoH:
- Chrome:設定 → 隱私權和安全性 → 安全性 → 使用安全 DNS → 選擇 Cloudflare 或 Google。
- Firefox:設定 → 隱私權與安全性 → DNS over HTTPS → 啟用並選擇供應商。
- Edge:設定 → 隱私權、搜尋與服務 → 安全性 → 使用安全 DNS。
九、 DNS 效能對網站速度的影響
DNS 查詢是使用者訪問你網站的第一步。如果 DNS 查詢慢,使用者要等更久才能看到網頁。以下是影響 DNS 效能的幾個關鍵因素:
影響 DNS 速度的因素:
| 因素 | 影響 | 建議 |
|---|---|---|
| 權威伺服器位置 | 離使用者越遠,查詢越慢 | 使用有全球節點的 DNS 服務(如 Cloudflare) |
| TTL 設定 | TTL 越長,快取命中率越高 | 穩定的記錄設長一點(3600-86400 秒) |
| CNAME 鏈 | 每多一層 CNAME,多一次查詢 | 避免超過 2 層的 CNAME 串連 |
| DNS 記錄數量 | 記錄太多會影響查詢效率 | 定期清理不用的記錄 |
| DNSSEC | 額外的驗證步驟會增加延遲 | 對安全要求高的網域才啟用 |
實際測量 DNS 查詢時間:
# 測量 DNS 查詢時間
dig kanrays.net | grep "Query time"
;; Query time: 12 msec
# 比較不同 DNS 解析器的速度
dig @1.1.1.1 kanrays.net | grep "Query time"
dig @8.8.8.8 kanrays.net | grep "Query time"
dig @168.95.1.1 kanrays.net | grep "Query time"
常見問題
Q:為什麼我改了 DNS 紀錄,網站還是連到舊的?
這就是所謂的「DNS 傳播延遲」。雖然權威伺服器改了,但各地的遞迴解析器還存有舊的快取。你需要等待快取到期,通常是數分鐘到 24 小時。更多排除方法請見我們的 DNS 故障排除指南。
Q:可以使用多台權威伺服器嗎?
是的,這能增加穩定性。在侃瑞科技,我們建議至少設定兩台以上的 NameServers,以防止單點失效導致網站無法存取。
Q:為什麼我用 dig 查到的 IP 不是我主機的 IP?
如果你有開啟 Cloudflare Proxy(橘色雲朵),dig 會回傳 Cloudflare 的邊緣節點 IP,不是你的主機 IP。這是正常的,代表你的流量正在通過 CDN。如果要查看原始 IP,可以到 Cloudflare Dashboard 查看 DNS 記錄中設定的值。
Q:DNS 查詢真的只要 0.1 秒嗎?
如果快取命中(大多數情況),DNS 查詢通常在 1-10ms 內完成。如果是完全沒有快取的冷查詢,需要從根伺服器一路查下來,可能需要 50-200ms。但由於 DNS 查詢結果會被多層快取,實際上大部分查詢都能在極短時間內完成。
做完後怎麼確認自己真的有設對
- 至少用
dig、nslookup或線上工具再驗一次,區分是設定錯、快取,還是 propagation。 - 重新看一次你剛剛改過的設定值、網址、帳號或紀錄,確認沒有填錯對象。
- 如果這篇操作會影響正式網站或正式信箱,建議再從不同網路或不同裝置測一次。
這一題最常踩的坑
- 以為改一筆記錄就全世界同步完成。
- 不知道 resolver 與 authoritative server 的角色差異。
- 只會背名詞,不會連回實際網站情境。
- 開了 CDN 之後用 dig 查不到主機 IP 就以為設定錯了。
- 搞不清楚是 DNS 快取問題還是 CDN 快取問題。
如果你要往下一步走
如果你已經開始碰到實際錯誤,接著看 DNS 問題排除教學。 如果你接下來要把網站正式上線,也可以直接銜接侃瑞的 主機方案 或 VPS 方案。