一、Fake-IP 改變的是 DNS 回應,不是節點出口

在 Clash 或 Clash Meta(現名 mihomo)的設定中,dns.enhanced-mode 會決定內建 DNS 如何回應查詢。常見值為 fake-ip 和 redir-host。這項設定不會選擇訂閱、不會改變節點通訊協定,也不能取代規則模式或 TUN 模式。

Fake-IP 會為網域名稱指派一個合成位址,並儲存「網域名稱 ↔ 合成位址」的對應關係。應用程式連線到這個位址時,核心會先還原網域名稱,再比對規則並處理出站連線。這個位址不是網站伺服器的真實位址,也不是代理節點的 IP。

為什麼常見位址以 198.18 開頭?

常見設定會使用 198.18.0.1/16 作為 Fake-IP 位址池。這個範圍位於保留給網路設備效能測試的 198.18.0.0/15 位址空間內,不是可直接存取的公網網站位址。設定為 /16,表示位址池只取其中一部分,並不代表整個保留範圍只有這一段。

因此,DNS 查詢出現 198.18.x.x,本身不代表解析遭到竄改。關鍵在於後續連線能否回到持有對應資料的同一個核心。如果應用程式取得合成位址後,繞過 TUN 和其他透明接管路徑直接連線,通常就會連線失敗。

二、從網域查詢到建立連線:兩種模式有何不同

Fake-IP 的典型處理流程

  1. 應用程式查詢網域名稱,例如 example.com,查詢會送至核心 DNS。
  2. 核心會指派或重複使用一個合成 IPv4 位址,並將結果回傳給應用程式。
  3. 應用程式連線至該位址,流量透過 TUN 等接管方式送回核心。
  4. 核心根據對應資料找回網域名稱,依序比對規則,選擇直連或代理出口。
  5. 需要真實 IP 時才進行解析;若代理通訊協定與出站設定允許傳遞網域名稱,也可由遠端解析。

這個流程能減少應用程式開始連線前等待真實 DNS 結果的時間,也讓核心更容易取得原始網域名稱。但這不代表「整個連線過程都不需要查 DNS」。直連、IP 類規則、部分出站通訊協定或特定解析策略,仍可能觸發真實解析。

Redir-Host 的典型處理流程

Redir-Host 通常會先向上游解析器查詢真實位址,再將位址回傳給應用程式。核心可搭配 DNS 快取中的關聯資料,在連線進入時還原網域名稱。如果 DNS 查詢未經過核心、快取已遺失,或多個網域共用同一個位址,網域名稱可能無法完整還原。流量嗅探可補足部分通訊協定的資訊,但並非對所有連線都有效。

比較項目 Fake-IP Redir-Host
應用程式收到的 IPv4 結果 通常是位址池中的合成位址 通常是上游回傳的真實位址
回應前是否需要等待真實解析 一般合成回應通常不必等待 快取未命中時通常需要等待
網域規則所需的資訊 主要來自合成位址對應資料 仰賴 DNS 關聯資料、明確代理資訊或流量嗅探等
常見的相容性注意事項 位址驗證、區域網路探索、繞過接管的連線 真實解析延遲、解析結果與出口的配合

對使用 HTTP CONNECT 或 SOCKS 網域名稱請求的明確代理連線,核心可能直接取得目標網域名稱,不一定會經過上述系統 DNS 流程。因此,只在瀏覽器設定代理後瀏覽網頁,無法單獨證明 Fake-IP 的 DNS 接管運作正常。

三、依使用情境選擇,別把 Fake-IP 當成網速開關

Fake-IP 可能縮短首次連線前等待解析的時間,但不會增加訂閱頻寬、降低節點倍率,也無法修復壅塞的線路。下載速度慢時,應分別觀察 DNS 耗時、建立連線所需時間與持續傳輸速度,別把三種問題混為一談。

四、fake-ip-filter:只讓必要網域回傳真實位址

在預設的黑名單語意下,fake-ip-filter 表示清單中的網域不使用合成位址,而是採用一般解析。它不是代理繞過清單。網域加入過濾清單後,連線仍會繼續比對 rules;需要直連的服務,還得確認對應規則是否指向 DIRECT。

以下是適用於 mihomo 的局部範例。127.0.0.1:1053 是方便手動驗證的本機監聽位址,不會自動成為系統 DNS。合併到現有設定時,只保留一個頂層 dns:,並保留原設定所需的解析分流、上游位址及其他欄位。

dns:
  enable: true
  listen: 127.0.0.1:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter-mode: blacklist
  fake-ip-filter:
    - localhost
    - "+.lan"
    - "+.home.arpa"
  nameserver:
    - 1.1.1.1
    - 9.9.9.9

此處的上游位址僅用來示範設定結構,實際使用時應選擇目前網路可連線且符合內網需求的解析器。在 mihomo 的網域比對語法中,+.home.arpa 可匹配該網域本身及其子網域。若使用舊版 Clash 核心,請先確認它支援的欄位與比對語法;不要假設舊核心支援 fake-ip-filter-mode。

適合逐項驗證的排除對象

.local 通常使用 mDNS,與一般單播 DNS 不同。即使將相關名稱加入過濾清單,也不代表 TUN 會自動轉送多點傳播探索資料。找不到投放裝置或印表機時,也要檢查區域網路存取權限、多點傳播路徑與防火牆。

五、內網解析與規則分流必須分開設定

「回傳真實位址」、「向哪一台 DNS 查詢」和「連線走哪個出口」是三個不同問題。例如 NAS 使用 nas.home.arpa,路由器位址為 192.168.1.1,可以在上方範例中加入解析策略,並將直連規則放在可能先匹配的廣泛規則之前。

# 以下欄位請合併至現有的 dns,不要再建立第二個 dns。
dns:
  nameserver-policy:
    "+.home.arpa": "192.168.1.1"

# 以下項目請加入現有的 rules,並留意比對順序。
rules:
  - DOMAIN-SUFFIX,home.arpa,DIRECT

這只是合併位置示意,並非可直接取代訂閱內容的完整設定。範例中的 192.168.1.1 必須換成實際的內網 DNS;若目前網路無法連線到該位址,即使過濾清單設定正確也無法取得有效回應。

訂閱更新可能會覆蓋手動修改的內容。使用用戶端提供的覆寫、擴充設定或合併功能時,應先確認最後產生的執行設定:過濾項目是否保留、解析策略是否合併,以及直連規則是否排在兜底規則之前。介面顯示「儲存成功」不代表核心已載入新欄位。

六、透過 DNS 查詢與連線記錄驗證設定

步驟一:確認目前執行中的核心設定

記下用戶端顯示的核心名稱與版本,並檢查執行設定中的 enhanced-mode、listen、過濾清單及 TUN DNS 劫持設定。用戶端介面可能會重新產生欄位,應以載入後的設定與記錄為準。如果核心回報未知欄位,請先修正相容性問題,再繼續測試。

步驟二:直接查詢本機 DNS 監聽埠

若實際監聽設定與前面的範例相同,請在已安裝 dig 的系統上執行:

dig @127.0.0.1 -p 1053 example.com A
dig @127.0.0.1 -p 1053 nas.home.arpa A

Windows 可透過 nslookup 的互動模式指定埠號:

nslookup
> server 127.0.0.1
> set port=1053
> set type=A
> example.com
> nas.home.arpa
> exit

如果第一個網域未被過濾,通常應回傳位址池中的 IPv4 位址;只有在內網 DNS 確實設有第二個網域的記錄時,才應回傳對應的內網位址。不要照抄某個固定的 198.18.x.x 當作正確答案,位址分配會隨對應狀態改變。

步驟三:檢查系統實際使用的 DNS 與連線路徑

  1. 關閉應用程式現有的連線,再重新連線,並查看用戶端「連線」頁面是否顯示目標網域、命中規則與出站策略。
  2. 如果手動 DNS 查詢正常,但應用程式無法連線,請檢查系統 DNS 是否進入核心,以及 TUN 是否接管合成位址連線。
  3. 如果應用程式使用自己的加密 DNS,先記下目前設定,再暫時關閉該功能進行比較。應用程式內的 DoH 查詢不一定會經過核心的一般 DNS 監聽。
  4. 如果只有 IPv6 路徑異常,請分別檢查 AAAA 查詢、IPv6 路由與接管設定。只測試一次 A 記錄,不能代表 IPv6 也正常。

切換模式後,可在 Windows 執行 ipconfig /flushdns 清除系統解析快取,再重新啟動測試中的應用程式。瀏覽器、應用程式和核心也可能各自保留快取或長連線,因此只重新整理網頁不一定會觸發全新的 DNS 查詢。

七、常見故障:先找出哪個環節失效

關閉用戶端後,網站仍嘗試連線至 198.18 位址

通常需要檢查殘留的 DNS 快取、舊連線,以及尚未還原的系統網路設定。還原一般 DNS 與代理設定、清除系統快取,再重新啟動應用程式。不要嘗試為合成位址新增公網閘道;沒有對應資料與接管機制時,它不是可直接連線的網站位址。

加入過濾項目後,內網網站還是無法開啟

先查詢過濾後的真實 DNS 回應。若回傳不存在或逾時,問題出在解析路徑;若已回傳正確的內網 IP,接著檢查連線規則、路由與防火牆。過濾清單只能解決「不再回傳合成位址」,不會自動找到內網 DNS,也不會自動允許區域網路連線。

網頁正常,但 ping 合成位址失敗

ping 使用 ICMP,與網頁使用的 TCP 或 QUIC 請求不同。不同核心與接管方式對 ICMP 的處理也不一樣;合成位址的 ping 結果不是節點延遲。請以實際應用程式連線、連線記錄及針對目標服務的測試為準。

改用 Redir-Host 後恢復正常,就該一直使用嗎?

可以先保留目前正常運作的設定,再找出差異所在。如果只有一項服務受影響,優先嘗試精確過濾與正確的內網解析;如果許多應用程式都依賴真實 DNS 位址,Redir-Host 也能作為長期方案。判斷依據應是連線能否穩定重現、規則命中是否符合預期,以及維護成本是否可控,而不是哪種模式聽起來比較先進。