Clash DNS 設定詳解:nameserver、fallback 與 DNS 劫持欄位怎麼填

逐欄位解說 Clash 設定檔中 DNS 段落的作用與取值方式,並提供家用常規與嚴格防洩漏兩套可直接套用的設定範例。

Clash 為什麼要自帶一套 DNS

打開任何一份 Clash 或 Clash Meta(mihomo)的設定檔,都能看到一整段以 dns 開頭的欄位。它不是擺著好看的,也不是只有進階玩家才需要碰的部分。

系統代理模式下,瀏覽器會把網域原樣交給代理,由遠端伺服器解析,本機 DNS 看似無關緊要。但只要有一個應用程式不走代理、直接向電信商 DNS 發出 UDP 53 查詢,污染與洩漏就會回來:拿到的可能是被下毒的假 IP,查詢紀錄也會完整留在本機網路端。

TUN 模式下,整台裝置的流量都會進入虛擬網卡,網域解析必須先有著落。Clash 的內建 DNS 模組就是負責這件事:統一接管 53 埠的查詢,依設定決定每個網域該問誰、怎麼問、信任哪邊的結果。

所以 dns 段落填得對不對,直接決定三件事:網頁開得快不快、會不會拿到被污染的位址、查詢紀錄落在誰手裡。

dns 段落欄位逐一說明

開關三件套:enable / listen / ipv6

  • enable:總開關。填 false 時整段不生效,Clash 不會接管任何解析,其他欄位等於白填。
  • listen:內建 DNS 伺服器的監聽位址,常見寫法 0.0.0.0:53。TUN 劫持的終點、區域網路裝置把 Clash 當 DNS 用時的入口,都是這個埠。若只在本機使用且走 TUN 劫持,保持預設即可。
  • ipv6:填 false 時會捨棄 AAAA 查詢結果。若寬頻沒有 IPv6,建議關閉,避免應用程式拿到 v6 位址後走一條不存在或更慢的路線。

enhanced-mode 與 fake-ip-filter

  • redir-host:傳統模式,每個網域都做真實解析,相容性最好,代價是多一次 DNS 往返。
  • fake-ip:命中代理規則的網域直接回傳 198.18.0.x 段的假位址,省去真實解析,連線建立更快,也能避開應用程式自行發出 DNS 查詢時被污染的環節。
  • fake-ip-filter:例外名單,名單內的網域必須取得真實 IP。常見條目包括區域網路網域 *.lan、時間伺服器、STUN 服務、部分廠商的登入網域。若某個應用程式在 fake-ip 下行為異常,第一步就是把它的網域加進這份名單。

default-nameserver:引導 DNS

它只做一件事:把設定中以網域形式寫成的 DNS 伺服器(例如 dns.alidns.com)解析成 IP;在沒有另外設定 proxy-server-nameserver 時,也負責解析代理節點的網域。

這裡必須填純 IP 的 UDP DNS,例如 223.5.5.5119.29.29.29。填 DoH 位址會形成「要先解析才能解析」的死循環,整個 dns 段會直接失效。

nameserver:主力解析清單

預設的網域解析伺服器,多台並發查詢,取最快回應的結果。取值寫法有四種:純 IP 即 UDP 53;tls:// 開頭是 DoT;https:// 開頭是 DoH;寫 system 表示沿用系統 DNS。

台灣本地使用建議填當地 DoH,例如 https://dns.twnic.tw/dns-queryhttps://dns.cloudflare.com/dns-query,延遲低,回應結果也更貼近本地 CDN 調度。

fallback 與 fallback-filter

fallback 與 nameserver 同時發起查詢,專門服務「可能被污染、或本來就該走代理」的網域,一般填國際可信 DNS,例如 https://dns.cloudflare.com/dns-querytls://8.8.4.4:853

fallback-filter 決定信任哪邊的結果,四個子欄位各司其職:

  • geoipgeoip-code:當 nameserver 回傳的 IP 不屬於指定地區(如 TW)時,判定為污染,改採 fallback 的回應。
  • geosite:網域命中 gfw 等分類時,直接採用 fallback 的結果。
  • ipcidr:回傳 IP 落在 240.0.0.0/4 這類保留區段時,判定為污染。
  • domain:名單內的網域無條件走 fallback。

補充一句:mihomo 後續版本更推薦 nameserver-policy 搭配分流的寫法,fallback 依然相容,舊設定不必急著改。

nameserver-policy:依網域指派(進階)

依網域或分類指定專用解析伺服器,優先度高於 nameserver 與 fallback。常見寫法:'geosite:cn' 指向中國大陸的 DoH,'+.internal.example.com' 指向公司內部網路 DNS。分流顆粒度比 fallback-filter 更細,適合對解析路徑有明確要求的場景。

「DNS 劫持」到底是劫持什麼

設定中的劫持指的是 Clash 主動接管本機發出的 53 埠查詢,交給內建 DNS 依上述規則回應,而不是攔截別人的流量。

TUN 模式下,設定 tun.enabledns-hijack 後,所有進入虛擬網卡的 DNS 請求都會被收編,這是涵蓋最徹底的方式,任何應用程式都繞不開。

系統代理模式不會劫持 DNS。瀏覽器把網域交給代理端遠端解析沒問題,但本機直連的應用程式仍走系統 DNS。想堵住這個漏洞,要麼開啟 TUN,要麼手動把系統 DNS 改成 listen 填的位址。

注意

listen 保持本機或內部網路可連即可,別把內建 DNS 暴露到公開網際網路。開放遞迴 DNS 會被掃描工具發現並用於放大攻擊。

兩套可直接套用的設定

方案一:家用常規

fake-ip 提速,本地網域走台灣與國際 DoH,命中 gfw 分類或回傳非本地結果的網域自動改用 fallback。適合絕大多數家用寬頻:網頁瞬間打開,本地 CDN 不繞路。

dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "*.msftconnecttest.com"
    - "time.*.com"
    - "localhost.ptlogin2.qq.com"
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver:
    - https://dns.alidns.com/dns-query
    - https://doh.pub/dns-query
  fallback:
    - https://dns.cloudflare.com/dns-query
    - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    geoip-code: CN
    geosite:
      - gfw
    ipcidr:
      - 240.0.0.0/4

方案二:嚴格防洩漏

respect-rules: true 讓發往 nameserver 的查詢本身依規則走代理,查詢內容不會落地到本機電信商;direct-nameserver 負責直連網域,proxy-server-nameserver 負責節點網域,三者職責分開。

dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: false
  respect-rules: true
  enhanced-mode: fake-ip
  fake-ip-filter:
    - "*.lan"
    - "*.local"
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  proxy-server-nameserver:
    - https://dns.alidns.com/dns-query
  direct-nameserver:
    - https://dns.alidns.com/dns-query
    - https://doh.pub/dns-query
  nameserver:
    - https://dns.cloudflare.com/dns-query
    - https://dns.google/dns-query

再疊加 TUN 把整機 53 埠收編,不留旁路:

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

代價也要說清楚:國際 DoH 走代理,首次解析略慢;代理無法使用時解析會整體失敗,需要接受這層耦合。

改完設定,三步驗證

  1. 看日誌:用戶端日誌裡的 [DNS] 那一行會列出每個網域用了哪台伺服器、命中了哪條策略,先確認分流是否符合預期。
  2. 開檢測頁:用瀏覽器連到 DNS 洩漏檢測網站,看到的出口伺服器應該是設定裡的 DoH 供應方或代理出口,而不是本機電信商。
  3. 命令列抽查:執行 nslookup example.com 127.0.0.1 直接向內建 DNS 提問;fake-ip 模式下代理網域回傳 198.18.x.x 是正常現象,不是故障。
提示

YAML 縮排錯誤是 dns 段不生效的頭號原因。欄位前統一用兩個空格,改完記得重新載入設定或重啟核心再測試。

三個高頻問題

  • 本地網站開得慢:fallback 填了國際 DNS 卻沒配 geosite 分流,導致本地網域被國際伺服器解析,CDN 調度跑偏。
  • 某個應用程式連線異常:多半是需要真實 IP,把它的網域加進 fake-ip-filter 即可。
  • 設定看起來沒生效:確認 enable: true、縮排正確,並確認所用用戶端沒有在圖形介面上覆寫 dns 段。

下載 Clash 最新版

Windows、macOS、Android 全平台用戶端,每日核對官方發布。

Clash最新版下載