Clash 規則分流實戰:按網域與 GeoIP 實現精細化流量走向

以中國大陸網站直連、其他地區網站走代理的典型場景為例,講解 DOMAIN-SUFFIX、GEOIP、RULE-SET 等規則類型的寫法、比對順序與優先級,附完整可用的規則片段。

規則分流是 Clash 區別於普通代理工具的核心能力。設定檔裡的 rules 段決定每一條網路請求最終走哪個代理群組,判斷依據可以是網域、IP 歸屬地、行程名稱或連接埠。寫得好的規則集能做到中國大陸網站直連、國外網站走代理、特定服務走專線,全程無需手動切換。本文按實戰順序拆解規則類型、書寫格式與優先級機制,並給出一份可直接套用的規則片段。

DOC-01

規則比對的基本結構

Clash 設定檔裡的每條規則遵循統一格式:

規則類型,比對內容,目標策略

例如:

rules:
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,Proxy

三個欄位分工明確:第一段是規則類型,決定用什麼維度比對;第二段是具體比對值,依類型而變(網域、IP 段、行程名稱等);第三段是命中後交給哪個策略群組或動作,可以是自訂的代理群組名稱,也可以是 DIRECT(直連)、REJECT(拒絕)這類內建動作。

規則從上到下逐條比對,命中第一條就停止,後面的規則不再檢查。這意味著順序本身就是優先級,寫反順序會讓精心設計的規則形同虛設。

DOC-02

DOMAIN 系列:按網域分流

網域類規則是最常用的一類,細分為幾種寫法,比對範圍逐級放寬:

三者的粒度關係是 DOMAIN 最精確、DOMAIN-SUFFIX 涵蓋子網域、DOMAIN-KEYWORD 最寬泛。實際設定裡,DOMAIN-SUFFIX 涵蓋了絕大多數需求,DOMAIN-KEYWORD 通常只用於處理網域結構不規律的服務。

注記

網域規則只能識別網域,無法識別透過 IP 直接存取的連線。如果目標網站沒有走網域解析(例如客戶端內建了固定 IP),需要改用 IP-CIDR 或 GEOIP 規則才能命中。

DOC-03

GEOIP:按 IP 歸屬地判斷

GEOIP 規則依據目標 IP 所屬的國家或地區代碼進行比對,是實現「中國大陸直連、國外代理」這類整體策略的關鍵工具。寫法範例:

rules:
  - GEOIP,CN,DIRECT

這條規則的含義是:任何解析結果落在中國大陸 IP 段的連線,一律直連,不經過代理。GEOIP 規則通常放在整條規則清單的靠後位置,作為網域規則未能涵蓋的補充判斷──先用 DOMAIN-SUFFIX 精確處理已知站點,再用 GEOIP 兜底處理其餘按 IP 歸屬地就能正確分類的流量。

GEOIP 規則依賴內建或外部載入的 IP 地理資料庫,mihomo 核心對該資料庫的更新機制與比對效能做了優化,判斷速度快於早期版本。使用時注意 IP 資料庫需要保持更新,否則可能出現歸屬地判斷滯後的情況,尤其是新分配的 IP 段。

DOC-04

IP-CIDR 與 RULE-SET:更精細或更批量的比對

IP-CIDR 用於比對特定 IP 段,格式為 CIDR 網段表示法:

rules:
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT

這類規則常用於內網位址段直連,避免區域網路存取被錯誤地送進代理通道。IPv6 場景對應寫法為 IP-CIDR6

RULE-SET 則是引用外部規則集檔案,把大量網域或 IP 規則打包成一個檔案,設定裡只需一行引用:

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

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,direct,DIRECT
  - RULE-SET,proxy,Proxy

RULE-SET 的價值在於免去手動維護成百上千條網域規則的工作,規則集作者更新上游清單後,客戶端按 interval 設定的週期自動拉取最新內容。behavior 欄位說明規則集內容的類型:domain 表示網域清單,ipcidr 表示 IP 段清單,classical 表示混合了完整規則格式的清單。三種行為對應的規則集檔案內部格式不同,引用時需要與實際檔案類型一致,否則會解析失敗。

DOC-05

完整規則片段:大陸直連 + 海外代理場景

以下是一份貼合「中國大陸網站直連、其他地區網站走代理」這一典型場景的規則片段,規則順序已按比對優先級排列,可直接套用並按需增刪:

rules:
  # 區域網路與內網位址,始終直連
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT

  # 廣告與追蹤網域,直接拒絕
  - RULE-SET,reject,REJECT

  # 中國大陸常用站點,精確直連
  - DOMAIN-SUFFIX,baidu.com,DIRECT
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,taobao.com,DIRECT
  - DOMAIN-SUFFIX,jd.com,DIRECT
  - DOMAIN-SUFFIX,bilibili.com,DIRECT

  # 海外常見站點,走代理群組
  - DOMAIN-SUFFIX,google.com,Proxy
  - DOMAIN-SUFFIX,youtube.com,Proxy
  - DOMAIN-SUFFIX,github.com,Proxy
  - DOMAIN-SUFFIX,twitter.com,Proxy

  # 引用外部維護的中國大陸網域規則集,批量直連
  - RULE-SET,direct,DIRECT

  # 引用外部維護的代理網域規則集
  - RULE-SET,proxy,Proxy

  # 按 IP 歸屬地兜底:中國大陸直連
  - GEOIP,CN,DIRECT

  # 以上均未命中,統一交給代理群組
  - MATCH,Proxy

這份片段體現了規則設計的通用思路:先處理特例(內網、廣告封鎖),再處理已知的高頻網域,然後交給規則集批量涵蓋長尾網域,最後用 GEOIP 和 MATCH 兜底,確保任何未被前面規則命中的流量都有明確去向,不會因為規則清單不完整而連線失敗。

DOC-06

優先級機制與常見誤區

理解優先級要牢記兩點:

  1. 規則按書寫順序從上到下逐條比對,第一條命中的規則生效,後續規則不再參與判斷。
  2. 範圍越寬的規則類型放得越靠前,越容易「搶先」命中原本該由後面精確規則處理的流量,造成分流結果與預期不符。

常見的排序錯誤包括:把 DOMAIN-KEYWORD 放在規則清單最前面,導致大量非目標網域被誤傷;把 GEOIP,CN,DIRECT 放在海外網域規則之前,導致某些透過 CDN 分發、IP 段落在中國大陸但實際需要代理存取的網域被錯誤直連;或者忘記在結尾加 MATCH 兜底規則,導致未命中任何規則的連線行為不確定。

除錯規則時,建議使用客戶端內建的連線紀錄或規則命中查看功能,逐條核對某個具體網域實際比對到了哪條規則,再據此調整順序,比憑經驗反覆猜測效率更高。

提醒

規則集的行為類型(domain/ipcidr/classical)必須與規則集檔案的實際內容格式一致。混用會導致該規則集整體解析失敗,進而讓依賴它的所有網域判斷失效,建議更換規則集來源時先核對文件說明的行為類型。

DOC-07

與代理群組搭配使用

規則最終指向的目標可以是代理群組名稱,而不必是單個節點。搭配 select(手動選擇)、url-test(自動測速切換)、fallback(故障轉移)等代理群組類型,可以讓規則分流與節點選擇策略徹底解耦:規則只負責「這類流量該走代理還是直連」,具體走哪個節點交給代理群組自行決策。這種分層設計是 Clash 設定能夠同時兼顧靈活性與可維護性的關鍵。

proxy-groups:
  - name: Proxy
    type: url-test
    proxies:
      - 節點A
      - 節點B
    url: "http://www.gstatic.com/generate_204"
    interval: 300

如上例所示,規則裡寫的 Proxy 對應這裡定義的代理群組,組內節點由 url-test 類型自動測速並選出延遲最低的一個,規則檔案本身不需要關心具體節點資訊,後續更換訂閱或增刪節點也不必改動規則段。

取得 Clash 客戶端

規則分流需要搭配支援完整規則語法與 RULE-SET 的客戶端才能生效,建議從下載頁取得最新版本並按教學完成基礎設定。

下載Clash