Clash 規則分流實戰:中國大陸直連與海外走代理的分組寫法

以最常見的地區分流情境為例,說明 proxy-groups 與 rules 的搭配方式,提供 DOMAIN-SUFFIX、GEOIP 等規則的實際寫法與優先順序,並示範如何為串流媒體單獨指定策略群組。

為什麼要做規則分流

規則分流的核心目的很簡單:讓存取中國大陸內網站的流量走本地直連,讓存取海外站點的流量走代理節點,兩條路徑互不干擾。直連的好處是延遲低、不佔用節點頻寬;代理節點的好處是能夠存取被限制或速度較差的海外資源。如果不做分流,全域模式下所有流量都走代理,不僅存取本地網站會繞一圈增加延遲,還會佔用節點上行頻寬,遇到高峰期服務商限速時體驗更差。

要實現分流,需要理解 Clash(及其核心實作 Clash Meta / mihomo)設定檔裡兩個互相配合的部分:proxy-groups 定義「有哪些可選的出口策略」,rules 定義「什麼樣的流量應該走哪個策略」。規則本身不選節點,策略群組才選節點;規則只是把流量指派給某個策略群組,再由策略群組內部的選擇邏輯決定具體走哪條線路。這個分層關係是理解後面所有設定的前提。

proxy-groups 怎麼寫

一個策略群組本質上是若干代理節點(或其他策略群組)的集合,加上一種選擇方式。常用的 type 有三種:

  • select:手動選擇,客戶端介面上會顯示一個下拉選單,使用者點哪個就走哪個,不自動切換。
  • url-test:自動測速,按 urlinterval 定期探測組內節點延遲,自動選用最快的一個。
  • fallback:故障轉移,按節點清單順序嘗試,目前節點不可用時自動切到下一個。

一個典型的地區分流情境至少需要三個策略群組:一個給「海外流量」用的自動測速組,一個固定的 DIRECT(直連,核心內建,不用自己定義節點),再加一個兜底的手動選擇組。範例:

proxy-groups:
  - name: 節點選擇
    type: select
    proxies:
      - 自動選優
      - DIRECT

  - name: 自動選優
    type: url-test
    proxies:
      - HK-01
      - HK-02
      - SG-01
      - JP-01
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50

  - name: 本地直連
    type: select
    proxies:
      - DIRECT
      - 節點選擇

其中 HK-01 等名稱需要與訂閱解析出來的實際節點名一致,通常在客戶端匯入訂閱後可以直接在節點清單裡看到真實名稱,再據此調整策略群組裡的 proxies 欄位。url 是測速請求的目標位址,interval 是測速間隔(單位秒),tolerance 是切換容差,延遲差在容差範圍內不會頻繁切換節點。

rules 規則類型與比對順序

規則是按從上到下的順序逐條比對的,一旦某條規則比對成功就立即生效,後面的規則不再檢查。這意味著規則的排列順序直接決定分流結果,寫反順序是最常見的翻車原因。常用的規則類型有:

  • DOMAIN-SUFFIX:按網域後綴比對,例如 DOMAIN-SUFFIX,taobao.com 比對該網域及其所有子網域。
  • DOMAIN-KEYWORD:按網域關鍵字比對,寫法更寬鬆,容易誤傷,建議只在明確知道關鍵字唯一性時使用。
  • DOMAIN:精確比對單一網域,不含子網域。
  • GEOIP:按目標 IP 所屬國家/地區比對,例如 GEOIP,CN,DIRECT 表示目標 IP 判定為中國大陸時直連。GEOIP 比對依賴內建或外部的 IP 地理資料庫,資料庫版本較舊時可能出現誤判,建議定期讓客戶端更新地理資料庫檔案。
  • IP-CIDR / IP-CIDR6:按 IP 段比對,常用於內部網路位址、區域網路位址的直連處理。
  • MATCH:兜底規則,放在規則清單最後一行,比對所有未被前面規則命中的流量。

規則的寫法統一為 類型,比對內容,目標策略 三段式,用逗號分隔。一份完整的規則清單大致結構如下:

rules:
  - DOMAIN-SUFFIX,cn,DIRECT
  - DOMAIN-KEYWORD,baidu,DIRECT
  - DOMAIN-SUFFIX,taobao.com,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - GEOIP,CN,本地直連
  - MATCH,節點選擇

這份規則的讀法是:先排除掉明確屬於中國大陸的網域和區域網路位址,把它們交給 DIRECT;剩下的 IP 如果判定歸屬中國大陸,交給「本地直連」策略群組(內部還是走 DIRECT,但留了手動切換的餘地);最後所有沒被前面命中的流量,統一交給「節點選擇」這個自動測速組去處理海外存取。

順序錯誤是最常見的坑:如果把 MATCH,節點選擇 放在中間,後面所有針對中國大陸網域的規則都不會再被檢查,因為 MATCH 會攔截掉它之後遇到的每一條流量判斷。MATCH 永遠只能放在規則清單最後一行。

給串流媒體單獨建一個策略群組

很多使用者希望串流媒體走固定的某幾個節點(例如專門標註解鎖的節點),而不是跟著「自動選優」組一起被測速切換,這樣可以避免看影片時突然切換節點導致卡頓重新緩衝。做法是新增一個專用策略群組,並在規則裡把對應網域單獨指派過去,同時要把這條規則寫在通用規則之前:

proxy-groups:
  - name: 串流媒體
    type: select
    proxies:
      - HK-01
      - SG-01
      - 自動選優

rules:
  - DOMAIN-SUFFIX,netflix.com,串流媒體
  - DOMAIN-SUFFIX,nflxvideo.net,串流媒體
  - DOMAIN-SUFFIX,disneyplus.com,串流媒體
  - DOMAIN-SUFFIX,cn,DIRECT
  - GEOIP,CN,本地直連
  - MATCH,節點選擇

這裡的關鍵點是:串流媒體相關的網域規則必須放在 MATCH 之前,並且最好放在其他通用規則之前,避免被更靠前的寬泛規則(例如某條 DOMAIN-KEYWORD)提前攔截。規則清單裡越具體、越需要精確控制的條目,越應該往前放;越籠統的兜底規則,越應該往後放。

如果同時使用規則集(rule-provider)形式的網域清單來維護串流媒體網域,原理是一樣的,只是把逐條 DOMAIN-SUFFIX 換成了引用一個遠端或本地維護的規則集檔案,寫法上多了一個 rule-providers 欄位和對應的 RULE-SET 規則類型,但比對順序的邏輯完全不變。

規則模式與全域模式的差異

客戶端介面通常提供三種運作模式的切換,理解它們和上面設定的關係很重要:

  • 規則模式(Rule):嚴格按照 rules 清單逐條比對,是本文講的預設運作方式。
  • 全域模式(Global):忽略所有 rules,所有流量統一走某一個手動選定的節點,適合臨時測試某個節點是否可用,不適合長期使用。
  • 直連模式(Direct):忽略所有 rules,所有流量直連,不經過任何代理節點,適合臨時排查代理是否影響某個連線問題。

日常使用應固定在規則模式,只有排查問題時才短暫切到全域或直連模式做對照測試,測試完記得切回來,否則規則分流的效果不會生效。

寫完規則之後如何自查

  1. 儲存設定後,在客戶端裡選擇重新載入設定(不同客戶端叫法可能是「重載」或「重新整理」),避免因為編輯器快取導致規則沒有真正生效。
  2. 開啟客戶端自帶的連線紀錄或流量面板,存取一個已知的中國大陸網站,確認命中的規則和最終策略是 DIRECT。
  3. 再存取一個已知的海外網站,確認命中的規則落在預期的策略群組上,且該策略群組目前選中的節點狀態正常。
  4. 如果發現某個網域走錯了策略,回頭檢查這條網域規則是否被排在它前面的某條更寬泛規則(尤其是 DOMAIN-KEYWORD)提前攔截。
  5. GEOIP 判斷異常時,檢查客戶端裡地理資料庫檔案的更新時間,過舊的資料庫會導致部分 IP 歸屬判斷不準確。

規則分流不是一次寫完就不用管的東西,隨著存取的網站變化、節點的增減,策略群組的節點清單和部分網域規則可能需要陸續微調。養成先看紀錄再改規則的習慣,比憑感覺猜測更容易定位問題所在。

如果不想手寫全部規則,大多數服務商或社群維護的規則集(例如按中國大陸直連、區域網路直連、常見服務分類整理好的規則檔案)可以透過 rule-providers 引用,減少手動維護的網域條目數量,同時仍然保留自訂規則優先命中的能力。

設定好分流規則,搭配客戶端一起使用

取得 Clash 客戶端並匯入設定,即可讓上文的策略群組與規則實際生效;如果還不熟悉基本操作,可以先看快速上手指南。

下載 Clash