打個比方:你把信裝進了保險箱送出去,但寄之前先大聲問了一句「張三家住哪」,整條街都聽見了。DNS 洩露就是這個意思:你的流量已經走了代理或 VPN 隧道,但「域名解析」這一步沒進隧道,而是直接問了本地電信業者的 DNS (網際網路的電話簿:域名換地址) 伺服器。結果就是:網站內容他們看不見,但你開啟了哪些域名、什麼時候開啟的,電信業者和你所在的網路一清二楚。對機場和 VLESS 使用者來說,這是最常見也最容易漏掉的一種洩露。連線圖示一切正常,速度也正常,你不專門去測根本發現不了。

好訊息是它完全可以修好,而且大多數情況下只是客戶端裡的一兩個設定。

洩露的是什麼
你開啟了哪些域名✓ 會洩露
頁面內容
你的聊天記錄
你的真實 IP

DNS 洩露到底洩露了什麼

瀏覽器開啟一個網站之前,要先問一句「這個域名對應哪個 IP」。這句話就叫 DNS 查詢,預設發給你所在網路分配的伺服器,也就是電信業者、公司或者酒店的機器。這句問話本身通常不加密,內容就是域名本身。還是剛才那個比方,你在街上喊出了地址。

如果這個查詢沒有進隧道,那麼:

  • 電信業者能記下你解析過的所有域名,等於給你列了一份瀏覽清單;
  • 你所在網路的管理員(公司、學校、酒店)也能看到同一份清單;
  • 網站那邊看到的是代理伺服器的 IP,可你的解析請求來自真實網路,兩邊一對就能把你對上號。

內容本身有 HTTPS 擋著,還是加密的。洩露的是「你去了哪裡」,不是「你看了什麼」。

洩露的是什麼是否洩露
你開啟過哪些域名洩露
訪問時間洩露
頁面內容不洩露

地址換了,網站清單沒換。

為什麼開了機場或節點還會洩露

先看根子上:原因幾乎都出在「哪些流量走代理」這個判斷上。常見的有五種。

  1. 分流規則把 DNS 放行了。 很多規則集預設「中國大陸域名直連」。可為了判斷一個域名是不是中國大陸的,客戶端得先用本地 DNS 查一次,就這一查,你就漏了。
  2. 系統 DNS 沒接管過來。 在「系統代理」模式下,客戶端只管得住瀏覽器的 HTTP/SOCKS 流量,系統自己發出的 DNS 查詢照樣直連。只有 TUN 模式(虛擬網路卡)才接得住全部流量。
  3. IPv6 走了另一條路。 你的隧道只處理 IPv4,可你的網路支援 IPv6,於是系統優先拿 IPv6 直接解析、直接連。這就不只是 DNS 的事了,整條連線都繞開了隧道。
  4. 瀏覽器自己的 DoH。 Chrome、Firefox 和 Edge 可以把 DNS 查詢加密後發給指定服務商(DNS over HTTPS)。這樣電信業者看不到,但查詢仍然帶著你的真實 IP 發出去,服務商知道你是誰。
  5. 客戶端崩潰或重連的那幾秒。 隧道一斷,系統立刻退回預設 DNS,中間那幾秒你是裸奔的。這就得靠 Kill Switch (隧道斷了,網也斷) 一類的功能兜底。
為什麼隧道開著還洩露原因
系統解析器被手動指定手動設定
安卓的「私人 DNS」開著系統設定
IPv6 解析器在隧道外雙棧
分流規則把瀏覽器排除了分流
客戶端沒有自帶解析客戶端

DNS 洩露怎麼檢測:三種方法

方法一:線上檢測站。 用瀏覽器開啟 dnsleaktest.com 或 ipleak.net 這類頁面,點「擴充套件測試」。頁面會讓你的瀏覽器解析幾十個隨機域名,然後列出是哪些 DNS 伺服器來查的。如果列表裡出現了你所在電信業者的伺服器(名字裡常帶電信業者或城市名),那就是漏了;只出現代理節點所在國家的伺服器,才算正常。

方法二:本站工具。 先開啟我的 IP 是什麼,確認顯示的是節點 IP 而不是本地 IP;再開啟 IPv6 洩露檢測,如果檢測到本地 IPv6 地址,說明 IPv6 繞過了隧道,DNS 多半也跟著繞過了;最後跑一次 WebRTC 洩露檢測,瀏覽器可能透過 WebRTC 直接暴露真實 IP,這與 DNS 無關,但同樣要堵。

方法三:命令列。 在終端執行 nslookup example.com(Windows/macOS 都可以),第一行會顯示回答查詢的伺服器地址。如果顯示的是 192.168.x.x 或者電信業者網段,說明你的查詢還走本地;如果是代理客戶端的虛擬地址(比如 fake-ip 段的 198.18.x.x)或者節點側的地址,說明已經接管住了。

檢測結果含義
只有隧道的解析器乾淨
出現電信業者的解析器在洩露
兩者都有部分洩露

DNS 洩露怎麼解決:按客戶端來

Clash / Mihomo / Clash Verge。 在配置裡開啟 DNS 模組,把 enhanced-mode 設為 fake-ipnameserver 填寫會經代理發出的加密 DNS(DoH 或 DoT 地址)。同時開啟 TUN 模式,讓系統層的查詢也被接管。規則集裡如果有「中國大陸直連」,確認它用的是 nameserver-policy 裡指定的直連解析器,只解析真正的中國大陸域名。

Xray / V2Ray 核心(v2rayN、v2rayNG、NekoBox)。 在 DNS 設定裡指定遠端解析器,並在路由規則裡把 DNS 出站指向代理(dns-out 走 proxy)。如果用的是 VLESS + Reality 節點,協議本身不處理 DNS,全靠這裡的配置;開啟「使用核心 DNS」或類似選項,而不是「系統 DNS」。

Shadowrocket / Streisand / V2Box(iOS)。 在「設定」裡找到 DNS 覆寫,填一個加密 DNS 地址;把路由模式設為「代理」或「配置」而非「直連」。iOS 客戶端預設以 TUN 方式工作,所以只要 DNS 覆寫生效,洩露一般就消失了。

系統層面。 Windows 在網路卡屬性裡關閉「Internet 協議版本 6」,或者確認客戶端啟用了 IPv6 轉發;macOS 在網路設定裡把 IPv6 設為「僅本地鏈路」。瀏覽器裡檢查「安全 DNS」選項:要麼關閉,讓客戶端統一接管;要麼確認瀏覽器的 DoH 請求也走了代理。

兜底。 開啟客戶端的 Kill Switch(有的叫「斷線保護」或「阻止非隧道流量」),隧道斷開時直接斷網,而不是退回本地 DNS。

VLESS + Reality 會不會洩露 DNS

VLESS 只是傳輸協議,Reality 只是偽裝層。它們決定「隧道長什麼樣」,不決定「哪些流量進隧道」。所以同一個 VLESS 節點,在 A 客戶端裡不洩露,在 B 客戶端裡洩露,是完全正常的現象,問題永遠在客戶端配置而不在節點。如果你用的是訂閱連結,機場的預設配置通常已經寫好了 DNS 部分,但自己改過規則或換過客戶端之後,重新測一次。機場、節點和客戶端之間的關係,可以看機場是什麼這篇。

檢測結果看不明白,就把看到的東西連同你的環境一起交給 AI。

給 AI 的提示詞
幫我看懂洩露檢測的結果。

檢測顯示:出口地址(哪個)、國家(哪個)、
DNS 伺服器(把顯示的都列出來)、
WebRTC(某個地址 / 什麼都沒有)。
隧道:已連線。客戶端:(名稱)。瀏覽器:(哪個)。

告訴我哪些是洩露、哪些是正常表現,先修哪一個。
如果憑這些判斷不了,說明還要看什麼。

檢查清單

  • 線上檢測站只顯示節點所在國家的 DNS 伺服器;
  • 本站 IPv6 洩露檢測沒有發現本地 IPv6;
  • WebRTC 洩露檢測顯示的是節點 IP;
  • 客戶端處於 TUN 模式或等效的全域性接管模式;
  • DNS 指向加密解析器,並且經代理發出;
  • 瀏覽器的「安全 DNS」與客戶端不衝突;
  • Kill Switch 已開啟。

七條全部透過,DNS 這一環就堵住了。改過配置、換過客戶端或更新過訂閱之後,重新跑一遍,五分鐘的事。

404 VPN 的客戶端目前提供 Android 和 macOS 版本,其餘平臺開發中(見下載頁);客戶端內建 DNS 洩露防護,DNS 查詢預設在 VLESS 或 WireGuard 隧道內解析,並帶有 Kill Switch,隧道斷開時不會退回本地 DNS。想了解連線是怎麼建立的,可以看工作原理;開始使用請到首頁