每次你打開一個網站,裝置都會請一台解析伺服器把網域名稱換成 IP 位址。這個提問就是一筆明文紀錄,寫著你接下來要去哪裡,而在預設情況下,它會送到你的網路指派給你的那台解析伺服器 —— 通常就是你的網路業者的。
DNS 洩漏就是這些查詢跑到了你沒打算讓它去的地方。最常見的情況是:裝置設定成使用私人或加密的解析伺服器,卻因為幾種結構性的原因之一,仍然把部分或全部的查詢送給了 ISP。表面上什麼都沒壞掉,這正是洩漏可以無聲無息持續好幾年的原因。
DNS 到底暴露了什麼?
網域、時間戳記,以及來源 —— 這三樣已經足以還原一整段瀏覽過程。
傳統 DNS 走 53 埠、不加密。任何處在你與解析伺服器之間的人都能讀到查詢內容,而解析伺服器本身看得到其中的每一筆,並且全部歸到你這條連線名下。它看不到具體是哪一頁,但敏感的部分通常就在網域。
加密改變的是這份紀錄握在誰手上,而不是它存不存在:
| 傳輸方式 | 有加密嗎? | 誰看得到查詢 |
|---|---|---|
| 明文 DNS(53 埠) | 沒有 | 你的網路、你的 ISP、解析伺服器 |
| DNS over TLS(DoT,853 埠) | 有 | 你選的那台解析伺服器 |
| DNS over HTTPS(DoH,443 埠) | 有 | 你選的那台解析伺服器;網路端較難把它跟一般網頁流量區分開來 |
| DNSSEC | 沒有 —— 它做的是驗證 | 跟明文 DNS 一樣;它證明答案沒被竄改,但不會把答案藏起來 |
DNSSEC 是最常被誤解的一項。它替回應簽章,讓回應無法被偽造。它完全不提供任何機密性。
洩漏實際上是怎麼發生的?
六種結構性成因,幾乎涵蓋了全部。
| 成因 | 機制 |
|---|---|
| 分流路由 | 一部分流量走隧道,DNS 卻走預設網路介面 |
| IPv6 沒被帶進隧道 | 隧道只處理 IPv4,於是 IPv6 查詢走回 ISP 那條路 |
| 作業系統平行解析 | Windows 會同時向所有網路介面發問,誰先回就用誰的 |
| 瀏覽器層級的 DoH | 瀏覽器獨立於系統設定自行解析,兩個方向都可能出事 |
| 路由器覆寫 | 路由器透過 DHCP 強制指定自己的解析伺服器,或直接攔截 53 埠 |
| 網路認證頁 | 飯店或機場的網路劫持 DNS,把你導向它的登入頁 |
瀏覽器那一項值得說清楚,因為它是雙向的。有自己 DoH 設定的瀏覽器可能繞過你辛苦設好的系統解析伺服器;反過來,一個設定正確的瀏覽器,也可能掩蓋掉「這個瀏覽器以外的所有東西都還在洩漏」這件事。只檢查其中一邊、然後假設另一邊沒問題,是最常見的檢測錯誤。
那該怎麼檢查?
每一層分開測,因為它們的結果可能互相矛盾。
作業系統 —— 目前設定了哪些解析伺服器:
| 系統 | 指令 |
|---|---|
| macOS | scutil --dns | grep nameserver |
| Windows | Get-DnsClientServerAddress |
| Linux(systemd-resolved) | resolvectl status |
| Linux(通用) | cat /etc/resolv.conf |
實際回答你的是哪一台 —— 設定跟實際行為是兩回事:
dig +short whoami.akamai.net 會回傳那台替你完成查詢的解析伺服器的 IP 位址。拿它跟你預期的那一台比對。
**瀏覽器層級:**打開瀏覽器的安全 DNS 設定,看它有沒有啟用、選的是哪一家供應商。然後在同一個瀏覽器裡開一個 DNS 洩漏檢測頁。如果那頁回報的解析伺服器跟你在命令列測到的不同,就代表瀏覽器在自行解析。
**IPv6:**用純 IPv6 的查詢再測一次。隧道只承載 IPv4,是部分洩漏最常見的單一成因。
結果該怎麼判讀?
拿解析伺服器的歸屬方跟你的預期比對,而不是跟一份「安全位址」清單比對。
| 觀察到的情況 | 判讀 |
|---|---|
| 解析伺服器屬於你的 ISP,但你明明設了另一台 | 洩漏 |
| 列出好幾台,其中一台是你的 ISP | 部分洩漏 —— 查詢被分流了 |
| IPv4 顯示的是預期的那台,IPv6 顯示 ISP | IPv6 洩漏 |
| 瀏覽器與系統回報的解析伺服器不同 | 不一定是洩漏,但代表有兩條獨立的路徑要各自確認 |
| 解析伺服器落在意料之外的國家 | 通常是正常的 —— anycast 解析伺服器由最近的節點回應 |
| 解析伺服器是路由器的私有位址 | 無法判定;路由器會再往上轉送,要去看路由器自己的設定 |
最後一列是家用網路的陷阱。結果顯示 192.168.1.1,只告訴你「是你的路由器回答的」。路由器再轉送給誰,是另一個問題,答案在路由器的 WAN 或 DNS 設定裡。
修好它,極限在哪裡?
修好 DNS 洩漏,改變的是「誰會知道你查了哪些網域」。它不會讓你的造訪變得隱密,而把這件事講過頭,正是這個題目最常被扭曲的方式。
名稱解析完之後,你的裝置會對那個 IP 位址開一條連線。路徑上的任何觀察者都看得到目的位址,而大多數 TLS 連線在交握階段就以未加密的方式傳送伺服器名稱,除非兩端都啟用了 Encrypted Client Hello。這兩個訊號,都能在完全不依賴 DNS 的情況下認出是哪個網站。
所以誠實的結論是:範圍很窄,但確實有用 —— 把 DNS 加密、送到你自己選的解析伺服器,可以讓「你造訪過的每一個網域」這份明文清單從你的本地網路與 ISP 的日誌裡消失,然後把這份清單轉交給解析伺服器的營運方。它搬動了信任,而不是消除信任 —— 這也讓「誰在經營那台解析伺服器、他們記錄了什麼」,變成真正要緊的那個問題。