首頁/進階設定

Clash 進階設定手冊

跑通基礎連線之後,真正決定 Clash 好不好用的是規則引擎和代理群組的組合方式。這一篇深入拆解比對順序、四種代理群組的行為差異、DNS 與 Fake-IP 原理、TUN 模式底層機制,每一節都附真實可用的 YAML 片段。

🕒 閱讀約 20 分鐘 🧭 需要先完成安裝教學 🔄 最近更新:2026 年 7 月

規則引擎是怎麼比對的

Clash 的規則是一個「由上而下、命中即停」的清單:每一條網路請求都會從 rules 設定的第一行開始逐條比對,一旦某條規則比對成功,立刻執行該規則指定的動作,後面的規則完全不會再看。

這意味著規則的順序本身就是一種優先順序設計。常見的組織方式是:先寫「必須直連」的規則(例如內網位址、國內網站),再寫「必須走代理」的特定規則,最後用一條 MATCH 兜底規則收尾,代表「以上都沒命中時怎麼辦」。

config.yamlyaml
rules:
  # 1. 私有網段優先直連,避免代理繞路存取區域網路裝置
  - PRIVATE,DIRECT
  # 2. 中國大陸 IP 直連(GEOIP 規則集會自動更新)
  - GEOIP,CN,DIRECT
  # 3. 特定網域強制走某個代理群組
  - DOMAIN-SUFFIX,openai.com,美國節點
  - DOMAIN-KEYWORD,googlevideo,自動選擇
  # 4. 兜底:前面都沒命中的流量走自動選擇
  - MATCH,自動選擇
⚠️

常見誤區:把 MATCH 規則寫在中間。因為比對是命中即停的,MATCH 之後的規則永遠不會被執行到,所以它必須放在整個 rules 清單的最後一行。

規則類型詳解

Clash 支援的規則類型大致分三類:按網域、按網路位址、按其他特徵。下表列出最常用的幾種:

規則類型範例說明
DOMAINDOMAIN,ad.example.com,REJECT精確比對單一網域
DOMAIN-SUFFIXDOMAIN-SUFFIX,github.com,代理比對該網域及其所有子網域,最常用
DOMAIN-KEYWORDDOMAIN-KEYWORD,youtube,代理網域中包含關鍵字即命中,注意可能誤傷
IP-CIDR / IP-CIDR6IP-CIDR,192.168.0.0/16,DIRECT按 IPv4/IPv6 網段比對
GEOIPGEOIP,CN,DIRECT按 IP 所屬國家/地區的地理位置資料庫比對
DST-PORT / SRC-PORTDST-PORT,443,代理按目標/來源連接埠比對
PROCESS-NAMEPROCESS-NAME,WeChat.exe,DIRECT按發起連線的本機程序名稱比對(桌面端)
RULE-SETRULE-SET,reject,REJECT引用一個 Rule Provider 規則集,見下一節
MATCHMATCH,自動選擇兜底規則,必須放在最後一行

每條規則的最後一段是「動作」,可以是 DIRECT(直連)、REJECT(封鎖,常用於去廣告)、或某個代理群組的名稱(把流量交給該群組按其策略選擇節點)。

Rule Provider:規則集訂閱

手動撰寫幾百條網域規則不切實際,Clash 提供了 rule-providers 機制:從遠端 URL 下載一份規則集檔案,並定時自動更新,設定裡只需引用一次。

config.yamlyaml
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://example.com/rules/reject.txt"
    path: ./rules/reject.yaml
    interval: 86400

rules:
  - RULE-SET,reject,REJECT

behavior 決定了這份規則集裡的內容如何解析,三種取值:

behavior規則集內容典型用途
domain逐行網域(支援萬用字元前綴)廣告過濾、按網站分流的網域清單
ipcidr逐行 IP 網段GEOIP 資料庫之外的自訂 IP 網段
classicalrules 裡寫法一致的完整規則行混合多種規則類型的複雜集合

interval 單位為秒,表示自動重新拉取規則集的間隔,用來讓「該封鎖的新廣告網域」「該直連的新中國大陸網域」保持更新,而不需要你手動維護。

代理群組:四種調度策略

代理群組(proxy-groups)是把多個具體節點包裝成一個「策略單元」,規則裡引用的是群組名稱,而不是某個具體節點──這樣才能實現「自動選最快節點」「某個節點掛了自動切換」等效果。

select 手動選擇

  • 完全由你手動指定目前使用哪個節點
  • 適合你很清楚該用哪條線路的情境
  • 不會自動測速、不會自動切換

url-test 自動測速

  • 定時對群組內所有節點發起測速請求
  • 始終自動使用延遲最低的節點
  • 最適合「我不想管,只要最快就好」

fallback 容錯移轉

  • 按設定順序使用第一個「健康」的節點
  • 目前節點測速失敗才切到下一個
  • 適合有明確優先順序、只在故障時切換的情境

load-balance 負載平衡

  • 把不同連線分散到多個節點上
  • strategy 可選一致性雜湊或輪詢
  • 適合多節點分攤壓力、避免單節點限速
config.yamlyaml
proxy-groups:
  - name: 自動選擇
    type: url-test
    proxies: [香港01, 香港02, 日本01]
    url: "https://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50

  - name: 美國節點
    type: fallback
    proxies: [美西01, 美東01]
    url: "https://www.gstatic.com/generate_204"
    interval: 300

tolerance 是「容差」,單位毫秒:只要新測速結果與目前節點的延遲差距在容差範圍內,就不會頻繁切換節點,避免「兩個節點延遲都差不多卻反覆跳來跳去」。

DNS 與 Fake-IP

DNS 解析是規則分流準確與否的關鍵一環──如果網域被解析成了錯誤的 IP,或者被業者 DNS 汙染,規則再準也沒用。Clash 內建 DNS 模組正是為了解決這個問題。

核心是兩種網域解析模式:

Fake-IP 模式

  • 給每個網域分配一個虛假的、僅本機可見的 IP
  • 真正的 DNS 解析延後到實際發起連線時才做
  • 規則比對可以直接按網域進行,相容性最好
  • 是桌面端 TUN 模式的預設推薦設定

Redir-Host 模式

  • 直接回傳真實解析結果
  • 更貼近「傳統」網路行為,相容部分對 IP 敏感的程式
  • 規則裡的 IP-CIDR/GEOIP 判斷會更準確
  • 路由器/閘道器情境更常用
config.yamlyaml
dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN

思路是:nameserver 裡放你所在地區 ISP 的一般 DNS,優先用於快速解析。一旦 fallback-filter 判斷結果看起來不太對(解析出的 IP 與預期地區不符,疑似遭竄改,或該網域其實架設在其他地區),就改用 fallback 裡的加密 DNS 重新解析,兼顧速度與準確性。

TUN 模式底層原理

系統代理只能接管「知道要用代理」的應用程式(瀏覽器、大部分桌面軟體),但很多程式(遊戲、命令列工具、部分手機 App)不會讀取系統代理設定,這時就需要 TUN 模式。

TUN 模式的本質是在作業系統裡建立一張虛擬網路卡,並把系統的預設路由指向這張網路卡。這樣一來,不管某個程式有沒有「代理意識」,它發出的網路封包都會先經過這張虛擬網路卡,被 Clash 攔截、按規則處理,再決定直連還是轉發給某個代理節點──相當於在網路層做了一次全域劫持,而不是在應用層「說服」程式使用代理。

config.yamlyaml
tun:
  enable: true
  stack: system
  dns-hijack:
    - any:53
  auto-route: true
  auto-detect-interface: true

stack 通常可選 systemgvisorsystem 使用系統原生網路堆疊,效能更好;gvisor 是純使用者態實作的網路堆疊,相容性更強,在少數系統 TUN 驅動不穩定時可以切換嘗試。

💡

正因為 TUN 模式運作在網路層,它需要建立虛擬網路卡的系統權限(管理員/Root,或 macOS 的系統延伸功能授權),這也是安裝教學裡反覆提到「以管理員身分執行」的原因。

腳本與 Logic 規則

當一般規則類型不敷使用時,Clash 的強化核心(如 mihomo)支援兩種更靈活的寫法:

  • Logic 規則:用 AND / OR / NOT 組合多個條件,例如「目標連接埠是 443 而且 屬於某個 IP 網段」才走代理,寫法為 AND,((DST-PORT,443),(IP-CIDR,10.0.0.0/8))
  • Script Provider:允許撰寫一小段腳本,在執行時動態回傳該請求應該走哪個代理群組,用於「按目前網路環境」「按時段」等一般規則無法描述的複雜判斷,屬於進階用法,建議先熟練掌握一般規則後再嘗試。

效能與體驗調校

  • 縮短 url-testinterval 會更快發現變慢的節點,但也會增加測速請求的頻率與耗電,桌面端可以設 300 秒,行動端建議 600 秒以上。
  • 規則集數量不要貪多,每新增一個 rule-providers 都會佔用記憶體並增加規則比對的運算量,優先選擇維護活躍、涵蓋範圍廣的規則集,而不是疊加十幾個高度重疊的來源。
  • 合理排序 rules:把命中率最高的規則(例如 GEOIP,CN,DIRECT)盡量往前放,可以讓大多數請求更快完成比對,減少不必要的逐行比對。
  • 行動端優先用系統代理而非 TUN,除非確實需要接管非代理感知應用程式,因為 TUN 模式在部分手機上會帶來更高的背景耗電。

把這幾節內容和實際設定對照閱讀一遍之後,建議接著查閱設定檔完整參考,把每個欄位的預設值和取值範圍都過一遍,建構出完整的知識地圖。