代理連上了、網站能開,但 DNS 查詢還在裸奔——這就是 DNS 洩漏:你訪問了什麼域名,本地網路運營商看得一清二楚。這一篇講清 Clash 的 DNS 機制和堵住洩漏的配置。
洩漏是怎麼發生的
只開系統代理時,瀏覽器的 DNS 查詢通常由代理伺服器遠端解析,問題不大。但 TUN 模式下如果 DNS 配置不當,或某些應用自行呼叫系統解析器,查詢就會以明文 UDP 直奔運營商 DNS(埠 53)——流量走了隧道,「想去哪」卻先廣播了出去。
Clash 的解法:接管解析
Mihomo 內建 DNS 模組,兩種工作模式:
- fake-ip(推薦):應用問「google.com 的 IP 是多少」,核心直接回一個保留段假地址(198.18.x.x),應用拿假 IP 發起連線,核心憑假 IP 反查域名、按域名規則分流。真正的解析在代理出口完成——本地網路全程只見假地址,無洩漏且省一次解析延遲。
- redir-host:返回真實 IP,相容性更好,但解析路徑難控,洩漏風險高。僅在個別應用與 fake-ip 衝突時降級使用。
推薦配置模板
寫進 Merge(做法見增強配置),覆蓋訂閱自帶的 DNS 段:
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "+.local"
- "+.msftconnecttest.com" # 系統聯網檢測走真實解析
nameserver:
- https://223.5.5.5/dns-query # 國內域名用加密 DNS
fallback:
- https://1.1.1.1/dns-query # 命中境外域名時使用
fallback-filter:
geoip: true
geoip-code: CN
要點:nameserver 和 fallback 都用 DoH(HTTPS 加密),即使這段查詢沒進隧道,內容也不是明文;fake-ip-filter 把區域網和系統探測域名排除在假 IP 之外,避免印表機、聯網檢測這類功能異常。
TUN 模式的最後一塊拼圖
開 TUN 時保持「DNS 劫持」為 any:53(預設值)。它把所有仍然頭鐵直連 53 埠的明文查詢強行截進核心處理——不管應用多不配合,都逃不出去。TUN 配置本身見 TUN 教程。
怎麼驗證沒洩漏
- 開著代理訪問 dnsleaktest.com 或 browserleaks.com/dns,跑 Extended 測試;
- 結果裡出現的解析伺服器應該全部位於代理出口所在地區/或你配置的 DoH 提供商;
- 一旦出現本地運營商的 DNS 伺服器,就是洩漏——回頭檢查 fake-ip 是否開啟、DNS 劫持是否生效。
改完 DNS 配置記得清一次 fake-ip 快取(重啟核心即可),否則新舊對映混雜可能出現個別網站打不開的假象。