規則要按網域名稱比對,前提是用戶端能拿到「這條連線對應的網域名稱是什麼」。在沒有開啟特殊處理的情況下,系統可能只把解析後的 IP 交給 Clash,網域資訊已經遺失,規則自然無法按網域比對——這就是為什麼 DNS 設定對規則的準確度至關重要。

enhanced-mode:兩種模式的本質差異

模式原理取捨
fake-ip 先回傳一個虛擬 IP 給應用程式,連線建立時再從虛擬 IP 反查出真實網域名稱用於規則比對 速度快、能更早拿到網域資訊;少數依賴真實 IP 回傳值的場景可能需要例外處理
redir-host 直接回傳真實解析結果,靠流量層面的網域嗅探或重新導向拿到網域 相容性更好;但依賴真實 DNS 查詢,速度與隱私性都不如 fake-ip

目前主流推薦是 fake-ip。它的相容性問題主要出現在少數依賴「DNS 查詢結果必須是真實 IP」的區域網路協定上(比如某些裝置探索、投放螢幕協定),遇到這類問題時,把對應網域加入 fake-ip-filter 例外即可,不需要為了個別場景放棄 fake-ip 整體的優勢。

一份可直接使用的 DNS 設定

dns.yaml
dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'        # 區域網路裝置網域走真實解析,避免探索協定異常
    - '*.local'
  default-nameserver: [223.5.5.5, 119.29.29.29]   # 解析 DoH/DoT 網域本身用的基礎 DNS
  nameserver: ['https://doh.pub/dns-query', 'tls://dot.pub:853']
  fallback: ['https://1.1.1.1/dns-query', 'https://dns.google/dns-query']
  fallback-filter:
    geoip: true
    geoip-code: CN   # 結果非中國大陸 IP 時才採用 fallback 的解析結果

DoH / DoT 解決的是什麼問題

傳統 DNS 查詢是明文的 UDP 封包,電信業者或中間網路設備能看到你在查詢什麼網域,也有能力對查詢結果動手腳(也就是常說的「DNS 污染」)。DoH(DNS over HTTPS)和 DoT(DNS over TLS)把查詢過程加密,防止被中間網路設備窺探或竄改。

fallback-filter:精準防污染

fallback-filter 的邏輯是:先用 nameserver 裡的伺服器解析,如果解析結果的 IP 被判定為不在指定地區(比如開啟 geoip-code: CN 後判定不是中國大陸 IP),則改用 fallback 裡設定的伺服器重新解析,取 fallback 的結果。

這個機制主要用於避免「被污染的 DNS 伺服器回傳了錯誤的境內 IP,而真實網站其實在境外」的情況。開啟這項設定後,即使主 DNS 被污染回傳了錯誤結果,也能自動糾正為境外 DNS 解析的正確結果。

常見排查思路

  1. 某個網站規則明明寫對了但沒生效?先檢查是不是 enhanced-mode 沒開,或者 DNS 設定整體沒生效(比如系統 DNS 快取沒清)。
  2. 存取某網站間歇性失敗,像是被劫持?大概率是 DNS 污染,嘗試單獨測試 nameserverfallback 兩組伺服器的解析結果是否一致。
  3. 區域網路裝置(NAS、智慧音箱)探索異常?優先檢查 fake-ip-filter 是否已經把對應網域加入例外。
DNS 設定很少需要頻繁改動——一旦按照這套邏輯配好,大多數「存取異常」問題在源頭就已經被避開了。