Clash 規則分流配置實戰:國內直連國外代理的完整寫法與匹配順序

以國內外分流為場景,講解 DOMAIN-SUFFIX、GEOIP、RULE-SET 的組合寫法、規則自上而下的匹配順序,以及 MATCH 兜底與常見誤寫導致的漏匹配問題。

B-01分流的基本原理:規則、策略組與匹配順序

Clash 的分流本質是一張「從上到下逐條比對」的清單。設定檔裡的 rules 欄位是一個陣列,每一行都是一條獨立規則,格式統一為 規則類型,匹配內容,策略名 三段式。當一次網路請求進入 Clash 核心,核心會依照陣列裡從第一行到最後一行的順序逐條比對,一旦命中某一條,立刻按該條指定的策略(直連、代理、拒絕)處理,後面的規則就不再繼續比對。這個「命中即停」的機制是理解分流配置的核心,也是後文排查漏匹配問題的關鍵切入點。

策略這一段填的不是具體節點,而是策略組名稱,例如 DIRECT(直連,核心內建)、REJECT(拒絕,核心內建),或者你在 proxy-groups 裡自訂的組名,例如 國外代理。策略組內部再決定實際走哪個節點,規則層只負責「該走哪條路」,不管「這條路上具體是哪台車」。這種分層設計的好處是,換節點、調整延遲策略都只需要改策略組,不用動規則本身。

B-02國內直連、國外代理的標準寫法

國內直連國外代理是最常見的分流情境,核心思路是:先把明確屬於中國大陸的網域與 IP 段挑出來走直連,再把明確屬於境外或需要透過代理存取的網域挑出來走代理,最後用一條兜底規則把剩下所有流量歸到某一策略,通常也是代理組,避免遺漏。

實務上主要會用到三類規則:

  • DOMAIN-SUFFIX:按網域後綴匹配,適合已知網址的網站,例如 DOMAIN-SUFFIX,google.com,國外代理 會匹配 google.com 以及所有子網域。
  • GEOIP:按目標 IP 所屬地理位置匹配,適合處理沒有固定網域規律、但伺服器歸屬地明確的流量,例如 GEOIP,CN,DIRECT 表示目標 IP 屬於中國大陸則直連。
  • RULE-SET:引用一份預先整理好的規則集檔案(本地或遠端),把成千上萬條網域/IP 規則打包成一個引用,避免規則檔案本身寫得又長又亂。

一份最基礎的國內直連、國外代理規則段落大致如下:

rules:
  - DOMAIN-SUFFIX,cn,DIRECT
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,google.com,國外代理
  - DOMAIN-SUFFIX,youtube.com,國外代理
  - DOMAIN-SUFFIX,github.com,國外代理
  - GEOIP,CN,DIRECT
  - MATCH,國外代理

這段規則的邏輯是:先精確處理幾個明確要直連或明確要代理的網域,再用 GEOIP,CN,DIRECT 兜住所有目標伺服器落在中國大陸的流量,最後 MATCH,國外代理 把沒有命中任何前面規則的流量統一交給代理組。實際使用中,前面手寫的 DOMAIN-SUFFIX 條目往往會替換成 RULE-SET 引用的規則集,因為手動維護幾十條網域遠不如引用一份持續更新的規則集省心。

B-03用 RULE-SET 引用規則集的寫法

RULE-SET 分兩步:先在 rule-providers 欄位裡宣告一個規則集的名稱、來源與更新週期,再在 rules 裡用 RULE-SET,規則集名稱,策略名 引用它。範例如下:

rule-providers:
  cn-domain:
    type: http
    behavior: domain
    url: "https://example.com/rules/cn-domain.yaml"
    path: ./rules/cn-domain.yaml
    interval: 86400
  proxy-domain:
    type: http
    behavior: domain
    url: "https://example.com/rules/proxy-domain.yaml"
    path: ./rules/proxy-domain.yaml
    interval: 86400

rules:
  - RULE-SET,cn-domain,DIRECT
  - RULE-SET,proxy-domain,國外代理
  - GEOIP,CN,DIRECT
  - MATCH,國外代理

behavior 欄位要與規則集檔案的實際內容對應,常見三種:domain 表示檔案裡是網域清單,ipcidr 表示檔案裡是 IP 段清單,classical 表示檔案裡混合了完整的規則語句(每行自帶類型前綴)。填錯 behavior 是規則集不生效的高頻原因之一,核心解析時會按宣告的 behavior 去理解檔案格式,一旦不匹配,規則集實質上等於空檔案,卻不一定會報出明顯的錯誤。

注意 NOTE 規則集透過網路下載後會快取到 path 指定的本地檔案,interval 是下次自動刷新的間隔秒數。如果懷疑規則集沒更新到最新版本,先看本地快取檔案的修改時間,再決定是否手動刪除快取以觸發重新下載。

B-04規則順序為什麼決定結果:一個真實會出錯的例子

規則順序不是排版習慣,而是直接決定分流結果的邏輯結構。看看下面這段容易出錯的寫法:

rules:
  - GEOIP,CN,DIRECT
  - DOMAIN-SUFFIX,google.com,國外代理
  - MATCH,國外代理

這段配置把 GEOIP,CN,DIRECT 放在了最前面。問題在於,一些透過 CDN 分發的境外網站,其某個接入節點的 IP 恰好落在中國大陸的 CDN 節點上,或者反過來,不少中國大陸服務商在海外也部署了加速節點。GEOIP 判斷的是「這次連線實際到達的 IP 歸屬地」,不是「這個網站的主體歸屬地」。如果 GEOIP,CN,DIRECT 排在 DOMAIN-SUFFIX 之前,某次存取 google.com 恰好解析到一個被 GEOIP 資料庫標記為中國大陸的 IP,就會在到達下面那條本該生效的 DOMAIN-SUFFIX 規則之前,被直連規則先行攔截,導致該請求走直連、連線失敗或被污染。

正確的順序原則是:越精確、越具體的規則放在越前面,籠統的兜底判斷放在後面。網域類規則通常比 GEOIP 更精確,因為網域是網站的身份標識,不會因為 CDN 調度而改變;GEOIP 更適合放在網域規則之後,專門處理那些沒有網域規則覆蓋、但可以按 IP 歸屬地簡單判斷的剩餘流量。前面範例裡把 DOMAIN-SUFFIX / RULE-SET 放在前、GEOIP 放在中間、MATCH 放在最後,正是這個原則的體現。

B-05MATCH 兜底規則:必須寫、必須放最後

MATCH 是一條特殊規則,不需要匹配內容,表示「前面所有規則都沒命中的流量,統一按這裡指定的策略處理」。它必須是規則清單的最後一行,否則會造成兩個問題:如果漏寫 MATCH,某些配置在沒有命中任何規則時會依核心預設行為處理(不同用戶端預設行為不完全一致,有的直連有的拒絕),行為不可預期;如果 MATCH 沒放在最後,它後面的規則永遠不會被執行,因為 MATCH 本身逢流量必中。

  1. 檢查規則檔案最後一行是否為 MATCH,策略名
  2. 確認 MATCH 後面沒有再接其他規則行,有的話就刪除或前移。
  3. 確認 MATCH 指定的策略組存在且能連通,建議指向國外代理組而不是某個具體節點,以免該節點失效時兜底規則也一併失效。

B-06常見誤寫與漏匹配排查清單

規則不生效或分流結果與預期不一致,大多逃不出以下幾類原因,依序自查通常能定位問題:

現象常見原因排查方法
某網站應走代理卻走了直連DOMAIN-SUFFIX 規則排在 GEOIP 之後,或規則集 behavior 宣告錯誤調整規則順序,檢查規則集快取檔案是否為空
某網站應走直連卻走了代理網域被更泛化的規則提前匹配,例如誤寫了通配範圍過大的 DOMAIN-KEYWORD把範圍更窄的精確規則前移,收窄或刪除過於寬泛的關鍵字規則
新增規則完全沒有效果規則寫在 MATCH 之後,永遠比對不到確認 MATCH 是最後一行,新規則插入到 MATCH 之前
規則集更新後仍是舊結果本地快取未過期,interval 設定過長刪除本地快取檔案並重啟核心,或縮短 interval
整體分流全部失效策略組名稱與 rules 裡引用的名稱拼寫不一致逐條核對 proxy-groups 的 name 欄位與 rules 裡的策略名

其中「策略組名稱拼寫不一致」是最容易被忽略的一類錯誤,因為大多數用戶端載入配置時不會因策略名不存在而直接報錯,而是靜默地把該規則視為無效,表現出來就是「配置看起來沒問題,但分流沒生效」。養成規則改動後用具體網址逐條驗證的習慣,遠比事後排查更省時間。

B-07驗證分流是否按預期生效

寫完規則不要只憑感覺判斷,建議用以下方式逐條驗證:

  • 在用戶端的連線日誌或規則命中記錄裡,存取目標網站後查看這次請求實際命中了哪一條規則、走了哪個策略組,大多數圖形介面用戶端在「日誌」或「連線」面板裡都能看到。
  • 針對中國大陸網站與境外網站各挑兩三個有代表性的網域分別測試,不要只測一個網站就下結論,因為個別網站可能存在獨立的 CDN 特殊情況。
  • 規則集引用類的配置,首次生效前先確認規則集檔案下載成功、本地快取不是空檔案。
建議 規則檔案建議保留清晰的分組註解,把「國內直連」「國外代理」「兜底」分成幾段,方便後續排查時依序快速定位到出問題的區間,而不用從頭逐行看到尾。

按圖施工:下載 Clash 用戶端

規則寫法理清楚之後,配合圖形介面用戶端的日誌面板驗證分流結果,除錯效率更高。

下載用戶端