Clash DNS 設定逐項拆解:nameserver、fallback 與 DNS 劫持參數怎麼寫
DNS 段是 Clash/Clash Meta 設定檔裡最容易被複製貼上、卻很少被真正理解的部分。本文從 enhanced-mode 的兩種運作方式講起,拆解 nameserver 與 fallback 各自負責什麼、fallback-filter 如何判定網域是否被污染,最後提供一份帶逐行註解的可直接套用範本。
DNS 段解決的是什麼問題
代理軟體本身不解析網域——它轉發的是流量,但流量在進入代理之前,系統或應用程式得先把網域解析成 IP。如果這一步用的是本地電信業者 DNS,會出現兩個典型問題:一是解析結果被污染或劫持,回傳錯誤 IP;二是解析動作本身暴露了存取意圖,即便流量之後走了代理,DNS 請求也可能走的是明文 UDP 53 埠,被中間設備記錄甚至攔截。Clash 的 dns 設定段就是用來接管這一步解析過程的,讓網域解析和流量轉發都在同一套規則體系下完成。
這個模組由兩部分構成:enhanced-mode 決定網域到 IP 的轉換方式,nameserver/fallback 一組參數決定實際發起解析請求時用哪些上游伺服器、依什麼順序嘗試。兩者配合,才能既確保規則分流準確命中,又避免解析結果被污染。
enhanced-mode:fake-ip 與 redir-host 怎麼選
enhanced-mode 只有兩個取值,行為差異很大:
- fake-ip:Clash 攔截 DNS 查詢後,不立即請求真實 IP,而是從一個專用位址段(預設
198.18.0.0/16)裡分配一個假 IP 回傳給應用程式。應用程式拿著假 IP 發起連線時,再由 Clash 在建立連線的瞬間反查真實網域,依規則決定走哪個代理群組。這種方式規則比對最準確,因為分流依據始終是網域而非可能變動的 IP,是目前主流用戶端(mihomo 核心系列)的預設值,也是官方推薦設定。 - redir-host:直接向上游伺服器請求真實 IP 並原樣回傳。相容性較好,尤其部分依賴真實 IP 做地理位置判斷的應用程式(某些影音、地圖類 App)會因為拿到假 IP 段而運作異常,這時才需要切到 redir-host。代價是規則比對退化為按 IP 段比對,對基於網域的精細分流會打折扣。
沒有特殊相容性問題時,統一使用 fake-ip,並透過 fake-ip-filter 把區域網路位址、內網服務、實際使用真實 IP 的網域(如部分銀行、區域網路裝置探索協定)排除在假 IP 分配之外,讓這些網域繼續走真實解析。
nameserver 與 fallback 的分工
很多人把 nameserver 和 fallback 都填成一堆 DNS 伺服器位址,卻不清楚 Clash 具體怎麼用它們。實際邏輯是:
nameserver 先查
所有網域預設先用
nameserver裡的伺服器解析,這裡通常填台灣本地或可信的公共 DNS(建議使用 DoH/DoT 而非明文 UDP,避免電信業者在傳輸層就看到查詢內容並順手劫持)。fallback-filter 判定是否需要複查
拿到
nameserver回傳的結果後,如果開啟了fallback-filter的geoip偵測,Clash 會判斷這個 IP 是否屬於geoip-code指定的國家/地區(常見填 TW)。屬於則採信結果;不屬於,說明這個網域很可能是境外資源卻被解析到了錯誤或異常的 IP,觸發下一步。fallback 複查確認
一旦判定需要複查,Clash 改用
fallback清單裡的伺服器重新解析,這裡通常填境外或抗污染能力更強的 DoH/DoT 伺服器,拿到的結果直接作為最終解析結果使用。
換句話說,nameserver 是預設通道、負責效率,fallback 是校驗通道、負責糾錯,fallback-filter 是兩者之間的裁判。三者缺一,DNS 段的抗污染能力都會打折扣:只有 nameserver 沒有 fallback,遇到污染無法糾正;只有 fallback 沒有 nameserver,所有請求都走境外伺服器,台灣本地站點解析延遲明顯增加。
fallback-filter 的 geoip 判斷依賴內建或下載的 GeoIP 資料庫,首次啟動或資料庫過期時該功能可能短暫失效,表現為部分境外網域解析結果異常。確認用戶端的 GeoIP 資料庫處於可用狀態,是排查 DNS 相關問題的第一步。
DNS 劫持的表現與 fallback-filter 之外的應對手段
部分網路環境會對經過電信業者設備的明文 DNS 查詢(UDP 53 埠)做劫持或投毒,常見表現是存取境外站點時被解析到一個不相關的 IP,或者直接回傳一個不存在的位址導致連線逾時。這類劫持發生在傳輸層,與 Clash 的規則設定無關,唯一有效的應對方式是讓 DNS 查詢本身走加密通道:
- 使用
https://前綴的 DoH(DNS over HTTPS)位址,查詢走 443 埠,與一般 HTTPS 流量混在一起,難以被單獨識別攔截。 - 使用
tls://前綴的 DoT(DNS over TLS)位址,查詢走 853 埠並加密,同樣規避明文劫持,但 853 埠本身有時會被單獨限速或攔截,相容性略遜於 DoH。 - 避免在
nameserver/fallback裡混用明文 UDP 位址(形如8.8.8.8不帶協定前綴),明文位址在部分網路下等於沒有防護。
另外要注意 default-nameserver 欄位:它專門用來解析 nameserver/fallback 裡那些 DoH/DoT 伺服器本身的網域(比如解析 doh.pub 這個網域指向哪個 IP),必須填純 IP 位址而不能再填網域形式的 DoH 位址,否則會出現循環解析導致 DNS 模組無法啟動。
可直接套用的 dns 設定範本
以下範本適用於 mihomo 核心(Clash Meta 系列用戶端均基於此核心),按行註解了每個欄位的作用,可以直接整段替換進設定檔的 dns 段:
dns:
enable: true # 開啟 DNS 接管,不開則退回系統預設解析
ipv6: false # 未啟用 IPv6 網路時建議關閉,減少無效查詢
enhanced-mode: fake-ip # 規則比對最準確的模式,遇相容性問題時改 redir-host
fake-ip-range: 198.18.0.1/16 # 假 IP 分配段,與本地真實網段不衝突即可
fake-ip-filter: # 以下網域走真實解析,不分配假 IP
- "*.lan"
- "+.local"
- "time.*.com"
- "*.market.xiaomi.com"
default-nameserver: # 僅用於解析下方 DoH/DoT 伺服器自身網域,必須是純 IP
- 223.5.5.5
- 119.29.29.29
nameserver: # 預設解析通道,可依所在地區優先選擇對應 DoH
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
fallback: # 校驗/糾錯通道,境外網域解析異常時啟用
- https://1.1.1.1/dns-query
- tls://8.8.8.8:853
fallback-filter:
geoip: true # 開啟地理位置校驗
geoip-code: CN # 解析結果不屬於該地區則觸發 fallback 複查
ipcidr: # 命中以下網段的結果視為異常,直接觸發 fallback
- 240.0.0.0/4
domain: # 以下網域固定走 fallback,不經過 nameserver 判斷
- "+.google.com"
- "+.youtube.com"
使用時把 fake-ip-filter 和 fallback-filter.domain 裡的範例項目替換成實際需要特殊處理的網域即可,其餘欄位大多數情境下無需改動。
常見排查思路
改了 dns 設定後完全無法上網怎麼辦?
先確認 default-nameserver 填的是純 IP 而非網域形式的 DoH 位址,這是最常見的循環解析問題。其次檢查 YAML 縮排是否正確,dns 段對層級要求嚴格,一個空格錯位就會導致整段設定被忽略。
fake-ip 模式下某個 App 一直連線失敗,是 DNS 的問題嗎?
大機率是該 App 內建了伺服器位址校驗或對 IP 段做了白名單判斷,把它的網域加入 fake-ip-filter 讓其走真實解析通常能解決;如果同類問題反覆出現,可以整體考慮改用 redir-host。
境外站點存取依舊很慢,是不是 fallback 沒生效?
可以先確認代理規則本身是否命中了正確的代理群組,DNS 解析正確但走了錯誤的策略群組同樣表現為慢。若排除規則問題,再檢查 fallback 伺服器的連通性,必要時更換其他可用的 DoH/DoT 位址。