Clash Fake-IP 模式解析:DNS 對應原理與適用情境
了解 fake-ip 如何以保留位址範圍對應網域、與 redir-host 的差異,以及 fake-ip-filter 的設定重點與不適用情境。
Fake-IP 原理:先回傳對應位址,再依網域處理連線
啟用 Fake-IP 後,查詢網站網域時看到 198.18.x.x,通常是預期結果,不代表網站真的搬到這個位址。Clash 的 DNS 模組會從指定的位址池分配一個合成 IPv4 位址,並在內部保存「網域與合成位址」的對應關係。應用程式使用這個位址發起連線,核心接管連線後,再透過對應關係找回原始網域。
典型流程可分為四個步驟。了解這條連線路徑,比只記住 enhanced-mode: fake-ip 更有助於排查問題。
- 應用程式查詢
www.example.com的 A 記錄,請求送至核心的 DNS 服務。 - DNS 模組從位址池分配一個位址,例如
198.18.0.2,並記錄其對應網域。實際分配結果不固定。 - 應用程式向這個合成位址的 TCP 443 連接埠發起連線,流量透過 TUN 或其他透明接管機制進入核心。
- 核心還原網域,依規則選擇出站方式;直連或代理出站接著會依自身需求完成真實位址解析與連線。
Fake-IP 可讓網域規則在建立連線時直接取得網域資訊,降低部分情境對本機真實解析結果的依賴。但這不代表所有連線都完全不需要真實 DNS:直連目的地、需要 IP 資訊的規則,以及代理節點本身的網域解析,仍可能觸發查詢。Fake-IP 也不是加密協定,不會自動將明文 DNS 轉為加密 DNS。
Fake-IP 與 redir-host:差異在 DNS 回覆與網域還原方式
redir-host 會回傳上游解析出的真實位址;fake-ip 則會在適用的查詢中回傳合成位址。兩者都能搭配規則分流,但應用程式看到的位址不同,核心取得網域資訊的方式也不同。
| 比較項目 | fake-ip | redir-host |
|---|---|---|
| 應用程式收到的 A 記錄 | 通常是位址池中的合成 IPv4 位址 | 上游回傳的真實 IPv4 位址 |
| 網域關聯方式 | 透過合成位址對應關係找回網域 | 依賴 DNS 快取關聯等資訊,必要時可搭配嗅探 |
| 對本機真實解析的依賴 | 部分代理連線可延後解析,或交由遠端解析 | 回覆應用程式查詢前,通常須先取得真實解析結果 |
| 常見相容性限制 | 程式會檢查位址、區域網路探索、流量未被接管 | 多個網域共用同一 IP 時,網域關聯可能有歧義 |
| 適合優先測試的情況 | TUN 接管穩定,主要使用瀏覽器與一般網路應用程式 | 應用程式必須取得真實位址,或現有網路不便接管合成位址 |
不要把這兩種模式視為固定的速度排名。首次解析延遲、代理節點的 DNS 環境,以及規則是否觸發 IP 查詢,都會影響連線時間。若要比較,應在相同網路、相同節點與相同目標網站下重複測試,而不是根據一次網頁載入結果判斷模式優劣。
mihomo DNS 設定:最小設定範例與生效條件
以下是適用於 mihomo 的 DNS 設定片段,不是包含節點與規則的完整設定。範例將 DNS 監聽在本機 127.0.0.1:1053,方便單獨驗證;一般系統 DNS 設定通常只接受伺服器位址,且預設使用 53 連接埠,不能直接將 1053 連接埠填入系統 DNS。
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "localhost"
- "*.lan"
- "*.local"
nameserver:
- 223.5.5.5
- 1.1.1.1
enable用來啟用內建 DNS。若只設定模式但未啟用 DNS,就無法取得預期的對應回覆。listen用來設定監聽位址與連接埠。迴路位址僅供本機存取,不會主動向整個區域網路提供服務。ipv6: false是為了簡化此範例中的 AAAA 查詢處理,不代表停用作業系統的 IPv6 網卡或路由。fake-ip-range用來定義合成 IPv4 位址池。請確認位址範圍與現有 VPN、測試網路及路由規劃不重疊。nameserver用於需要真實解析時的上游查詢。範例中的 IP 格式是傳統 DNS,上游伺服器必須能從目前網路連線;加密 DNS 需另外設定。
設定生效前,先確認三件事
- 確認目前執行的核心。查看用戶端的核心資訊與啟動記錄。Clash、Clash Meta、mihomo 支援的欄位範圍不盡相同,不能將新版核心的額外欄位直接套用至舊版。
- 確認修改的是實際生效的設定。訂閱檔案可能在更新時遭到覆寫。建議使用用戶端提供的覆寫或合併功能,重新載入後再檢查最終設定。
- 確認 DNS 與連線都能進入核心。測試查詢送至 1053,只能證明 DNS 服務可用;應用程式發往合成位址的連線,還需要由 TUN 或其他透明轉送機制接管。
fake-ip-filter:只排除需要真實位址的網域
在 mihomo 預設的黑名單過濾語意下,符合 fake-ip-filter 的網域不會收到 Fake-IP,而是使用真實解析結果。它不是代理規則清單,不會決定流量走 DIRECT 或特定代理群組;流量最終走向仍由出站規則及其他路由設定決定。
前面的範例使用 *.lan 與 *.local 表示常見的區域網路網域後綴。網域比對寫法與特殊規則的支援情況,請以實際使用的核心文件為準;若設定中另有指定 fake-ip-filter-mode,請先確認其語意,再判斷過濾清單的效果。
依實際問題新增項目,別整批複製長清單
- 企業內部網域:例如某台內部服務需要回傳
10.20.0.15,可先排除該服務的完整網域。也要確保查詢會送至企業 DNS,否則排除後仍可能得到不存在或錯誤的結果。 - 會驗證目標位址的程式:有些遠端連線、裝置探索或遊戲元件會檢查 DNS 回覆。先針對確實有問題的網域進行測試,再決定是否擴大比對範圍。
- 區域網路裝置名稱:印表機、NAS 與投影裝置可能使用本機網域,但探索流程也可能涉及 mDNS 多點傳播、廣播或其他協定。過濾網域只能解決其中的 DNS 回覆問題。
如果只有 nas.home.arpa 無法使用,先加入這個完整名稱,比直接排除整個後綴更容易驗證。排除範圍越大,越多連線會改走真實位址解析,也越需要妥善維護內部 DNS 與分流策略。NTP 也不必一律排除:只有裝置或應用程式出現可重現的相容性問題時,才針對實際查詢的時間伺服器網域進行處理。
驗證方式:分別檢查 DNS 回覆、連線與規則
驗證時不要只看瀏覽器能不能開啟網頁。瀏覽器可能使用自己的安全 DNS,也可能已快取位址;網頁能開啟,不代表流量確實經過 Fake-IP。建議先在本機明確指定測試 DNS,再檢查應用程式的連線。
第一步:明確向核心查詢 A 記錄
# macOS / Linux:需要先安裝 dig
dig @127.0.0.1 -p 1053 www.example.com A
# 同時檢查 AAAA 回覆,確認範例中的 IPv6 設定
dig @127.0.0.1 -p 1053 www.example.com AAAA
若 A 記錄位於設定的 198.18.0.0/16 位址池內,表示這次查詢取得了對應位址。不必要求結果固定為 198.18.0.2,也不要將回傳值手動寫入 hosts 檔案。符合過濾清單的網域應另外測試,預期結果是上游提供的真實位址或相應的 DNS 狀態,而不是位址池中的回覆。
第二步:清除舊快取,再測試相同目標
# Windows:在終端機中執行
ipconfig /flushdns
# 使用 systemd-resolved 的 Linux
sudo resolvectl flush-caches
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
這些命令清除的是系統端快取,不保證會一併清除瀏覽器、應用程式與核心自身的快取。請關閉並重新開啟測試中的應用程式;必要時透過用戶端清除 DNS 快取,再建立新連線測試。核心重新啟動後,舊的合成位址與對應關係不一定仍相同,因此恢復舊的瀏覽器連線時可能短暫失敗。
第三步:核對連線記錄中的網域與出站方式
查看用戶端的連線清單或記錄,確認目標網域、命中規則與出站策略是否符合預期。若需要更詳細資訊,可暫時將 log-level 調整為 debug;測試完成後請還原為常用層級。分享記錄前,請移除訂閱網址、存取權杖、節點憑證與敏感網域。
常見問題:依連線流程逐步排查
| 現象 | 優先檢查項目 | 處理方向 |
|---|---|---|
| 回傳 198.18 位址,但所有網站都逾時 | 合成位址的流量是否進入核心 | 檢查 TUN 路由、執行權限,以及其他 VPN 是否覆蓋路由 |
| 明確查詢 1053 時逾時 | DNS 模組是否已啟動、連接埠是否正確 | 檢查設定載入錯誤、監聽位址與連接埠占用 |
| 只有內部網路服務無法開啟 | 過濾規則、企業 DNS、內部網路路由 | 精確排除該網域,並為其設定正確的內部解析路徑 |
| 瀏覽器正常,但某個程式無法使用 | 程式自行使用的 DNS、位址快取與代理方式 | 檢查安全 DNS、快取,以及流量是否繞過接管 |
| 切換模式後偶爾發生連線問題 | 應用程式仍保留舊位址或連線 | 清除相關快取、中斷舊連線後重新測試 |
若真實解析也失敗,請先檢查上游 DNS 是否可連線,不要只是不斷擴大 fake-ip-filter。若 DNS 正常,連線記錄也顯示正確網域,但代理連線逾時,接著應排查節點連線狀態與出站規則。Fake-IP 位於連線流程的前段,無法修復失效節點或錯誤的代理憑證。
使用瀏覽器安全 DNS、Android 私人 DNS 或應用程式內建 DoH 時,查詢可能會繞過核心的一般 DNS 入口。攔截 53 連接埠無法直接處理所有 HTTPS 內的 DNS 請求。測試時請先統一解析路徑,再決定要長期採用哪種 DNS 方案,避免同時變更多個因素。
適用情境與回復順序
對已穩定使用 TUN、需要依網域分流的桌面環境,Fake-IP 值得優先測試。若是企業 VPN、複雜的區域網路,或工具要求顯示真實目標 IP,應先確認路由與解析需求,必要時維持使用 redir-host。Android 的 VPN 介面通常也會與其他 VPN 應用程式競用,單純切換 DNS 模式無法解決介面衝突。
- 先局部修正:單一網域異常時,記錄重現步驟,嘗試精確過濾,並確認真實解析結果。
- 接著檢查接管範圍:大量合成位址連線逾時時,應優先修復路由、DNS 接管與權限,而不是繼續增加過濾項目。
- 最後再評估切換模式:確認應用程式必須取得真實位址,或目前網路無法可靠接管合成位址時,再測試
enhanced-mode: redir-host。
切換前請先儲存可還原的設定;切換後重新載入並清除快取。最後應依三項結果判斷:DNS 回覆符合模式預期、連線命中正確規則,以及日常應用程式與內部網路服務都能穩定使用。保留一份精簡且容易理解的設定,比持續堆疊來源不明的過濾清單更易維護。