進階設定

Clash DNS 設定詳解:解決汙染與洩漏

fake-ip 和 redir-host 有什麼區別?如何設定 nameserver 防止 DNS 汙染、避免 DNS 洩漏?這篇文章把 DNS 模組的原理和實際操作設定一次講透。

為什麼 DNS 設定這麼重要

很多人裝好 Clash、匯入訂閱之後就以為萬事大吉了,結果發現某些網站打不開、明明走了代理卻還是被認成國內 IP,或者反過來國內網站被解析到國外去。這些問題十有八九出在 DNS 環節,而不是代理節點本身。

瀏覽器存取一個網址前,首先要把網域解析成 IP 位址,這個過程就是 DNS 查詢。如果這一步被電信業者「動了手腳」,後面代理再怎麼設定都沒用——因為你的裝置一開始就拿到了錯誤的 IP。常見的兩種「動手腳」方式:

  • DNS 汙染電信業者或中間設備偽造 DNS 回應,把你導向錯誤的 IP(比如回傳一個無法存取的位址,或跳轉到廣告頁)。
  • DNS 洩漏即使流量走了代理,DNS 查詢請求卻仍然直連傳送給本地電信業者,導致你存取了哪些網站被完整記錄,代理形同虛設。

判斷標準很簡單:打開 dnsleaktest.com 測試,如果顯示的 DNS 伺服器歸屬地是你的本地電信業者而不是節點所在地,說明存在 DNS 洩漏。

三種 DNS 解析模式對比

Clash 的 DNS 模組支援幾種不同的工作模式,理解它們的區別是設定好 DNS 的關鍵。

1. redir-host 模式

最早期的模式。Clash 直接向上游 DNS 伺服器查詢真實 IP,再根據規則決定走代理還是直連。優點是簡單直觀,缺點是網域分流可能失效——因為真實 IP 拿到手後,如果這個 IP 段沒有被規則命中,就可能直連失敗,而且對 IP 段規則(如 GEOIP)的支援不夠精確。

2. fake-ip 模式(推薦)

Clash 不直接回傳真實 IP,而是先分配一個虛擬的私有 IP(如 198.18.0.1)給用戶端,等實際發起連線時,Clash 再根據網域做規則匹配,決定走代理還是直連,此時才向真正的上游查詢 IP。這種「先分流、後解析」的方式讓基於網域的規則永遠優先生效,是目前最推薦的模式。

fake-ip 模式下,網域規則(DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD)能 100% 命中,因為分流判斷發生在真實 IP 出現之前。這也是為什麼大多數訂閱預設使用這個模式。

3. fake-ip-filter(配合使用)

某些應用(比如部分區域網路設備發現、企業內網系統)不能用虛擬 IP,需要拿到真實 IP 才能正常運作。這時可以用 fake-ip-filter 把這些網域排除在虛擬 IP 分配之外,讓它們始終走真實解析。

config.yaml YAML
# DNS 模組核心設定
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - '+.market.xiaomi.com'
  nameserver:
    - 223.5.5.5       # 阿里 DNS,用於國內網域
    - 119.29.29.29    # 騰訊 DNS,同上
  fallback:
    - tls://8.8.4.4:853     # DoT,用於境外網域
    - tls://1.1.1.1:853
  fallback-filter:
    geoip: true
    geoip-code: CN

nameserver 與 fallback 該怎麼選

這是新手最容易踩坑的地方。nameserverfallback 都是「上游 DNS 伺服器列表」,但作用完全不同:

  • nameserver:預設優先使用的伺服器,一般填寫國內電信業者能正常存取、速度快的 DNS(阿里 223.5.5.5、騰訊 119.29.29.29、114 DNS 等)。
  • fallback:當 fallback-filter 判斷某個查詢結果「不像是國內位址」時,會改用這裡的伺服器重新查詢一次,一般填寫 DoH/DoT 加密 DNS(如 Google、Cloudflare),避免被汙染。

配合 fallback-filter.geoip: true,Clash 會先用 nameserver 查詢,如果解析出的 IP 不在 geoip-code 指定的國家/地區(比如不在 CN),就自動切換到 fallback 重新查詢一次,從而做到「國內網域走國內 DNS,境外網域走加密 DNS」的自動分流,不需要手動維護網域列表。

如果你的機器本身沒有境外直連能力(比如公司內網強制走代理閘道),fallback 裡的 DoT/DoH 請求也需要能被 Clash 自身的代理轉發,否則查詢會逾時。大多數用戶端預設已經處理好這一點,遇到解析異常可以檢查用戶端設定裡是否開啟了「DNS 走代理」選項。

驗證與常見問題排查

怎麼驗證 DNS 設定是否生效
  • nslookup / dig 測試在終端機執行 nslookup google.com,如果回傳的是 198.18.x.x 段的位址,說明 fake-ip 生效了(這是正常現象,不是故障)。
  • DNS 洩漏測試存取 dnsleaktest.com 做擴充測試,確認顯示的 DNS 伺服器位址與你的代理節點歸屬地一致,而不是本地電信業者。
  • 面板日誌在控制面板的「日誌」頁把等級切到 debug,正常存取網站會看到 DNS 查詢與規則匹配的詳細過程,方便定位具體哪一步命中。
常見問題
為什麼 nslookup 查出來的 IP 是 198.18 開頭,網頁卻能正常打開?

這正是 fake-ip 模式的運作方式——198.18.0.0/16 是專門預留的虛擬位址段,僅供 Clash 內部識別網域用,實際網路請求會在建立連線時被 Clash 攔截並轉發到真實節點,不影響正常存取。

某些內網設備/區域網路 NAS 突然連不上了,是不是 DNS 出問題?

很可能是虛擬 IP 段與內網設備發現機制衝突。把對應網域(如 *.lan、路由器管理網域)加入 fake-ip-filter,讓它們走真實解析即可。

換了 DNS 設定後要重啟用戶端嗎?

大多數用戶端支援熱重新載入設定(點擊「重新載入設定」即可),個別情況下快取的 DNS 記錄未過期會導致短暫延遲生效,可以重啟用戶端或清空系統 DNS 快取徹底重新整理。

延伸閱讀

學完了?把 Clash 裝上試試

全平台安裝包一站取得,跟著推薦標籤選就不會錯,幾分鐘就能用上。

前往下載頁
#DNS 設定 #fake-ip #進階設定
返回部落格列表
下載 Clash 用戶端全平台安裝包,即刻開始