首頁/進階設定
Clash 進階設定手冊
跑通基礎連線之後,真正決定 Clash 好不好用的是規則引擎和代理群組的組合方式。這一篇深入拆解比對順序、四種代理群組的行為差異、DNS 與 Fake-IP 原理、TUN 模式底層機制,每一節都附真實可用的 YAML 片段。
規則引擎是怎麼比對的
Clash 的規則是一個「由上而下、命中即停」的清單:每一條網路請求都會從 rules 設定的第一行開始逐條比對,一旦某條規則比對成功,立刻執行該規則指定的動作,後面的規則完全不會再看。
這意味著規則的順序本身就是一種優先順序設計。常見的組織方式是:先寫「必須直連」的規則(例如內網位址、國內網站),再寫「必須走代理」的特定規則,最後用一條 MATCH 兜底規則收尾,代表「以上都沒命中時怎麼辦」。
rules:
# 1. 私有網段優先直連,避免代理繞路存取區域網路裝置
- PRIVATE,DIRECT
# 2. 中國大陸 IP 直連(GEOIP 規則集會自動更新)
- GEOIP,CN,DIRECT
# 3. 特定網域強制走某個代理群組
- DOMAIN-SUFFIX,openai.com,美國節點
- DOMAIN-KEYWORD,googlevideo,自動選擇
# 4. 兜底:前面都沒命中的流量走自動選擇
- MATCH,自動選擇
常見誤區:把 MATCH 規則寫在中間。因為比對是命中即停的,MATCH 之後的規則永遠不會被執行到,所以它必須放在整個 rules 清單的最後一行。
規則類型詳解
Clash 支援的規則類型大致分三類:按網域、按網路位址、按其他特徵。下表列出最常用的幾種:
| 規則類型 | 範例 | 說明 |
|---|---|---|
DOMAIN | DOMAIN,ad.example.com,REJECT | 精確比對單一網域 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,github.com,代理 | 比對該網域及其所有子網域,最常用 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,youtube,代理 | 網域中包含關鍵字即命中,注意可能誤傷 |
IP-CIDR / IP-CIDR6 | IP-CIDR,192.168.0.0/16,DIRECT | 按 IPv4/IPv6 網段比對 |
GEOIP | GEOIP,CN,DIRECT | 按 IP 所屬國家/地區的地理位置資料庫比對 |
DST-PORT / SRC-PORT | DST-PORT,443,代理 | 按目標/來源連接埠比對 |
PROCESS-NAME | PROCESS-NAME,WeChat.exe,DIRECT | 按發起連線的本機程序名稱比對(桌面端) |
RULE-SET | RULE-SET,reject,REJECT | 引用一個 Rule Provider 規則集,見下一節 |
MATCH | MATCH,自動選擇 | 兜底規則,必須放在最後一行 |
每條規則的最後一段是「動作」,可以是 DIRECT(直連)、REJECT(封鎖,常用於去廣告)、或某個代理群組的名稱(把流量交給該群組按其策略選擇節點)。
Rule Provider:規則集訂閱
手動撰寫幾百條網域規則不切實際,Clash 提供了 rule-providers 機制:從遠端 URL 下載一份規則集檔案,並定時自動更新,設定裡只需引用一次。
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 網段 |
classical | 與 rules 裡寫法一致的完整規則行 | 混合多種規則類型的複雜集合 |
interval 單位為秒,表示自動重新拉取規則集的間隔,用來讓「該封鎖的新廣告網域」「該直連的新中國大陸網域」保持更新,而不需要你手動維護。
代理群組:四種調度策略
代理群組(proxy-groups)是把多個具體節點包裝成一個「策略單元」,規則裡引用的是群組名稱,而不是某個具體節點──這樣才能實現「自動選最快節點」「某個節點掛了自動切換」等效果。
select 手動選擇
- 完全由你手動指定目前使用哪個節點
- 適合你很清楚該用哪條線路的情境
- 不會自動測速、不會自動切換
url-test 自動測速
- 定時對群組內所有節點發起測速請求
- 始終自動使用延遲最低的節點
- 最適合「我不想管,只要最快就好」
fallback 容錯移轉
- 按設定順序使用第一個「健康」的節點
- 目前節點測速失敗才切到下一個
- 適合有明確優先順序、只在故障時切換的情境
load-balance 負載平衡
- 把不同連線分散到多個節點上
strategy可選一致性雜湊或輪詢- 適合多節點分攤壓力、避免單節點限速
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判斷會更準確 - 路由器/閘道器情境更常用
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 攔截、按規則處理,再決定直連還是轉發給某個代理節點──相當於在網路層做了一次全域劫持,而不是在應用層「說服」程式使用代理。
tun:
enable: true
stack: system
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
stack 通常可選 system 或 gvisor:system 使用系統原生網路堆疊,效能更好;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-test的interval會更快發現變慢的節點,但也會增加測速請求的頻率與耗電,桌面端可以設 300 秒,行動端建議 600 秒以上。 - 規則集數量不要貪多,每新增一個
rule-providers都會佔用記憶體並增加規則比對的運算量,優先選擇維護活躍、涵蓋範圍廣的規則集,而不是疊加十幾個高度重疊的來源。 - 合理排序
rules:把命中率最高的規則(例如GEOIP,CN,DIRECT)盡量往前放,可以讓大多數請求更快完成比對,減少不必要的逐行比對。 - 行動端優先用系統代理而非 TUN,除非確實需要接管非代理感知應用程式,因為 TUN 模式在部分手機上會帶來更高的背景耗電。
把這幾節內容和實際設定對照閱讀一遍之後,建議接著查閱設定檔完整參考,把每個欄位的預設值和取值範圍都過一遍,建構出完整的知識地圖。