進階設定 / 完整查閱

Clash 進階設定指南

從設定骨架開始,深入策略組、規則集、DNS、TUN、Fake-IP、網域嗅探與外部控制。內容適合已完成基本連線,想理解設定行為與排錯流程的使用者。

8 個設定章節 YAML 範例 mihomo 語法 更新於 2026-08-11

閱讀方式

完成快速入門後,依問題查閱對應章節

快速入門教學負責完成匯入、選擇節點、開啟連線與驗證結果;本頁則說明設定為何如此運作,以及設定衝突時應檢查哪一層。首次調整設定時建議依序閱讀,已有明確問題時可直接使用下方目錄跳轉。

Chapter 01 / Baseline

設定骨架與除錯基準

Clash 設定不是彼此獨立的選項清單,而是一條具有先後關係的處理鏈。用戶端會先讀取監聽連接埠、運作模式與 DNS 等基礎項目,再載入代理節點與策略組,接著載入規則和規則集,最後由系統代理或 TUN 將流量送入核心。任何一層引用不存在的名稱,都會影響後續行為。最常見的例子是規則指向已重新命名的策略組:設定可能仍能解析,但符合條件的流量無法依預期選擇出口。因此,進階調整的第一步不是增加更多參數,而是先建立一份能說明、能驗證、能復原的基準設定。

先分清用戶端設定與核心設定

Clash Plus、Clash Verge Rev、FlClash、Clash Nyanpasu 等圖形化用戶端通常會把設定分成兩層。第一層屬於應用程式本身,例如開機啟動、系統代理開關、設定更新週期、介面主題與服務安裝狀態;第二層才是傳給 mihomo 核心的 YAML。系統代理按鈕通常不會改寫訂閱檔案,只會變更作業系統的代理入口。TUN 開關則可能由用戶端產生一段執行時覆寫,因此在原始訂閱中找不到完全相同的欄位。排錯時應同時查看目前生效的設定與訂閱原文,不能只盯著下載下來的 YAML。

適合除錯的基礎段落應保持精簡。日誌層級先使用 info,已足以查看連線、規則命中與 DNS 錯誤;只有需要追蹤特定請求時,再暫時切換到 debug。是否需要明確填寫連接埠,取決於用戶端的管理方式;桌面用戶端可能在啟動時注入自己的連接埠。若手動維護純設定檔,可使用下方結構,但應確認連接埠未被其他代理程式占用。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
unified-delay: true

profile:
  store-selected: true
  store-fake-ip: true

mode: rule 表示依規則決定直連、代理或拒絕;unified-delay 讓測速標準更接近完整連線流程,但不會改變真實網路品質;store-selected 用於儲存策略組選擇,重新啟動後不必逐組重新選取;store-fake-ip 儲存 Fake-IP 對應,減少重新啟動後短時間內對應變化造成的連線波動。行動裝置若由系統回收應用程式程序,持久化設定尤其重要,但仍須由用戶端獲得正常的背景執行條件。

用最短流程建立驗證閉環

每次修改後,先確認核心能載入設定,再確認代理節點能建立連線,接著查看一個測試請求命中了哪條規則,最後才檢查目標應用程式。若日誌在設定解析階段已報錯,繼續切換節點沒有意義;若節點交握失敗,應優先處理訂閱與網路,不要先修改 DNS;若瀏覽器正常而某個應用程式失敗,再檢查該應用程式是否繞過系統代理、使用獨立 DNS 或 QUIC。依照這個順序,可以把問題鎖定在單一層級。

檢查層級 應看到的結果 失敗時優先處理
設定解析 設定成功載入,沒有欄位或縮排錯誤 YAML 縮排、重複鍵、無效引用
節點連線 策略組中有可選代理並能建立工作階段 訂閱有效性、網路權限、協定參數
規則比對 日誌顯示請求命中預期規則與策略 規則順序、策略組名稱、規則集載入
系統接管 目標應用程式流量進入系統代理或 TUN 系統代理、VPN 權限、路由衝突

設定檔中的縮排只使用空格,不要混入定位字元。包含冒號、井字號或特殊字元的文字可以加上引號;策略組名稱一旦被規則引用,就應保持穩定。若需要更換用戶端,先到下載頁選擇對應平台;跨平台使用可優先考慮 Clash Plus,再依作業系統與使用習慣選擇其他用戶端。遷移時先匯入同一份訂閱驗證基本連線,再遷移本機覆寫,避免直接把舊用戶端產生的執行時欄位當作通用設定複製。

Chapter 02 / Policy

策略組類型與組合方式

策略組位於節點與規則之間。規則通常不會直接綁定某個節點,而是將請求送到穩定的策略名稱,再由策略組決定使用哪個出口。如此一來,節點變更時可以維持規則不動,也能將手動選擇、自動測速、故障切換與負載分配拆成不同層次。設計策略組時最重要的原則是名稱清楚、層級有限、用途單一。一個組同時負責地區選擇、業務分類與自動切換,短期看似省事,後續排錯時卻很難知道最後選中了哪條路徑。

select、url-test、fallback 與 load-balance

select 是手動選擇組,適合總入口以及需要人工固定出口的業務。它不會主動判斷節點品質,目前節點失效後仍可能維持原本的選擇。url-test 會依指定網址進行連通性測試,並根據結果選擇表現合適的節點,適合日常自動選擇。fallback 依清單順序優先使用前方可用節點,適合重視出口穩定性、希望明確區分主備的情境。load-balance 會將連線分配至多個節點,適合能接受出口變化的平行請求,但登入工作階段、風控敏感服務及依賴固定來源位址的業務通常不適合。

proxy-groups:
  - name: 總選擇
    type: select
    proxies:
      - 自動選擇
      - 故障切換
      - DIRECT

  - name: 自動選擇
    type: url-test
    use:
      - main-provider
    url: https://www.gstatic.com/generate_204
    interval: 600
    tolerance: 80
    lazy: true

  - name: 故障切換
    type: fallback
    use:
      - main-provider
    url: https://www.gstatic.com/generate_204
    interval: 600
    lazy: true

interval 是檢測間隔,設定過短會增加節點與裝置的喚醒頻率,行動裝置還可能增加背景耗電;設定過長則會延遲發現故障。tolerance 用於減少相近結果之間的頻繁切換,不是速度加成,而是穩定性門檻。lazy: true 表示實際使用組別時才進行檢測,適合降低閒置時的開銷。測試網址應回傳輕量且穩定的回應,不要把檔案下載網址當作健康檢查目標,也不要用單次測試結果取代長時間穩定性判斷。

策略組應以業務語意命名

建議先保留一個「總選擇」作為統一出口,再依業務建立「串流媒體」「開發服務」「即時通訊」等策略。業務組內部可以引用「總選擇」、地區組或 DIRECT,規則只引用業務組。如此更換節點來源時,只需調整底層組,規則層即可保持穩定。組名可以使用中文,但修改名稱時要同步檢查 rulesrule-providers 的行為欄位,以及其他策略組中的引用。名稱的大小寫與空格都屬於識別的一部分,多一個空格也會變成不同名稱。

  - name: 開發服務
    type: select
    proxies:
      - 總選擇
      - 自動選擇
      - DIRECT

  - name: 串流媒體
    type: select
    proxies:
      - 總選擇
      - 自動選擇

rules:
  - DOMAIN-SUFFIX,github.com,開發服務
  - DOMAIN-SUFFIX,githubusercontent.com,開發服務
  - MATCH,總選擇

節點較多時,不必把所有名稱逐一寫入 proxies,可以透過代理提供者的 use 引入,再搭配篩選運算式縮小範圍。篩選效果取決於訂閱中的節點命名品質;若不同供應來源的命名規則不一致,只靠地區關鍵字很容易誤選。應先在用戶端查看實際節點名稱,再編寫篩選條件;更新訂閱後也要檢查是否出現新的命名。排除測試節點、過期提示節點與倍率標記時,要避免運算式過寬而讓正常節點一併消失。

組類型 適用目標 主要限制
select 人工固定出口、總入口、業務選擇 不會自動避開失效節點
url-test 日常自動選擇、節點較多的訂閱 測試結果不等同於實際業務體驗
fallback 明確主備順序、穩定出口 需要持續維護清單順序
load-balance 可平行處理且不依賴固定出口的連線 可能觸發工作階段或來源位址變更

策略組排錯應從引用關係開始。先確認規則命中的組名,再開啟該組查看目前選擇,繼續往下追蹤至實際節點。若自動組看似沒有切換,請檢查測試網址是否可連線、檢測間隔是否尚未到期,以及用戶端是否暫停背景活動。若某項服務頻繁要求重新登入,將它從負載分配組移至固定出口組測試。策略層的目標不是堆疊更多自動化,而是讓每次選擇都能從日誌與組結構中得到解釋。

Chapter 03 / Rules

以規則集訂閱管理

當規則從十幾條增加到數百條後,繼續把全部內容塞進主設定會迅速失去可維護性。rule-providers 用於將不同主題的規則拆成獨立資源,由主設定宣告下載網址、格式、更新週期與比對行為。主檔案只保留呼叫順序,規則內容則由對應規則集維護。如此可以單獨更新廣告攔截、區域網路、開發服務或串流媒體規則,也能在某個規則集異常時快速停用,不必重寫整份訂閱。

provider 定義與 RULE-SET 呼叫

規則提供者的名稱只是本機引用識別,真正影響解析的是 behaviorformat 與資源內容。behavior: domain 適合只包含網域類項目的集合;ipcidr 用於 IP 網段;classical 可容納帶有類型前綴的傳統規則。格式必須與遠端檔案一致,常見純文字規則可使用 text,YAML 規則使用 yaml。不要將 classic 內容宣告為 domain,否則即使載入成功,也不代表比對語意正確。

rule-providers:
  private-domain:
    type: http
    behavior: domain
    format: yaml
    path: ./ruleset/private-domain.yaml
    url: https://example.com/rules/private-domain.yaml
    interval: 86400

  developer:
    type: http
    behavior: classical
    format: text
    path: ./ruleset/developer.list
    url: https://example.com/rules/developer.list
    interval: 86400

rules:
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,developer,開發服務
  - GEOIP,LAN,DIRECT,no-resolve
  - MATCH,總選擇

範例網域只用來表示欄位結構,實際使用時應替換為已確認可存取且內容可信的規則來源。path 是本機快取位置,不同提供者不要共用同一路徑。interval 以秒為單位,公共規則通常沒有必要每隔幾分鐘更新一次;過於頻繁只會增加請求與寫入。更新失敗時,核心通常會繼續使用既有快取,因此排錯時要區分「首次下載失敗」與「更新失敗但舊規則仍在生效」。刪除快取後重試會失去這個回復條件,不應作為第一步操作。

規則順序就是優先級

Clash 會由上而下尋找第一條符合的規則,命中後便不再繼續。具體規則應放在寬泛規則之前:私人網域與區域網路通常先直連,業務網域再進入對應策略,IP 規則放在需要解析位址的位置,最後由 MATCH 接住其餘流量。將大範圍代理規則放在頂部,後面的直連例外就永遠不會執行。排查錯誤分流時,日誌顯示的「命中哪條規則」比猜測網域屬於哪個分類更可靠。

no-resolve 表示比對 IP 類規則時,不要為了取得 IP 而主動觸發 DNS 解析。它可以避免不必要的解析,但不適合機械式地加在所有規則後面。若網域請求前方沒有網域規則,而後續又依賴 GEOIP 判斷,完全阻止解析可能使該規則無法取得所需位址。是否加入應依規則類型與 DNS 模式決定。對於已直接取得目標 IP 的連線,IP 規則仍可正常比對。

少量本機例外可以直接寫在 rules 頂部,不必為三五個項目建立遠端規則集。例如某個工作網域必須直連,或某個應用程式介面必須固定使用「開發服務」,將這些規則放在訂閱規則集之前即可。若例外數量持續增加,再移轉至本機 provider。如此既能保持主設定可讀,也能避免每次微調都發布遠端檔案。

rules:
  - DOMAIN,router.local,DIRECT
  - DOMAIN-SUFFIX,corp.example,DIRECT
  - DOMAIN-SUFFIX,github.com,開發服務
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,developer,開發服務
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - MATCH,總選擇

規則集故障的定位順序

先查看 provider 狀態是否完成載入,再確認遠端回應內容與宣告格式相符,接著檢查規則集名稱是否與 RULE-SET 引用一致,最後檢查呼叫位置。狀態正常但始終未命中,常見原因是行為類型錯誤、規則被前面的寬泛項目攔截,或目標連線只暴露 IP 而規則集只有網域。更新後突然出現大量錯誤分流時,可以還原上一份本機快取或暫時註解該規則集,確認問題是否來自上游內容變更。

規則來源越多,更新節奏與命名越難統一。更穩妥的結構是依用途選擇少量規則集,每項業務只設定一個主要來源,本機例外則作為最高優先級。不要同時引入多個涵蓋範圍相近的全集規則,再期待順序自動解決衝突。需要同步多部裝置時,可參考多裝置設定同步方案,將主設定、訂閱連結與本機規則分開管理。

Chapter 04 / DNS

DNS 設定最佳化與洩漏排查

DNS 決定網域如何轉換為位址,也直接影響網域規則能否準確比對。Clash 開啟 DNS 模組後,應用程式的查詢可以先進入本機監聽,再由核心依設定選擇上游解析器。這裡要解決三個問題:查詢是否真正進入 Clash、不同網域應交給哪個上游,以及解析結果是否能與後續連線保持對應。單純堆疊許多公共 DNS 位址不會自動提高穩定性,反而可能讓結果來源與故障邊界變得模糊。

nameserver、default-nameserver 與 proxy-server-nameserver

nameserver 是主要上游解析器。default-nameserver 用於解析 DoH 或代理伺服器本身的網域,因此通常填寫可直接連線的 IP 形式解析器,避免為了連線解析器而再次需要解析網域。proxy-server-nameserver 可專門處理代理節點網域,避免節點位址解析受到業務 DNS 規則影響。若訂閱節點使用網域而這一層解析失敗,介面可能顯示所有節點同時不可用,但根因並不在節點協定。

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  use-hosts: true
  respect-rules: true

  default-nameserver:
    - 223.5.5.5
    - 1.1.1.1

  nameserver:
    - https://dns.alidns.com/dns-query
    - https://1.1.1.1/dns-query

  proxy-server-nameserver:
    - https://dns.alidns.com/dns-query

  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "time.*.com"
    - "ntp.*.com"

respect-rules 讓 DNS 請求參考代理規則,但這要求代理解析鏈已能運作,否則可能形成究竟是先有代理還是先有解析的循環依賴。設定初期若遇到上游無法連線,可以先關閉此項驗證基本解析,再逐步啟用。listen 需要配合用戶端的 DNS 接管方式;桌面端由 TUN 接管時,通常不需要讓區域網路裝置存取該連接埠;若設定為對外監聽,還應同時檢查防火牆與區域網路存取範圍。

解析器數量與 fallback 邏輯

主要解析器選擇兩到三個穩定來源通常已經足夠。不同解析器回傳的位址可能受網路位置、CDN 調度與快取影響,清單越長不代表結果越準確。若使用 fallback,需要同時理解篩選條件,否則所有查詢都可能進入多路解析,增加等待時間與網路請求。對規則清楚的設定,優先使用 nameserver-policy 依網域指定解析器,比依賴寬泛的回退判斷更容易理解。

  nameserver-policy:
    "geosite:private":
      - system
    "+.corp.example":
      - 10.0.0.53
    "geosite:cn":
      - https://dns.alidns.com/dns-query

策略中的網域比對應與實際規則集能力一致。企業內網網域只能由內部 DNS 解析時,必須確保通往內部解析器的路由是直連或能抵達辦公網路。將內部解析器放入通用 nameserver,離開辦公網路後會導致查詢持續逾時;更合適的方式是只對特定後綴使用它。若系統同時執行其他 VPN、網路過濾器或安全軟體,還要確認它們沒有在 Clash 之前先改寫 DNS。

DNS 洩漏要先定義觀察範圍

所謂 DNS 洩漏,通常是指原本應由指定路徑處理的查詢,仍被系統或應用程式直接送往其他解析器。檢查時不能只看某個網頁顯示的解析器名稱,應結合作業系統網路設定、Clash 日誌與封包擷取結果判斷。瀏覽器可能啟用自己的安全 DNS,行動應用程式也可能內建 DoH;這類請求看起來像普通 HTTPS 流量,不一定會經過系統的 53 連接埠。若希望統一交由 Clash 處理,應關閉應用程式內的獨立解析,或透過規則明確處理其 DoH 網域。

現象 可能斷點 檢查動作
所有節點網域解析失敗 default 或 proxy-server-nameserver 無法連線 使用 IP 解析器建立最小啟動鏈
瀏覽器正常,單一應用程式失敗 應用程式內建 DNS、QUIC 或繞過系統代理 查看 TUN 接管與應用程式網路設定
內網網域無法解析 內部 DNS 未依網域分流 加入 nameserver-policy 並檢查路由
解析正常但連線至錯誤位址 快取、CDN 調度或 Fake-IP 對應異常 核對日誌後再清理對應快取

修改 DNS 後應重新載入設定,並確認日誌中 DNS 模組已成功監聽,再分別測試一般網域、內網網域與節點網域。不要一遇到網頁打不開就清除全部快取,這會同時改變系統快取、瀏覽器快取與 Fake-IP 對應,使前後結果難以比較。若用戶端顯示已連線但完全無法上網,可依已連線卻無法上網排查清單,依序檢查節點、訂閱、DNS、系統代理與 TUN。

Chapter 05 / Network stack

TUN 模式與 Fake-IP 協同運作

系統代理只能涵蓋主動遵循代理設定的應用程式。命令列工具、部分遊戲、獨立網路堆疊應用程式,以及直接發起 UDP 的程式,可能完全繞過系統代理。TUN 模式透過虛擬網路介面接管系統路由,將這些流量送入 Clash 核心,因此涵蓋範圍更完整。Fake-IP 則在 DNS 階段回傳一段對應位址,讓核心在收到連線時還原原始網域並執行網域規則。兩者經常一起使用,但負責的是不同工作:TUN 負責把流量帶進來,Fake-IP 負責保留網域語意。

TUN 欄位與系統權限

tun:
  enable: true
  stack: mixed
  dns-hijack:
    - any:53
    - tcp://any:53
  auto-route: true
  auto-detect-interface: true
  strict-route: true
  mtu: 1500

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

stack 決定 TUN 使用的網路堆疊實作。mixed 在支援的核心中兼顧相容性與效能;若特定平台出現異常,可分別測試 systemgvisor,但不要在沒有對照的情況下頻繁切換。auto-route 會自動寫入路由,auto-detect-interface 會嘗試識別目前的出口網卡;裝置在 Wi-Fi、行動網路與有線網路之間切換時,這項功能能減少手動指定介面的維護。strict-route 會更嚴格地防止流量繞過,但可能暴露與其他 VPN、虛擬機器及容器網路之間的路由衝突。

TUN 啟動需要系統層級 VPN 或網路延伸功能權限。Windows 用戶端可能透過服務模式提升網路操作權限;macOS 需要允許網路延伸功能;Android 與 iOS 會顯示系統 VPN 授權。權限遭拒時,介面開關可能短暫開啟後恢復,日誌中也會出現建立裝置或寫入路由錯誤。此時反覆匯入訂閱沒有作用,應先處理系統授權。macOS 的具體彈窗與復原步驟可參考網路延伸功能與鑰匙圈處理指南

Fake-IP 的對應流程

Fake-IP 模式收到網域查詢後,不會立即將真實位址直接交給應用程式,而是從保留位址範圍分配一個對應值。應用程式連線至該位址時,核心會依對應表還原網域,然後比對 DOMAINDOMAIN-SUFFIX 或規則集。它的優點是,即使應用程式只將目標位址交給網路層,Clash 仍能掌握原始網域。對應位址不是遠端伺服器位址,也不應拿來進行公網路由測試。看到 198.18.0.0/16 範圍的結果,通常表示 Fake-IP 正常參與解析。

某些區域網路探索、時間同步、列印裝置、遊戲平台或依賴真實 DNS 回應的程式不適合使用 Fake-IP,需要加入 fake-ip-filter。過濾範圍應盡量具體。直接排除過大的網域集合,會讓大量請求回到真實位址模式,削弱網域還原效果,也可能使規則依賴 IP 比對。出現相容性問題時,先從日誌確認網域,再加入單一後綴並重新測試,不要複製來源不明的超長過濾清單。

MTU、UDP 與網路切換

頁面能開啟,但部分圖片、上傳或特定應用程式卡住時,可能是路徑 MTU 不合適。TUN 封裝會增加額外負載,底層網路若已存在 VPN、PPPoE 或行動網路限制,1500 位元組可能導致分片或封包遺失。在保留其他設定不變的前提下,可以逐步降低 MTU,例如先測試約 1400 的範圍,並觀察問題是否穩定消失。MTU 不是越小越安全;過小會增加封包數量與處理負載,確認有效後應選擇能穩定運作的較大值。

UDP 問題要區分三個層面:應用程式是否發出 UDP、TUN 是否接管,以及節點協定與網路是否支援對應傳輸。DNS 查詢、QUIC、遊戲與語音都可能使用 UDP。關閉 QUIC 後瀏覽器恢復,只能說明故障集中在 UDP 路徑,不代表 DNS 或節點整體不可用。行動裝置在 Wi-Fi 與行動網路切換後,舊工作階段可能仍綁定原介面;必要時重新連線 TUN,不要立即清除全部設定。

接管方式 涵蓋範圍 適用情境
僅系統代理 遵循 HTTP 或 SOCKS 代理設定的應用程式 瀏覽器、一般桌面應用程式、低權限環境
TUN + redir-host 更廣泛的 TCP/UDP 流量,DNS 回傳真實位址 需要真實位址相容性的環境
TUN + Fake-IP 廣泛接管並保留網域比對能力 規則分流複雜、應用程式會繞過系統代理的裝置

建議的啟用順序是:先使用系統代理確認節點與規則可用,再單獨開啟 TUN,確認路由與權限正常,最後啟用 Fake-IP 並處理少量相容性例外。若開啟 TUN 後整台裝置斷網,先關閉它以恢復網路,再檢查預設路由、DNS 劫持與其他 VPN。Windows 的服務模式、連接埠衝突與系統代理步驟可查看Windows 安裝設定完整流程

Chapter 06 / Sniffer

網域嗅探與規則還原

有些連線進入 Clash 時只攜帶目標 IP,沒有可直接用於網域規則的主機名稱。網域嗅探會檢查連線初期可識別的資訊,例如 TLS ClientHello 中的 SNI 或 HTTP 請求中的 Host,再將取得的網域用於規則比對。它不是讀取完整業務內容,也不能保證每條連線都能還原網域;加密用戶端交握、非標準協定、直接使用 IP 的請求,以及部分 UDP 流量,都可能沒有適合嗅探的欄位。

基礎設定與協定範圍

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true
  override-destination: false

  sniff:
    HTTP:
      ports:
        - 80
        - 8080-8880
      override-destination: true
    TLS:
      ports:
        - 443
        - 8443
    QUIC:
      ports:
        - 443

  skip-domain:
    - "+.push.apple.com"
    - "Mijia Cloud"

parse-pure-ip 允許針對只顯示 IP 的目標嘗試解析協定特徵;force-dns-mapping 搭配 Fake-IP 對應,協助還原連線與 DNS 查詢之間的關係。override-destination 決定嗅探取得網域後是否重寫目標。全域開啟重寫可能改善網域規則命中,也可能讓依賴原始位址的連線出現相容性問題,因此較穩妥的方式是全域維持關閉,只在確認適合的 HTTP 等協定範圍內開啟。

連接埠範圍不應無限擴大。HTTP 嗅探通常涵蓋明確的網頁連接埠,TLS 主要關注 443 與業務使用的加密連接埠,QUIC 則集中在 UDP 443。將所有連接埠交給所有協定解析器,會增加無效判斷,也可能誤判非標準二進位協定。遇到使用特殊連接埠的業務時,先從日誌確認協定與連接埠,再加入範圍。連接埠區段寫得過寬不會增加實際可見資訊,只會擴大解析嘗試。

嗅探與 Fake-IP 的關係

Fake-IP 已能為多數透過 DNS 發起的連線保留網域,嗅探更像是補充路徑:當應用程式繞過系統 DNS、直接連線至快取 IP,或連線資訊未能與對應關聯時,嗅探可能重新取得網域。兩者同時啟用不代表會重複執行同一件事。Fake-IP 在解析階段建立對應,嗅探則在連線階段觀察協定中繼資料。排查規則命中時,應查看日誌最後使用的是對應網域、嗅探網域還是原始 IP。

若關閉嗅探後某項服務總是落到 MATCH,開啟後便能命中網域規則,表示原始連線缺少可用的網域上下文。反過來,若開啟後連線被送往錯誤策略,應檢查嗅探取得的網域是否屬於共享 CDN、重新導向網域或第三方介面。一個應用程式往往會同時存取多個網域,不能只憑主站網域推斷所有連線。可以暫時提高日誌層級,完成一次短測試後恢復 info,避免長期記錄大量連線細節。

跳過清單與相容性邊界

skip-domain 用於排除已知不適合改寫或解析的網域。項目應來自實際故障驗證,而不是一次加入大範圍清單。某些裝置探索與推送服務會使用憑證網域、連線位址與業務識別不完全一致的機制,錯誤重寫可能造成重複連線。加入跳過項後要重新連線對應應用程式,因為舊連線不會自動依新規則重建。

日誌表現 說明 下一步
只看到目標 IP 未取得網域或協定無法嗅探 檢查 DNS 接管、協定與連接埠範圍
取得網域但仍命中 MATCH 規則缺少該網域或順序遭攔截 核對實際網域並調整規則位置
開啟重寫後連線失敗 目標依賴原始位址或識別結果不適合重寫 關閉全域重寫或加入精確跳過項
瀏覽器正常,QUIC 異常 UDP 路徑、節點能力或 QUIC 嗅探問題 關閉 QUIC 作為對照並檢查 TUN UDP

驗證嗅探設定時,選擇一個規則明確的網域,先記錄關閉嗅探時的命中結果,再開啟嗅探並重新建立連線進行比較。不要同時修改 DNS、規則集與目標策略,否則無法判斷變化來自哪一層。若只在系統代理模式下測試瀏覽器,瀏覽器本身通常已向代理提供網域,嗅探帶來的差異可能很小;它更適合 TUN 接管、純 IP 連線與繞過系統 DNS 的情境。

網域嗅探不能取代規則設計。還原網域後,仍需要具體規則位於寬泛規則之前,並確保對應策略組存在。若應用程式會存取大量動態子網域,優先使用已核對的後綴規則或規則集,不要持續追加單一完整網域。相關術語可在術語手冊中查閱,內容涵蓋 SNI、Fake-IP、TUN 與規則模式之間的關係。

Chapter 07 / Merge

本機覆寫與多重訂閱合併

訂閱負責提供遠端維護的節點與基礎設定,本機覆寫則負責儲存裝置或個人環境特有的調整。若直接在同一檔案中修改兩者,下一次訂閱更新很可能覆蓋本機內容;完全複製成靜態設定又會失去節點更新。更合理的結構是將訂閱視為上游輸入,把連接埠、DNS、策略組補充、規則前置與 TUN 設定放入可重複套用的覆寫層。不同用戶端支援的覆寫機制名稱可能不同,例如 Merge、Mixin、Script 或全域擴充,但目標都是在更新後重新產生生效設定。

區分取代、追加與深度合併

YAML 物件可以依鍵合併,但陣列有不同語意。修改 dns.enable 通常只會取代單一欄位;處理 rules 時,則要明確是前置規則、後置規則,還是取代整個陣列。若合併器直接以新陣列覆蓋舊陣列,一段只含三條本機規則的覆寫,可能讓訂閱原有規則全部消失。使用用戶端內建合併功能前,應查看最終生效的設定,而不是只確認覆寫片段是否成功儲存。

prepend-rules:
  - DOMAIN,router.local,DIRECT
  - DOMAIN-SUFFIX,corp.example,DIRECT

append-rules:
  - MATCH,總選擇

override:
  mode: rule
  log-level: info
  ipv6: false

上方結構用於說明「前置、後置、取代」三種意圖,具體鍵名取決於用戶端的合併實作,未經確認不能直接當作 mihomo 原生設定載入。mihomo 最終接收的仍是一份完整設定。驗證方式是開啟用戶端產生的執行時設定,確認本機規則位於預期位置、策略組沒有重複,且最終只保留一個 MATCH。若用戶端提供設定檢查功能,應在每次更新後執行一次。

多重訂閱合併以節點層為主

同時使用多份訂閱時,最穩定的方式通常是將它們宣告為不同的 proxy-providers,由本機策略組透過 use 引入,而不是直接拼接多份完整設定檔。完整設定往往各自帶有連接埠、DNS、策略組與規則,同名鍵會互相覆蓋,同名組會產生衝突,最後結果取決於合併工具的實作。節點提供者只負責節點集合,本地主設定負責統一策略與規則,職責更清楚。

proxy-providers:
  primary:
    type: http
    url: https://example.com/subscription/primary
    path: ./providers/primary.yaml
    interval: 86400
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

  backup:
    type: http
    url: https://example.com/subscription/backup
    path: ./providers/backup.yaml
    interval: 86400
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 900

proxy-groups:
  - name: 總選擇
    type: select
    use:
      - primary
      - backup
    proxies:
      - DIRECT

範例中的訂閱網址只是結構示意,使用時應換成自己的有效網址,並避免將包含存取憑據的連結公開於文件、截圖或共用儲存庫。兩個 provider 必須使用不同的快取路徑。健康檢查間隔可依裝置與節點數量調整,行動裝置不宜高頻輪詢大量節點。若上游節點名稱重複,介面可能難以區分來源,可以在合併層使用用戶端支援的前綴功能,或讓不同 provider 進入獨立地區組,而不是直接混在同一個長清單中。

更新失敗與設定漂移

多重訂閱環境常見的問題,不是某次設定無法載入,而是執行一段時間後逐漸偏離預期。上游可能修改節點命名,導致篩選運算式失效;刪除某個地區後,策略組變成空組;新增同名節點後,手動選擇指向另一個來源。更新後應檢查 provider 狀態、策略組成員數量是否合理,以及關鍵業務規則是否仍指向存在的組。不要用虛構的固定節點數量作為監控條件,應關注「組是否為空」「引用是否存在」及「關鍵請求是否命中」。

跨裝置同步時,不建議直接同步用戶端的整個資料目錄。桌面端與行動端的權限、路徑、TUN 介面名稱及快取位置都不同。更適合同步的是訂閱入口、本地主設定範本、規則集與覆寫邏輯,裝置專屬項目則留在各自用戶端。WebDAV、訂閱分發與手動匯入的差異,可繼續閱讀Clash 多裝置設定同步方案

內容 適合遠端維護 適合本機保留
節點集合 訂閱或 proxy-provider 暫時測試節點
公共規則集 rule-provider 少量裝置與內網例外
策略組骨架 受控主設定 手動選擇狀態與裝置差異
TUN、連接埠、權限相關項目 通常不直接跨平台同步 依裝置與系統維護

Chapter 08 / Controller

外部控制面板與執行維護

mihomo 提供外部控制介面,用戶端介面與瀏覽器控制面板可以透過它讀取策略組、切換節點、查看連線、重新整理 provider 及觀察日誌。控制介面只負責管理正在執行的核心,不會取代設定檔。面板中暫時切換策略可以立即生效,但新增規則、調整 DNS 或變更 TUN 參數仍需修改設定並重新載入。將控制介面理解為執行狀態入口,比把它當作設定編輯器更準確。

監聽位址、密鑰與存取範圍

external-controller: 127.0.0.1:9090
secret: "your-password"

external-ui: ./ui
external-ui-name: dashboard

僅在本機使用時,控制位址應監聽 127.0.0.1。設定為 0.0.0.0 會接受來自其他網路介面的連線,只有明確需要進行區域網路管理並已設定防火牆時才應採用。secret 用於介面驗證,應使用自行產生的獨立值,不要與訂閱存取參數或其他帳戶共用。面板頁面與控制介面可以部署在不同位置,但瀏覽器仍必須能存取介面位址,並符合協定、安全內容環境與跨來源條件。

遠端管理不應直接將控制連接埠暴露於公共網路。較穩妥的方式是在可信任的區域網路中存取,或先透過受控的安全通道進入裝置網路。若只需要查看家中路由器上的 Clash 狀態,應限制來源位址並保留防火牆規則。控制介面能切換出口、終止連線與讀取執行資訊,存取範圍應與路由器管理頁面同樣謹慎。

連線頁與日誌如何搭配

連線清單通常會顯示來源、目標、協定、規則、策略鏈與流量狀態。排查某個應用程式時,先清除觀察範圍或依目標篩選,再重新觸發一次請求。策略鏈能說明請求先進入哪個業務組,最後落到哪個節點;規則欄位則能說明是哪條規則完成比對。如果頁面打不開但連線清單完全沒有紀錄,問題通常發生在流量進入核心之前,應回到系統代理、TUN 路由或應用程式自身的代理設定檢查。

日誌層級維持 info 適合日常使用。需要定位 DNS、交握或嗅探細節時,可以短時間切換到 debug,重現一次後立即恢復。長期開啟詳細日誌會增加輸出量,也會讓真正的錯誤被大量正常紀錄淹沒。分享日誌前應檢查其中的訂閱網址、內網網域、目標位址與驗證欄位,只截取與故障時間點相關的片段。

provider 重新整理與策略狀態

控制面板通常允許手動重新整理代理提供者與規則提供者。重新整理按鈕只會觸發對應資源更新,不等於重新載入整份設定。代理 provider 更新後,新節點會進入引用它的策略組,但目前連線不會全部自動遷移;規則 provider 更新後,新請求會依新規則比對,既有長連線仍可能維持原策略。驗證更新結果時,應重新建立測試連線並查看 provider 的最後錯誤狀態,而不是只看按鈕是否完成旋轉。

儲存策略選擇取決於 profile.store-selected 以及用戶端資料目錄的權限。若每次重新啟動都回到預設節點,先確認該欄位是否存在於最終設定,再檢查用戶端是否能寫入執行目錄。多份設定使用相同組名時,持久化狀態也可能讓切換後的結果看起來與預設設定不一致。測試時可以新建名稱明確的組,確認儲存機制正常後,再處理舊狀態。

面板功能 適用用途 無法取代
策略切換 即時選擇出口與對照測試 策略組結構設計
連線查看 確認規則、策略鏈與協定 系統層封包擷取與路由檢查
Provider 重新整理 更新節點集合或規則資源 完整設定重新載入
日誌觀察 定位解析、連線與規則錯誤 長期效能結論

一套可重複的維護順序

日常維護可以固定為四個步驟:先更新訂閱與 provider,確認所有資源載入完成;再驗證「總選擇」與關鍵業務組仍有可用成員;接著用一個網域請求和一個需要 TUN 的應用程式檢查規則鏈;最後恢復常用日誌層級並匯出目前可用的設定。若更新後出現異常,先比較變更範圍:只有節點變化就檢查 provider 與策略組,只有規則集變化就檢查命中順序,只有用戶端升級或系統網路變更後才重點檢查權限與路由。

控制面板無法連線時,先確認核心仍在執行,再檢查控制位址、連接埠占用與密鑰。使用瀏覽器存取本機面板,卻連線至遠端裝置介面時,還要確認位址沒有寫成瀏覽器所在裝置的 127.0.0.1。若用戶端本身已內建控制頁面,優先使用內建入口,通常會自動處理目前的連接埠與驗證資訊。需要重新選擇用戶端時,可前往選型指南查看平台差異,安裝套件統一從下載頁進入。

下一步

依單一變數調整設定

先從目前問題所屬章節選擇一項修改,重新載入後透過日誌與連線頁驗證。需要回到基礎操作時,查看快速入門教學;需要核對專業名詞時,開啟術語手冊;遇到用戶端已連線但網路中斷,可使用逐項排查清單定位斷點。