規則引擎運作原理
Clash 的規則引擎按從上到下順序比對,第一條命中的規則即生效,後續規則不再檢查。每條規則由三個部分組成:
# 格式:規則類型,比對值,目標策略
- DOMAIN-SUFFIX,google.com,Proxy
- GEOIP,CN,DIRECT
- MATCH,DIRECT # 兜底規則,必須放在最後
理解這個順序比對機制至關重要:精確規則放前面,廣泛規則放後面,MATCH 兜底放最後。
規則類型詳解
網域類規則
| 規則類型 | 比對方式 | 範例 |
|---|---|---|
DOMAIN | 精確比對網域名稱 | DOMAIN,www.google.com,Proxy |
DOMAIN-SUFFIX | 比對網域及其所有子網域 | DOMAIN-SUFFIX,google.com,Proxy |
DOMAIN-KEYWORD | 網域中包含關鍵字 | DOMAIN-KEYWORD,googleapis,Proxy |
DOMAIN-REGEX | 正規表達式比對網域 | DOMAIN-REGEX,^api\..+\.com$,Proxy |
DOMAIN-SUFFIX,google.com,Proxy 會同時比對 google.com、www.google.com、mail.google.com 等所有子網域,是最常用的網域規則。
IP 位址類規則
| 規則類型 | 比對方式 | 範例 |
|---|---|---|
IP-CIDR | 比對 IPv4 CIDR 網段 | IP-CIDR,192.168.0.0/16,DIRECT |
IP-CIDR6 | 比對 IPv6 CIDR 網段 | IP-CIDR6,::1/128,DIRECT |
GEOIP | 按 IP 歸屬國家/地區比對 | GEOIP,CN,DIRECT |
IP-CIDR 規則預設會觸發 DNS 解析(將網域解析為 IP 後再比對)。在 fake-ip 模式下,IP-CIDR 規則對網域無效,需優先使用網域規則。若希望 IP-CIDR 不觸發 DNS 解析,在規則末尾加上 no-resolve:IP-CIDR,10.0.0.0/8,DIRECT,no-resolve其他規則類型
| 規則類型 | 說明 | 範例 |
|---|---|---|
PROCESS-NAME | 按處理程序名稱比對(桌面端) | PROCESS-NAME,git.exe,Proxy |
PROCESS-PATH | 按處理程序完整路徑比對 | PROCESS-PATH,/usr/bin/curl,Proxy |
NETWORK | 按協定類型比對 | NETWORK,udp,Proxy |
PORT | 按目標連接埠比對 | DST-PORT,22,DIRECT |
RULE-SET | 引用外部規則集 | RULE-SET,gfw,Proxy |
MATCH | 兜底比對,無條件命中 | MATCH,DIRECT |
proxy-groups 策略群組設定
策略群組定義了規則命中後流量的轉發目標。Clash 支援以下幾種策略群組類型:
手動選擇群組(select)
proxy-groups:
- name: "Proxy"
type: select
proxies:
- "自動選擇"
- "香港 01"
- "新加坡 01"
- "日本 01"
- DIRECT
使用者在客戶端介面手動選擇要使用的節點或子策略群組。最外層的預設策略群組通常使用 select 類型。
延遲自動選擇(url-test)
- name: "自動選擇"
type: url-test
url: "https://www.gstatic.com/generate_204"
interval: 300 # 測速間隔(秒),建議 180-300
tolerance: 50 # 延遲差在 50ms 以內時不切換節點
proxies:
- "香港 01"
- "香港 02"
- "新加坡 01"
自動對所有節點進行延遲測試,始終選擇延遲最低的節點。適合對延遲敏感的情境(遊戲、視訊會議)。
故障轉移(fallback)
- name: "故障轉移"
type: fallback
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies:
- "主節點"
- "備用節點 01"
- "備用節點 02"
優先使用清單中第一個節點,僅當該節點不可用時才切換到下一個。適合穩定性優先的情境。
負載均衡(load-balance)
- name: "負載均衡"
type: load-balance
strategy: round-robin # round-robin / consistent-hashing
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies:
- "節點 A"
- "節點 B"
- "節點 C"
將流量分散到多個節點,提升整體吞吐量。round-robin 輪詢分配;consistent-hashing 同一目標位址始終使用同一節點,適合需要保持工作階段的情境。
rule-providers 外部規則集
手動維護數百條規則既繁瑣又容易遺漏。rule-providers 允許從外部 URL 或本地端檔案訂閱社群維護的大型規則集,自動更新。
rule-providers:
gfw:
type: http
behavior: domain # domain / ipcidr / classical
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400 # 每 24 小時自動更新一次
cn-cidr:
type: http
behavior: ipcidr
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
path: ./ruleset/cncidr.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,direct,DIRECT
- RULE-SET,gfw,Proxy
- RULE-SET,cn-cidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,Proxy
推薦規則集來源:Loyalsoldier/clash-rules 是社群最廣泛使用的規則集,包含 GFW 清單、國內直連網域、廣告過濾等,持續維護更新。
完整設定模板範例
以下是一份包含規則分流、策略群組和外部規則集的最小可用設定模板:
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- tls://8.8.8.8:853
proxies:
- name: "香港 01"
type: vmess
server: hk01.example.com
port: 443
uuid: "your-uuid-here"
alterId: 0
cipher: auto
tls: true
proxy-groups:
- name: "Proxy"
type: select
proxies: ["自動選擇", "香港 01", DIRECT]
- name: "自動選擇"
type: url-test
url: "https://www.gstatic.com/generate_204"
interval: 300
proxies: ["香港 01"]
rule-providers:
gfw:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/gfw.txt"
path: ./ruleset/gfw.yaml
interval: 86400
rules:
# 自訂高優先級規則(放最前面)
- DOMAIN-SUFFIX,openai.com,Proxy
- DOMAIN-KEYWORD,notion,Proxy
# 外部規則集
- RULE-SET,gfw,Proxy
# 國內 IP 直連
- GEOIP,CN,DIRECT
# 區域網路直連
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
# 兜底
- MATCH,DIRECT
常見分流情境設定
串流媒體解鎖
Netflix、Disney+、YouTube Premium 等串流媒體有地區限制,需要特定地區的解鎖節點:
proxy-groups:
- name: "Netflix"
type: select
proxies: ["美國節點", "新加坡節點", "日本節點"]
rules:
- DOMAIN-SUFFIX,netflix.com,Netflix
- DOMAIN-SUFFIX,nflxvideo.net,Netflix
- DOMAIN-KEYWORD,netflix,Netflix
開發者工具直連最佳化
npm、pip、Docker Hub 等需要代理,而內網服務、本地端開發伺服器需要直連:
rules:
# 開發工具走代理
- DOMAIN-SUFFIX,npmjs.org,Proxy
- DOMAIN-SUFFIX,pypi.org,Proxy
- DOMAIN-SUFFIX,docker.io,Proxy
- PROCESS-NAME,git.exe,Proxy # Windows
- PROCESS-NAME,git,Proxy # macOS/Linux
# 本地端開發直連
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- DOMAIN-SUFFIX,local,DIRECT
規則設定最佳實踐
- 精確優先:
DOMAIN放在DOMAIN-SUFFIX前,DOMAIN-SUFFIX放在DOMAIN-KEYWORD前,減少誤比對 - GEOIP 放後面:GEOIP 需要 DNS 解析才能運作,耗時較長,放在網域規則之後
- MATCH 必須是最後一條:作為兜底規則,未命中任何規則的流量由 MATCH 處理
- 使用日誌除錯:在 Clash 客戶端的「日誌」頁面即時查看每條連線命中了哪條規則,快速排查分流問題
- no-resolve 減少延遲:對於已知是內網 IP 的 IP-CIDR 規則,加上
no-resolve跳過 DNS 解析步驟
總結
- 規則按從上到下順序比對,精確規則在前,廣泛規則在後,MATCH 兜底
- 常用規則類型:
DOMAIN-SUFFIX(網域及子網域)、GEOIP(IP 歸屬地)、IP-CIDR(IP 網段)、PROCESS-NAME(處理程序名稱) proxy-groups定義節點選擇策略:select(手動)/ url-test(自動延遲)/ fallback(故障轉移)/ load-balance(負載均衡)rule-providers從外部訂閱大型規則集,自動更新,無需手動維護
延伸閱讀
- TUN 模式使用指南:讓所有流量都走 Clash 規則
- DNS 防污染設定:配合規則分流解決 DNS 污染問題
- 訂閱自動更新設定:自動保持節點和規則集最新