規則引擎運作原理

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.comwww.google.commail.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-resolveIP-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 解析步驟
查看進階設定指南,探索更多 Clash 高階功能

總結

  • 規則按從上到下順序比對,精確規則在前,廣泛規則在後,MATCH 兜底
  • 常用規則類型:DOMAIN-SUFFIX(網域及子網域)、GEOIP(IP 歸屬地)、IP-CIDR(IP 網段)、PROCESS-NAME(處理程序名稱)
  • proxy-groups 定義節點選擇策略:select(手動)/ url-test(自動延遲)/ fallback(故障轉移)/ load-balance(負載均衡)
  • rule-providers 從外部訂閱大型規則集,自動更新,無需手動維護

延伸閱讀