Clash DNS 設定詳解:nameserver、fallback 與 DNS 劫持逐項拆解

逐項說明 Clash DNS 段的 nameserver、fallback、fallback-filter 與 enhanced-mode 劫持參數,拆解境內外解析分流原理,並附上一份可直接套用的推薦設定。

代理明明設好了,DNS 卻還在拖後腿

很多人第一次接觸 Clash 設定檔時,注意力都會放在 proxiesrules 這兩段——畢竟節點和分流規則看起來才是「決定能不能用」的關鍵。但實際排查時,不少「某個網站打不開」「明明走了代理還是載入到本地 CDN」「切換節點後網頁變慢」的問題,根源都出在 dns 段沒配對。

原因很簡單:代理規則大多按網域比對,但網路連線最終要落到 IP 位址上。如果網域解析這一步就被污染或走錯路徑,後面規則寫得再細也救不回來。DNS 設定的核心任務,就是確保「該走代理的網域解析出真實 IP,該走直連的網域解析出鄰近的 CDN 節點 IP」,兩條路互不干擾。

DNS 段的骨架:nameserver、fallback 各管什麼

Clash 與 Clash Meta(mihomo 核心)的 DNS 模組結構大同小異,常見欄位可以分成三層來理解:

  • nameserver:預設使用的解析伺服器清單,大多數網域都走這裡。
  • fallback:備用解析伺服器清單,專門用來應對 nameserver 結果「看起來不對」的情況。
  • fallback-filter:判斷「結果對不對」的規則,決定何時該採用 fallback 的結果而不是 nameserver 的結果。

最基礎的骨架大致如下:

dns:
  enable: true
  ipv6: false
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

default-nameserver 是容易被忽略的欄位:它只用來解析 nameserverfallback 裡那些寫成網域形式(例如 DoH 位址)的伺服器本身,必須填純 IP,否則會出現「解析 DNS 伺服器位址」這種循環依賴問題。

nameserver-policy:讓不同網域走不同 DNS 的分流開關

只有一組 nameserver 時,所有網域都走同一批伺服器解析,遇到明確分流需求時就不夠用了。nameserver-policy 允許依網域規則指定專屬解析伺服器,寫法類似規則比對:

dns:
  nameserver-policy:
    "geosite:cn":
      - 223.5.5.5
      - 119.29.29.29
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://8.8.8.8/dns-query

這段設定的意思是:命中 geosite:cn(中國大陸網域合集)的請求,固定用陸地 DNS 解析,拿到的自然是鄰近的 CDN 節點;命中海外網域合集的請求,固定用加密的境外 DNS 解析,避免中間商 DNS「順手」回傳錯誤結果。這樣設定之後,陸站不會因為走了境外解析而繞遠路、變慢,海外網站也不會因為用了陸地 DNS 而解析出無法連線的 IP。

要注意,nameserver-policy 的比對優先權高於一般 nameserver,規則命中就直接生效,不會再走 fallback 判斷邏輯——這正是它跟接下來要講的 fallback 機制最大的差異:一個是「事前分流」,一個是「事後糾錯」。

fallback-filter 到底過濾什麼,又是怎麼觸發的

fallback 機制的設計初衷,是應對「不知道該走陸地 DNS 還是境外 DNS」的網域——尤其是沒被 nameserver-policy 分流規則覆蓋到的網域。它的判斷邏輯大致是這樣運作的:

  1. 請求同時(或依序)發給 nameserverfallback 兩組伺服器;
  2. 拿到 nameserver 回傳的 IP 後,對照 fallback-filter 裡的條件做檢查;
  3. 如果這個 IP 命中 geoip-code: CN(即被判定為中國大陸 IP)或命中 ipcidr 清單裡的位址段,就視為這個結果「可信」,直接採用;
  4. 如果沒命中——也就是理應是境外網站,結果 nameserver 卻回傳陸地 IP 甚至無效位址——就判定這是一次疑似污染,轉而採用 fallback 伺服器的解析結果。

ipcidr 裡常見的 240.0.0.0/4 是一段保留位址,部分電信業者在 DNS 污染時會回傳落在這個區間的假位址,把它加入過濾清單可以讓 Clash 提前識別出污染結果。fallback-filter 還支援 domain 欄位,可以依網域白名單強制走 fallback,常用於個別經常被污染的網站。

enhanced-mode:fake-ip 與 redir-host,劫持機制的兩種實現方式

enhanced-mode 決定 Clash 用什麼方式把網域請求「接管」過來再依規則分流,常見兩個取值差異相當大:

fake-ip 模式

Clash 會在本機接管 DNS 請求,替每個網域暫時分配一個位於 fake-ip-range 區間內的虛假 IP,回傳給應用程式。應用程式拿著這個假 IP 發起連線時,Clash 核心會在內部把假 IP 還原成原始網域,再依規則做真正的解析與轉發。這種方式的優點是解析請求完全不出本機、不會被電信業者截獲,搭配 TUN 模式使用時體驗最完整;缺點是少數依賴真實 IP 做驗證的場景(例如某些區網裝置發現、P2P 直連)可能出現異常,需要用 fake-ip-filter 把相關網域排除出去。

redir-host 模式

這種模式下,Clash 會先用設定好的 DNS 伺服器把網域解析成真實 IP,再依 IP 或網域規則分流。它的相容性更好,不容易出現「假 IP 導致程式判斷異常」的問題,但解析過程本身會經過一次完整的 DNS 查詢,速度略慢,且若規則庫裡同時存在 IP 段規則,可能因為解析結果與實際路由位址不完全一致而誤判。

沒有特殊相容性需求的話,啟用 TUN 模式時優先選 fake-ip;若發現某些內網工具、遊戲或裝置發現功能異常,再把對應網域加入 fake-ip-filter,而不是直接切回 redir-host 犧牲整體體驗。

一份可以直接套用的推薦設定

綜合以上幾個欄位,下面這份設定適合大多數「陸地直連、境外走代理」的常規使用場景,可以整段替換進設定檔的 dns 段:

dns:
  enable: true
  ipv6: false
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
    - "+.stun.*.*.*"
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
  nameserver-policy:
    "geosite:cn":
      - 223.5.5.5
      - 119.29.29.29
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://8.8.8.8/dns-query

這份設定的分流邏輯是:先看 nameserver-policy 有沒有命中,命中就直接依對應伺服器解析;沒命中的走 nameserver 預設解析,再由 fallback-filter 判斷結果是否可信,不可信才切到 fallback;整個過程搭配 fake-ip 在本機接管,查詢請求不會被電信業者 DNS 截獲。如果訂閱商提供了自帶的 DNS 最佳化方案,可以先保留預設設定再逐項對照替換,不必整段覆蓋。

常見現象排查

設定好之後如果還是遇到問題,可以依下面幾個方向定位:

  • 陸站連線變慢:多半是 nameserver-policy 沒有覆蓋到相關網域,或陸地 DNS 清單裡只寫了一個伺服器且回應慢,建議補上兩個不同電信業者的公共 DNS。
  • 啟用 fake-ip 後某個區網工具不動作:把對應網域或 IP 段加入 fake-ip-filter,不需要整體換成 redir-host
  • 境外網站仍偶爾解析到無效位址:檢查 fallback-filter 裡的 ipcidr 是否包含當地電信業者常見的污染位址段,必要時把該網域加進 fallback-filter.domain 強制走 fallback。
  • 切換節點後網頁圖片、腳本載入不全:通常不是 DNS 問題,而是分流規則把主網域和靜態資源網域分到了不同策略組,建議檢查規則集是否覆蓋該網站的全部相關網域。
下載客戶端 ->