Clash DNS 配置詳解:nameserver、fallback 與 DNS 劫持怎麼填

Clash 配置檔裡的 dns 段決定網域解析走哪條路。本文逐項拆解 nameserver 與 fallback 的分工、fake-ip 與 redir-host 兩種模式的差異、DNS 劫持判斷的適用場景,並附上可直接套用的配置範例。

DOC-01

DNS 段在 Clash 裡的位置與作用

Clash 的配置檔裡,dns 段是一個獨立於 proxies 與 rules 的模組。它不管流量走哪個代理節點,只管一件事:網域怎麼解析成 IP 位址。這一步發生在規則比對之前——Clash 拿到網域後先要知道它對應的 IP,才能根據 GEOIP、IP-CIDR 一類規則判斷走向。如果 dns 段配置不當,規則分流的準確性會直接受影響,典型症狀是明明寫了直連規則,卻仍然走了代理,或者反過來。

dns 段的核心欄位包括 enable(是否啟用 Clash 自身的 DNS 處理)、listen(監聽位址,通常配合 TUN 模式使用)、enhanced-mode(fake-ip 或 redir-host)、nameserver(主用解析伺服器列表)、fallback(備用解析伺服器列表)、fallback-filter(判斷何時啟用 fallback 的規則)。這幾項互相配合,構成完整的解析鏈路。

註記

不啟用 dns 段(enable: false)時,Clash 會把 DNS 解析交給作業系統處理,自身只做流量轉發。多數場景建議啟用,以獲得更精確的分流控制。

DOC-02

nameserver 與 fallback 的分工

nameserver 是主用解析伺服器列表,Clash 優先用這些伺服器解析網域。fallback 是備用解析伺服器列表,只在特定條件觸發時才會被採用,並不是簡單的「nameserver 失敗就切換 fallback」。

nameserver 的常見填法

建議填入電信商解析速度快、地理位置就近的伺服器,常見組合是公共 DNS 與本地電信商 DNS 混用:

nameserver:
  - 223.5.5.5
  - 119.29.29.29
  - 114.114.114.114

fallback 的觸發條件

fallback 通常填入境外或跨網路的解析伺服器,例如 1.1.1.1、8.8.8.8。它不是無條件的備用,而是配合 fallback-filter 使用——只有當 nameserver 解析出的結果被判定為「不可信」(例如落入 geoip 之外的位址段,或符合特定規則)時,Clash 才會改用 fallback 重新解析。這個機制的意義在於:本地網域走本地 DNS 能取得就近的 CDN 節點,減少存取延遲;而被污染或需要代理存取的網域,則改用乾淨的境外 DNS,避免拿到錯誤的解析結果。

fallback:
  - tls://1.1.1.1:853
  - tls://8.8.8.8:853

fallback-filter:
  geoip: true
  geoip-code: CN
  ipcidr:
    - 240.0.0.0/4
  domain:
    - +.google.com
    - +.facebook.com

上面這段配置的意思是:如果用 nameserver 解析出來的 IP 不屬於中國大陸(geoip-code: CN 之外),或者符合 domain 列表裡的網域,就認為這次解析結果不可信,轉而用 fallback 裡的伺服器重新查詢。這樣一來,存取被污染網域時能拿到正確的境外解析結果,而存取本地站點時依然走最快的本地 DNS。

DOC-03

fake-ip 與 redir-host:兩種增強模式的差異

enhanced-mode 欄位決定 Clash 用哪種方式處理 DNS 解析結果,可選值是 fake-ip 和 redir-host。這兩種模式的設計目標不同,適用場景也不一樣。

fake-ip 模式

fake-ip 模式下,Clash 攔截 DNS 查詢請求,不回傳網域真實對應的 IP,而是回傳一個預留位址段(預設 198.18.0.0/16)裡的虛擬 IP。應用程式拿到這個虛擬 IP 後發起連線,Clash 在流量經過時再把虛擬 IP 還原成真實網域,交給規則引擎判斷走向,最後再解析出真實 IP 進行轉發。

這種模式的優點是解析速度快(不需要每次都等真實 DNS 查詢回傳),規則比對可以直接用網域而不依賴 IP,準確性更高。配合 TUN 模式使用時,fake-ip 幾乎是標準選擇。缺點是部分對 IP 位址有強依賴的軟體(例如某些遊戲連線、區域網路發現協定)可能因為拿到虛擬 IP 而運作異常,需要在 fake-ip-filter 裡為這些網域單獨排除。

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.0/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
    - "time.*.com"

redir-host 模式

redir-host 模式下,Clash 直接向 nameserver/fallback 查詢真實 IP 並回傳給應用程式,不做虛擬位址替換。規則比對階段依賴的是這個真實 IP,或是在查詢階段記錄下的網域對應關係。這種模式相容性更好,幾乎不會出現應用程式因為拿到「假」位址而運作異常的情況,但解析負擔更大,規則比對在某些複雜場景下不如 fake-ip 精確。

提醒

沒有特殊相容性問題的前提下,建議優先使用 fake-ip。只有在遇到區域網路裝置發現失敗、特定客戶端連線異常等問題,且確認與 DNS 模式相關時,才考慮切換到 redir-host 或者針對性地在 fake-ip-filter 裡加排除項目。

DOC-04

DNS 劫持的判斷與應對場景

DNS 劫持指的是解析請求在傳輸過程中被中間節點篡改,回傳錯誤的 IP 位址,導致存取被重新導向到廣告頁面、錯誤頁面,或者乾脆無法連通。判斷是否發生了 DNS 劫持,常見方法是用不同的 DNS 伺服器分別解析同一個網域,比對回傳結果是否一致——如果本地電信商 DNS 回傳的 IP 與已知的公共 DNS 回傳結果差異明顯,且存取異常,基本可以確認存在劫持或污染。

在 Clash 的場景裡,fallback-filter 機制本身就是應對 DNS 劫持的手段之一:透過 geoip 與網域列表判斷解析結果是否可信,不可信就換用另一組伺服器重新查詢。除此之外,還可以考慮以下幾點:

dns:
  enable: true
  use-hosts: true
  nameserver:
    - https://223.5.5.5/dns-query
    - https://120.53.53.53/dns-query
  fallback:
    - tls://1.1.1.1:853
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN

hosts:
  example.local.test: 127.0.0.1

需要注意的是,DNS 劫持與代理規則分流是兩個不同層面的問題。如果代理節點本身可用,但存取某個網站始終異常,先排查是不是 DNS 解析環節出的問題,而不要一開始就懷疑節點或規則寫錯了。反過來,如果換了幾個 DNS 伺服器解析結果都一致且正確,但存取依然失敗,問題更可能出在代理節點或規則比對上。

DOC-05

防洩漏要點與完整範例

DNS 洩漏指的是本該經過代理處理的網域解析請求,實際上繞過了 Clash 直接發到了系統預設的 DNS 伺服器,暴露了真實存取意圖。避免洩漏,需要注意以下幾個環節:

  1. 確認系統層面的代理設定或 TUN 模式已正確接管流量,不要只開啟部分應用程式的代理而遺漏了系統級 DNS 查詢通道。
  2. dns 段的 enable 欄位必須為 true,否則 Clash 不會介入解析過程,所有查詢都走系統預設路徑。
  3. listen 欄位建議明確指定,例如 0.0.0.0:1053,並確認作業系統或路由層面的 DNS 請求被正確轉發到這個監聽埠,而不是繞道系統內建的 DNS 客戶端。
  4. 開啟 TUN 模式時,建議同步確認 dns 的 fake-ip 或 redir-host 模式與 TUN 的 stack 配置一致,避免兩套解析邏輯互相衝突導致部分請求逸失。
  5. 使用支援 DoH/DoT 的 nameserver,減少電信商在傳輸層觀察和篡改查詢內容的機會。

下面給出一份整合了本文各要點的完整 dns 段範例,可以直接套用到配置檔中,再按實際節點情況調整 nameserver 與 fallback 的具體位址:

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  use-hosts: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.0/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "+.stun.*.*"
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://223.5.5.5/dns-query
    - https://120.53.53.53/dns-query
  fallback:
    - tls://1.1.1.1:853
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
    domain:
      - +.google.com
      - +.github.io

其中 default-nameserver 欄位值得單獨說明:它專門用來解析 nameserver 與 fallback 裡那些以網域形式寫出的 DoH 伺服器位址(例如上例中的 223.5.5.5/dns-query 本身是 IP,但如果換成網域形式的 DoH 位址,就需要 default-nameserver 先解析出這個 DoH 伺服器本身的 IP,再用它去查詢實際的使用者網域)。這是一個容易被忽略但影響解析鏈路能否跑通的細節。

要點

配置修改完成後,建議重新啟動客戶端或重新載入配置,再用不同網域分別測試本地站點與境外站點的存取速度與連通性,確認 fallback-filter 的判斷邏輯符合預期,再投入日常使用。

取得 Clash 客戶端

配置好 DNS 段之後,還需要相符的客戶端與訂閱規則才能生效。前往下載頁取得對應平台的安裝包,或查看教學了解完整配置流程。

下載Clash