DNS 外洩的預防與檢測
很多使用者以為開了代理就高枕無憂,實際上 DNS 外洩可能讓你的瀏覽記錄全程暴露。本文教你徹底消除這個隱患。
DNS 基礎回顧
在理解 DNS 外洩之前,有必要快速回顧一下 DNS 的工作方式。DNS(Domain Name System,網域名稱系統)是網際網路的「電話簿」。當你在瀏覽器裡輸入 www.google.com 並按下 Enter 時,你的裝置並不直接知道這個網域名稱對應哪台伺服器的 IP 位址,它首先要向 DNS 伺服器查詢:「www.google.com 的 IP 是多少?」。DNS 伺服器回傳 IP 位址後,你的裝置才開始真正的連線。
這個 DNS 查詢請求,在傳統配置下,是明文傳送給你的網際網路服務提供商(ISP,即電信業者)指定的 DNS 伺服器的。這意味著電信業者(以及能監聽你網路流量的任何人)可以完整記錄你查詢過哪些網域名稱——即使你最終透過代理訪問了那些網站,DNS 查詢本身已經外洩了你的訪問意圖。
DNS over HTTPS(DoH)和 DNS over TLS(DoT)是加密 DNS 查詢的兩種標準方案,能防止 ISP 在傳輸過程中監聽 DNS 請求。但僅靠加密 DNS 還不夠——在代理情境下,還需要確保 DNS 請求透過代理隧道發出,而不是繞過代理直接發給境外 DNS 伺服器。
DNS 外洩是什麼
DNS 外洩(DNS Leak)指的是:你已經開啟了代理,網站內容透過代理隧道傳輸,但 DNS 查詢請求沒有經過代理,而是直接傳送給了本地電信業者(如中華電信、台灣大哥大、遠傳)的 DNS 伺服器,甚至傳送給了海外 DNS 伺服器(如 8.8.8.8),導致你的網域查詢記錄暴露在代理保護之外。
在 Clash 的傳統工作模式(Redir-Host 模式)中,DNS 外洩是一個結構性問題:
當你訪問 www.google.com 時,作業系統先向本地 DNS 伺服器查詢真實 IP,得到 IP 後,Clash 再根據 IP 判斷該走直連還是代理。問題在於,這個 DNS 查詢發生在 Clash 處理連線之前,並且使用的是系統預設的 DNS 伺服器(通常是電信業者的伺服器),整個查詢過程完全繞開了代理。即使你最終透過代理訪問了 Google,你訪問 Google 的這個事實已經被電信業者 DNS 伺服器記錄。
更嚴重的情況發生在「全域代理」配置中:有些使用者設定了海外 DNS(如 8.8.8.8)但沒有透過代理訪問,這個 DNS 請求裸奔發到海外,不僅被 Google DNS 記錄了完整查詢內容,還增加了額外延遲,可謂一無是處。
外洩的危害
隱私暴露:DNS 外洩最直接的危害是隱私洩漏。即使連線內容經過加密,DNS 查詢本身就已經告訴了第三方你訪問了哪些網站。ISP、政府機構、咖啡廳的 Wi-Fi 管理員都可能記錄這些資訊。
準確性下降:當 DNS 查詢不走代理時,海外 DNS 伺服器(如 8.8.8.8)會根據你在本地的出口 IP 回傳針對本地使用者最佳化的解析結果,而不是針對代理出口所在地區的最佳化結果。這可能導致你訪問某個網站時連接到的伺服器地理位置不對,速度反而變慢。
公共網路風險:在公共 Wi-Fi、飯店網路等不受信任的環境中,DNS 查詢可能遭遇竊聽、劫持甚至偽造回應(DNS Spoofing),導致你被導向惡意網站或連線失敗。部分海外網路環境也存在深度封包檢測(DPI)等流量分析手段。如果 DNS 請求沒有透過代理的加密隧道,即使代理節點完全可用,也可能因為中間節點竄改 DNS 回應而無法正常連線。
Fake-IP 防外洩原理
Clash 的 Fake-IP 模式是徹底解決 DNS 外洩問題的最優方案,被 Mihomo 核心作為推薦配置廣泛使用。
Fake-IP 的工作方式與傳統 DNS 模式截然不同:當應用程式發起 DNS 查詢時,Clash 的內建 DNS 伺服器立即回傳一個「假的」內部 IP 位址(來自保留位址段,如 198.18.0.0/15),不會真正發出 DNS 請求到任何外部伺服器。應用程式拿到這個假 IP 開始建立 TCP/UDP 連線,Clash 在連線層面截獲這個連線,從假 IP 反查出原始網域名稱,再根據規則決定後續處理:
如果規則判斷該網域名稱需要代理,Clash 將「網域名稱 + 埠號」直接透過代理隧道傳送給代理伺服器,在代理伺服器端完成真正的 DNS 解析——這樣 DNS 查詢發生在海外,不受本地網路環境干擾,也更難被中間節點監看或竄改。
如果規則判斷該網域名稱直連(本地網域名稱),Clash 才會對該網域名稱進行真正的 DNS 解析,使用配置檔中指定的本地 DNS 伺服器(如 101.101.101.101,TWNIC Quad101 DNS)進行查詢,結果準確且速度快。
全程沒有任何 DNS 查詢外洩到系統預設 DNS 伺服器,也沒有未加密的境外 DNS 請求——這是 Fake-IP 的根本優勢。
Mihomo DNS 配置方案
以下是一份適用於大多數情境的 Mihomo DNS 配置,開啟 Fake-IP 並妥善處理本地與海外分流:
dns:
enable: true
listen: 0.0.0.0:53 # 監聽本機 53 埠
enhanced-mode: fake-ip # 開啟 Fake-IP 模式
fake-ip-range: 198.18.0.1/16
# Fake-IP 過濾列表:這些網域不使用 Fake-IP,直接真實解析
# 確保 NTP、Apple 推送等系統服務不受影響
fake-ip-filter:
- "*.lan"
- "*.local"
- "*.localhost"
- "time.*.com"
- "time.*.gov"
- "ntp.*.com"
- "+.stun.*.*"
- "+.stun.*.*.*"
# 用於本地網域解析的 nameserver
# 優先使用 DoH/DoT 加密查詢
nameserver:
- https://dns.twnic.tw/dns-query # TWNIC Quad101 DoH
- 101.101.101.101 # TWNIC Quad101(備用)
- 168.95.1.1 # 中華電信 HiNet DNS(備用)
# 用於解析代理節點網域(代理伺服器本身的網域需要直接解析)
proxy-server-nameserver:
- https://dns.twnic.tw/dns-query
- 101.101.101.101
這份配置的關鍵點在於:Fake-IP 過濾列表保留了常見系統服務網域的真實解析,避免 NTP 時間同步、mDNS 等本地服務被 Fake-IP 干擾;本地 nameserver 使用了 DoH 加密查詢,防止 ISP 劫持 DNS 回應;代理節點網域專門使用可靠的本地 DNS 解析,避免代理伺服器位址被 DNS 汙染。
驗證是否外洩
配置完成後,用以下步驟驗證 DNS 外洩是否已被消除:
方法一:使用線上檢測工具。訪問 dnsleaktest.com 或 ipleak.net,點擊「Extended test(擴展測試)」。測試完成後,頁面會顯示你的 DNS 查詢是由哪些伺服器處理的。如果列表中只出現你代理節點所在地區(如美國、香港)的 DNS 伺服器,說明沒有外洩;如果出現了台灣電信業者的 DNS 伺服器(中華電信、台灣大哥大、遠傳等),說明存在外洩,需要檢查配置。
方法二:命令列驗證。在終端機執行以下命令,觀察查詢由哪台伺服器回應:
# 查詢一個境外網域,觀察 SERVER 欄位
nslookup google.com
# 或使用 dig(結果更詳細)
dig google.com
如果 SERVER 顯示的是 127.0.0.1#53(即 Clash 本地 DNS),說明系統 DNS 已經指向 Clash,Fake-IP 在正常運作。如果顯示的是 192.168.x.x(路由器 DNS)或電信業者 IP,說明系統 DNS 設定未能正確指向 Clash,需要檢查 TUN 模式是否已開啟或 DNS 監聽是否正常。
nslookup 或 dig 直接查詢的結果會是 198.18.x.x 這樣的假 IP,這是正常現象,不代表 DNS 外洩。關鍵是觀察 SERVER 欄位顯示的是 Clash 本地位址還是外部 DNS 伺服器。常見誤區
誤區一:「換成 8.8.8.8 就能防外洩」。將系統 DNS 設定為 Google 的 8.8.8.8 或 Cloudflare 的 1.1.1.1 並不能防止 DNS 外洩,反而可能更糟:這些海外 DNS 伺服器的查詢請求本身就是明文的,會裸奔發到海外,可能被沿途網路節點監看,延遲也更高。防外洩的關鍵是讓 DNS 查詢經過 Clash 處理,而不是選擇特定的 DNS 伺服器。
誤區二:「開了代理 DNS 就自動走代理」。傳統系統代理模式下,DNS 查詢完全獨立於代理,不會自動走代理。只有在 Clash 開啟了 DNS 監聽(enable: true)並且系統的 DNS 被指向 Clash(透過 TUN 模式自動完成,或手動修改系統 DNS 為 127.0.0.1)時,DNS 才由 Clash 統一接管。
誤區三:「Fake-IP 模式會讓所有網站都走代理」。Fake-IP 只是 DNS 解析方式的改變,流量分流的決策仍然由規則集決定。配置了 GEOIP,TW,DIRECT 規則的情況下,即使使用 Fake-IP,本地流量仍然走直連,不影響本地網站速度。
總結:使用 Clash Plus,開啟 TUN 模式,配置 Fake-IP DNS,是目前最完整的 DNS 外洩防護方案。三者協同運作,讓代理真正做到「無縫、安全、無外洩」。