DNS 泄露的意思是:你的流量已經走了代理或 VPN 隧道,但「域名解析」這一步沒有走隧道,而是直接發給了本地電訊商的 DNS 伺服器。結果是網站內容看不見,但你開啟了哪些域名、什麼時候開啟的,電訊商和所在網絡一清二楚。對機場和 VLESS 用戶來説,這是最常見、也最容易被忽視的一種泄露,因為連接圖標一切正常,速度也正常,只有專門去測才會發現。
好消息是它完全可以修好,而且大多數情況下只是客戶端裏的一兩個設定。
DNS 泄露到底泄露了什麼
瀏覽器開啟一個網站之前,要先問一句「這個域名對應哪個 IP」。這句話叫 DNS 查詢,預設發給你所在網絡分配的 DNS 伺服器,也就是電訊商、公司或酒店的伺服器。查詢本身通常不加密,內容就是域名本身。
如果這個查詢沒有進隧道,那麼:
- 電訊商能記錄你解析過的所有域名,等於一份瀏覽記錄清單;
- 所在網絡的管理員(公司、學校、酒店)也能看到同樣的清單;
- 網站那邊看到的是代理伺服器的 IP,但解析請求來自你的真實網絡,兩邊一對照就能關聯。
內容本身因為 HTTPS 仍然是加密的。泄露的是「去了哪裏」,而不是「看了什麼」。
為什麼開了機場或節點還會泄露
原因幾乎都出在「哪些流量走代理」這個判斷上。常見的有五種:
- 分流規則把 DNS 放行了。 很多規則集預設「內地域名直連」,為了判斷一個域名是不是內地的,客戶端先用本地 DNS 去查一次,這一查就泄露了。
- 系統 DNS 沒被接管。 在「系統代理」模式下,客戶端只接管了瀏覽器的 HTTP/SOCKS 流量,系統自己發出的 DNS 查詢照常直連。只有 TUN 模式(虛擬網絡卡)才能接管所有流量。
- IPv6 走了另一條路。 隧道只處理了 IPv4,而你的網絡支持 IPv6,於是系統優先用 IPv6 直接解析和連接。這不只是 DNS 問題,整條連接都會繞過隧道。
- 瀏覽器自己的 DoH。 Chrome、Firefox 和 Edge 可以把 DNS 查詢加密後發給指定服務商(DNS over HTTPS)。這樣電訊商看不到,但查詢仍然帶着你的真實 IP 發出去,服務商知道你是誰。
- 客戶端崩潰或重連的間隙。 隧道斷開的幾秒鐘裏,系統會立刻退回預設 DNS。需要 Kill Switch 一類的功能兜底。
三種檢測方法
方法一:在線檢測站。 用瀏覽器開啟 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)或節點側的地址,説明已經接管。
怎麼解決:按客戶端來
Clash / Mihomo / Clash Verge。 在配置裏開啓 DNS 模塊,把 enhanced-mode 設為 fake-ip,nameserver 填寫會經代理發出的加密 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 部分,但自己改過規則或換過客戶端之後,重新測一次。機場、節點和客戶端之間的關係,可以看機場是什麼這篇。
檢查清單
- 在線檢測站只顯示節點所在國家的 DNS 伺服器;
- 本站 IPv6 泄露檢測沒有發現本地 IPv6;
- WebRTC 泄露檢測顯示的是節點 IP;
- 客戶端處於 TUN 模式或等效的全局接管模式;
- DNS 指向加密解析器,並且經代理發出;
- 瀏覽器的「安全 DNS」與客戶端不衝突;
- Kill Switch 已開啓。
七條全部通過,DNS 這一環就堵住了。改過配置、換過客戶端或更新過訂閲之後,重新跑一遍,五分鐘的事。
404 VPN 的客戶端(iOS、Android、Windows、macOS)內置 DNS 泄露防護,DNS 查詢預設在 VLESS 或 WireGuard 隧道內解析,並帶有 Kill Switch,隧道斷開時不會退回本地 DNS。想了解連接是怎麼建立的,可以看工作原理;開始使用請到首頁。