能 ping 外部 IP,輸入網域卻打不開,常見原因就在 DNS。DNS 負責把網域名稱查成 IP;解析器、快取、上游權威紀錄或內外網 split DNS 任一層出錯,都可能讓使用者覺得「網路全壞了」。
那為什麼 LINE、YouTube 還能用?因為那些 App 早就把伺服器位址記在快取裡、連線也還掛著,暫時不必重新查號;而你在瀏覽器打一個新網址,第一件事就是「查號」,一查不到,整條路就卡死。這也是 DNS 故障最讓人抓狂的地方:它幾乎不會實務上「我壞了」,只會讓你覺得「網路怪怪的」,卻查不出原因。
DNS 實際在做什麼:一次完整的「問路」過程
先把比喻講清楚。你在瀏覽器打 tinghao.com.tw,電腦要連的其實不是這串文字,而是一組像 203.x.x.x 這樣的 IP 位址。人記得住名字,機器只認得號碼,中間負責把「名字翻成號碼」的,就是 DNS。它是網路世界的電話簿,只是這本電話簿不是一本,而是分層、分散在全球好幾萬台伺服器上的巨大目錄。
當你的電腦(專業一點叫 stub resolver,也就是問路人)要查一個沒見過的網址,流程大致是這樣:
- 電腦先問它設定裡的那台 遞迴解析器(recursive resolver):通常是電信業者、公用 DNS,或公司內部那台。這個角色像「代你跑腿的櫃檯」。
- 櫃檯若手上沒答案,就從最頂端問起:先問根伺服器(root)「.tw 這類網域歸誰管」,根伺服器指個方向;再問管 .tw、.com.tw 的頂級網域伺服器(TLD)「tinghao 這個名字歸哪台管」;最後問到真正持有答案的權威伺服器(authoritative),才拿到那組 IP。
- 櫃檯拿到答案後,一方面回報給你的電腦,一方面自己抄一份存起來(快取),下次別人再問就不必重跑一輪。
這裡有個常被誤會的地方:全世界的「根」只有 13 組識別位址,但它們背後其實靠 Anycast 技術散布在全球數百個節點就近服務,並不是真的只有 13 台機器扛全世界。名詞不必背,只要記住一件事:一個網址第一次被查,可能要跨越大半個地球問好幾手;之後靠快取,才變成幾毫秒之內回答。
為什麼第一次連比較慢、之後就順
答案就是快取(cache)與 TTL(Time To Live,存活時間)。每一筆 DNS 答案都帶著一個保存期限,櫃檯在期限內會重複使用,不再回頭問。熱門網站幾乎永遠是從快取直接吐出來的,根伺服器與 TLD 其實只承受了實際查詢量的一小部分:整個網際網路能撐得住,靠的就是這層快取。至於 TTL 該設多長,後面選型會細講。
那個「卡一下才開始載入」,實際卡在哪
很多人形容 DNS 慢,是「網頁按下去,會先愣一下,才開始跑」。那一下停頓,常見就是在等 DNS 回答。電腦查不到時不會馬上放棄,而是先等、再重試、還不行才換下一台:以常見設定為例,一次查詢大約等 1 到 2 秒沒回應就重送,重試幾次都失敗,才輪到設定裡的第二台 DNS。這一來一回累積起來,就是好幾秒的空白:使用者感受到的,就是那「卡一下」。
這裡藏著兩個關鍵的工程事實,也是很多人踩過的坑:
- 只設一台 DNS,等於沒有備援。那台一慢或一掛,沒有第二台頂上,每一次連線都得等它逾時,體感慢到讓人懷疑人生。至少要有主、備兩台。
- 「查無此站」和「問不到」是兩回事。如果 DNS 明確回你「這個網址不存在(NXDOMAIN)」,電腦會當成權威答案直接接受,不會再去問第二台;只有在完全沒回應、逾時的情況下才會換手。也就是說,一台設定錯誤但還活著的 DNS,可能比一台當機的 DNS 更難查:因為它會很有自信地給你錯答案,而系統不會自動去找別人求證。
DNS 出問題的典型症狀
DNS 的毛病之所以難抓,就是因為它會偽裝成各種「網路問題」。以下幾種是現場最常遇到的招牌症狀:
- 網站打不開,但 ping IP 卻通。這幾乎是 DNS 故障的鐵證:路是通的,只是查不到門牌。用 IP 直接連得上、用網址就不行,答案常見在 DNS。
- 連到舊的、錯的網站。網站搬家換了 IP,你電腦或櫃檯的快取還記著舊地址,TTL 沒過期就一直帶你去舊主機,等快取過期才會更新。這也解釋了為什麼「改了 DNS 設定不會馬上生效」。
- 內部主機用名稱叫不到,用 IP 就行。公司內的檔案伺服器、印表機、NAS,打名稱連不上、打 IP 就通,代表內部名稱解析(通常就是內部 DNS)出了狀況。
- 時好時壞、間歇性斷線。這種最折磨人,可能是主、備兩台 DNS 一台好一台壞,查詢隨機打到壞的那台,往往要靠持續監測與查詢紀錄才抓得出來。
- 被導去假網站。最嚴重的一種:DNS 被竄改或下毒,把你導向長得一模一樣的釣魚站。網址看起來沒錯,連到的卻是壞人的伺服器。
該用哪一種 DNS:選型與工程判準
選 DNS 沒有標準答案,要看你是什麼規模、有沒有內部系統。
家用與小型辦公室
如果你沒有自己的伺服器、沒有網域、也沒有 AD 環境,那很單純:用電信業者提供的 DNS,或穩定的大型公用 DNS(像 8.8.8.8、1.1.1.1 這一類)都可以。挑選原則就三個字:快、穩、近。這裡要打破一個迷思:公用 DNS 不一定比電信商的快。公用 DNS 節點多、抗攻擊強,但電信商的 DNS 就在你隔壁機房,實測延遲有時反而更低。真要講究,量一下實際延遲再決定,別只憑品牌印象。
有規模的公司:你需要一台內部 DNS
只要你有內部伺服器、有自己的網域,或跑 AD(Active Directory)環境,幾乎就一定得自建一台內部 DNS。它負責解析公司內部的主機名稱(像 fileserver、erp 這種只有內部認得的名字),對外的查詢再轉發(forward)給上游的公用或電信 DNS。少了它,內部電腦彼此就只能背 IP 互叫,一旦 IP 有變動,維護會變成惡夢;AD 更是離不開 DNS,網域登入、群組原則、憑證定位,全都靠它。
這裡要特別提醒一個進階、卻很常見的坑:內外同名(split-horizon/split-brain DNS)。很多公司內部 AD 網域名稱,和對外的官網網域取成同一個。這時內部 DNS 要做到「同一個名字,內部查回私有 IP、外部查回公開 IP」,設定稍有閃失,就會出現「公司內連不到自己官網」或「內部服務不小心暴露到外面」的怪事,一定要規劃清楚,不能隨手設一設就上線。
TTL 實際該設多久
這是最能看出功力的一個參數。實務上的共識大致是:
- 穩定、少變動的紀錄(官網、郵件),TTL 設在 300 到 3600 秒(5 分鐘到 1 小時)之間,兼顧效能與更新彈性。
- 準備搬遷或換 IP 前,先把 TTL 調低到 60 到 300 秒,讓變更能快速在各地生效。
- 標準做法是三段式:搬遷前一兩天先把 TTL 調低,搬遷完、確認一切正常後,再把 TTL 調回長值,回到省查詢、快回應的狀態。
另外,對外的權威 DNS 最好由兩家不同供應商各放一台,一家出事、另一家還能頂上:這一點,下一段的公開案例會告訴你為什麼重要。
DNS 也是一道資安防線
很多人不知道,DNS 不只是查號工具,它其實是資安上性價比極高的一道閘門。原因很簡單:幾乎所有連線的第一步都要先問 DNS,所以只要在這個關卡設檢查,就能在壞事真正發生前先攔下來。
過濾型 DNS(Protective DNS)
市面上有一種具過濾功能的 DNS(Protective DNS,簡稱 PDNS),原理是這樣:員工不小心點到釣魚信裡的連結,電腦照樣會先去問 DNS「這個網址在哪」,而過濾型 DNS 一比對,發現這是已知的惡意、釣魚或中繼(C2)網域,就直接回一句「查無此站」,讓連線根本連不出去,等於在使用者真的踩進陷阱之前就先把門關上。美國資安主管機關(NSA 與 CISA)在 2021 年就發布過聯合指引,明確把過濾型 DNS 列為對抗勒索軟體、釣魚與殭屍網路的關鍵防線。附帶的好處是,DNS 查詢都會留下紀錄,事後要追查「誰在什麼時候連了什麼可疑網域」,這份日誌就是最直接的線索。
不過也別把它當萬靈丹。它擋的是已知的壞網域,對於用快速變換手法(fast flux)不斷更換位址的攻擊,不一定攔得住;它是很重要的一層,但不是唯一一層。對中小企業來說,這種防線成本低、佈署快、效果實在,是很划算的第一步。
被下毒、被竄改:以及 DNSSEC
DNS 本身也會被攻擊。最經典的是快取下毒(cache poisoning):攻擊者想辦法在櫃檯的快取裡塞進假紀錄,之後所有問這個網址的人,都會被導去假 IP。對付它的標準武器叫 DNSSEC,做法是用數位簽章建立一條「信任鏈」:根為 TLD 簽名、TLD 為各網域簽名,會驗章的解析器可以一路驗證到最頂端的信任錨點,只要簽章對不上就拒收。對已簽章的網域,這讓下毒在密碼學上幾乎不可能得逞。
反過來也要警惕:內部 DNS 一旦被入侵或設錯,等於一次把全公司的人都導去假網站。它是全公司連線的總機,設定變更務必留下紀錄與審核,不能讓任何人隨手就改。
加密的 DNS:DoH 與 DoT
傳統 DNS 查詢是明文的,用 UDP 送出去,路上任何人都看得到你在查哪個網站,也有機會動手腳。為了補這個洞,出現了兩個加密標準:DoT(DNS over TLS,RFC 7858,走 853 埠)和 DoH(DNS over HTTPS,RFC 8484,走 443 埠,和一般網頁流量混在一起)。它們把查詢包在加密通道裡,旁人看不到、也改不了。
但對企業來說,這裡有個雙面刃要留意:員工電腦或瀏覽器若自作主張啟用了 DoH,查詢會直接繞過公司的內部 DNS 送到外面,公司的過濾與紀錄就全部失效了。所以企業導入加密 DNS,重點不是「開不開」,而是「由誰統一控管」:理想做法是由內部 DNS 統一對上游走加密,同時關掉端點各自為政的 DoH。
一個真實教訓:DNS 是被忽略的單點故障
2016 年發生過一件讓整個業界重新認識 DNS 的事:一家大型 DNS 服務商遭到大規模阻斷式攻擊,攻擊來源是數以千萬計被惡意軟體感染的物聯網裝置(網路攝影機、路由器、印表機等),同一時間湧向那家服務商的伺服器。結果是北美與歐洲一連串知名網站:社群平台、串流影音、電商:連續數小時打不開。諷刺的是,那些網站自己的伺服器好端端的,壞掉的只是幫它們「查號」的 DNS。
這件事的教訓非常直接:DNS 是最容易被忽略的單點故障。你的官網、郵件、對外服務能不能被找到,全繫於 DNS 這一環;它一斷,前面再穩的伺服器都等於憑空消失。所以對外的權威 DNS 要有冗餘,最好分散在兩家不同供應商;對內的 DNS 也要有備援。這不是過度設計,而是拿「一次數小時全公司停擺」的風險,去換一台備援伺服器的成本,怎麼算都划算。
幾個最常見的誤區
- 「ping 得到就代表沒問題。」ping 通的是 IP,DNS 管的是「名字翻成 IP」。ping 得到、網址卻打不開,恰恰是 DNS 的招牌症狀。
- 「改了 DNS 馬上就會生效。」只要 TTL 還沒過期,各地的快取都還記著舊答案,改動要等快取過期才會全面生效:這也是為什麼搬站前要先降 TTL。
- 「一台 DNS 就夠了。」沒有備援,那台一慢一掛,全公司就陪它一起等逾時。主備至少兩台,對外最好用兩家不同供應商。