Clash 規則分流實戰設定:國內外網站自動分流方案
以國內外分流情境為例,示範如何用規則集與策略組架設自動分流:中國大陸站點直連、境外服務走代理、廣告與追蹤網域直接拒絕。全文語法以 mihomo(Clash Meta)核心為準。
一、分流要解決什麼問題
不對流量加以區分時,Clash 只有兩種粗放的運作方式。全域代理(global)把所有連線都交給節點:存取中國大陸站點時繞道境外,延遲明顯拉高;影音與音樂服務因區域版權限制拒絕境外 IP;銀行、政府類站點對境外登入觸發風控。全域直連(direct)則相反,境外服務完全無法連上。
規則分流(rule)是第三種方式:核心依據設定檔中的 rules 清單,對每一個新連線的目標位址逐條判斷去向——中國大陸網域與 IP 直連,境外服務交給代理節點,已知的廣告與追蹤網域直接拒絕。設定一次即可長期生效,日常使用無需再手動切換模式。本文以一份可直接套用的設定為例,完整示範這套方案的架設過程。
二、規則比對的基本原理
rules 是一份有順序的清單。每個新連線進入核心時,從第一條規則開始往下比對,命中第一條符合條件的規則即停止,依該規則指定的出站方式處理;全部未命中時,由清單最後的 MATCH 規則兜底。由此可得兩條推論:
- 順序即優先權。越具體、越需要優先判斷的規則放越前面;覆蓋範圍廣的規則(如 GEOIP,CN)放後面;MATCH 永遠放在最後。
- 網域規則先於 IP 規則。連線帶有網域時,核心先用網域比對 DOMAIN、DOMAIN-SUFFIX、RULE-SET 等規則;全部未命中才解析出 IP,再繼續比對 IP-CIDR、GEOIP。為 IP 類規則加上 no-resolve 參數,可讓核心在尚未解析的階段直接跳過該規則,避免為了判斷規則而多發一次 DNS 查詢。
常用規則類型如下表:
| 規則類型 | 寫法範例 | 說明 |
|---|---|---|
DOMAIN | DOMAIN,www.example.com,節點選擇 | 精確比對單一網域 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,google.com,節點選擇 | 比對該網域及其所有子網域 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,節點選擇 | 網域含有關鍵字即命中 |
RULE-SET | RULE-SET,proxy,節點選擇 | 引用 rule-providers 宣告的規則集 |
GEOSITE | GEOSITE,cn,DIRECT | 依網域分類庫比對(mihomo 專屬) |
IP-CIDR | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 比對 IP 位址範圍 |
GEOIP | GEOIP,CN,DIRECT | 依 IP 所屬地區比對 |
MATCH | MATCH,節點選擇 | 兜底,比對剩下的所有連線 |
RULE-SET 與 rule-providers 的寫法在原版 Clash Premium 中同樣成立;GEOSITE 為 mihomo 專屬,使用原版核心時須以 RULE-SET 規則集取代。
三、規劃策略組
分流方案中,每個連線只有三種去向:直連 DIRECT、拒絕 REJECT、交給某個代理節點。代理端通常整理成三個策略組:
- 節點選擇(select 類型):列出所有可用節點,手動指定出口,作為多數規則的預設出站。
- 自動選擇(url-test 類型):定時對組內節點測速,自動切換到延遲最低者;把它加進「節點選擇」的候選清單中,需要時可一鍵切換。
- 廣告封鎖(select 類型):候選只有 REJECT 與 DIRECT。預設指向 REJECT;排查「某網站打不開是否為誤判」時,暫時切到 DIRECT 即可比對驗證。
proxy-groups:
- name: 節點選擇
type: select
proxies:
- 自動選擇
- 香港節點
- 日本節點
- DIRECT
- name: 自動選擇
type: url-test
proxies:
- 香港節點
- 日本節點
url: http://www.gstatic.com/generate_204
interval: 300
- name: 廣告封鎖
type: select
proxies:
- REJECT
- DIRECT
策略組的名稱會原樣出現在 rules 裡,改名時兩處必須同步,否則規則會指向一個不存在的出站。
四、引入規則集
需要覆蓋的網域數以萬計,手寫規則不切實際。社群維護的規則集依用途整理成清單——廣告網域、中國大陸站點、境外常用服務、中國大陸 IP 範圍——由核心定時下載、本地快取。宣告方式是在設定檔頂層加入 rule-providers:
rule-providers:
reject:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
各欄位含義:
- type:http 表示從遠端位址下載;file 表示讀取本地檔案。
- behavior:classical 表示清單由經典規則(DOMAIN、DOMAIN-SUFFIX 等)組成;domain 表示純網域清單;ipcidr 表示純 IP 範圍清單。下載來源是哪種格式,這裡就填哪種,填錯會導致規則集載入失敗。
- path:本地快取路徑。
- interval:更新間隔,單位為秒;86400 即每天更新一次。
宣告之後,在 rules 裡以 RULE-SET,<名稱>,<出站> 引用。mihomo 使用者還有另一條路:核心內建 GEOSITE 與 GEOIP 資料庫,GEOSITE,cn、GEOSITE,category-ads-all、GEOIP,CN 等寫法無需 rule-providers 即可使用,代價是分類粒度由資料庫維護方決定。
本文範例使用 Loyalsoldier/clash-rules 專案的發布檔案,該專案依用途拆分的 reject(廣告)、direct(中國大陸)、proxy(境外)、cncidr(中國大陸 IP 範圍)等清單更新頻繁、引用廣泛;讀者也可換成任何可信來源,寫法不變。
五、完整設定範例
把上述部件拼起來,得到一份完整的國內外分流設定:
# 基本設定
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
# 內建 DNS:網域規則未命中時,解析結果用於 GEOIP 判斷
dns:
enable: true
ipv6: false
default-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
# 策略組(見第三節)
proxy-groups:
- name: 節點選擇
type: select
proxies:
- 自動選擇
- 香港節點
- 日本節點
- DIRECT
- name: 自動選擇
type: url-test
proxies:
- 香港節點
- 日本節點
url: http://www.gstatic.com/generate_204
interval: 300
- name: 廣告封鎖
type: select
proxies:
- REJECT
- DIRECT
# 遠端規則集(見第四節)
rule-providers:
reject:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
direct:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
proxy:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
# 分流規則:自上而下,命中即停
rules:
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- RULE-SET,reject,廣告封鎖
- RULE-SET,direct,DIRECT
- RULE-SET,proxy,節點選擇
- GEOIP,CN,DIRECT
- MATCH,節點選擇
規則段落的排列邏輯:
- 本機與區域網路位址直連,加上 no-resolve 避免不必要的解析。
- 廣告與追蹤網域交給「廣告封鎖」組,預設 REJECT。放在最前面,確保後續規則不會把它們放行。
- 中國大陸網域直連。
- 境外常用服務走「節點選擇」。
- 網域規則全部未命中的連線,解析出 IP 後依 GEOIP 判斷是否屬於中國大陸,是則直連。
- MATCH 兜底:其餘一律走代理。寧可讓少數中國大陸冷門站點繞路,也不讓境外流量漏成直連。
注意:proxies 一節(節點清單)中必須存在名為「香港節點」「日本節點」的節點,否則策略組引用會落空、設定載入失敗;實際使用時請換成自己訂閱裡的節點名稱。
六、驗證與常見錯誤
驗證分流是否生效
- 打開用戶端的連線面板(或 metacubexd、zashboard 等外部面板),每條連線都會標註命中的規則與出站鏈,例如
RULE-SET(direct) → DIRECT。 - 分別存取一個中國大陸站點、一個境外站點、一個已知廣告網域,對照面板確認三者各歸其位。
- 存取境外站點時查詢出口 IP,顯示的應是節點所在地,而非本機寬頻 IP。
常見錯誤
- 規則順序顛倒。GEOIP,CN 放得太靠前,會把本應走代理的境外子網域提前攔截;MATCH 寫在中間,其後的規則永遠不會生效。
- 規則集下載失敗。rule-providers 的位址失效時,對應 RULE-SET 規則整體落空,日誌中可見錯誤訊息,須更換鏡像位址或改用 file 類型的本地規則集。
- DNS 設定缺失。網域規則全部未命中時,核心依賴解析結果做 GEOIP 判斷;若系統 DNS 遭污染,境外網域可能解出錯誤 IP 而被誤判為直連。啟用核心內建 DNS(範例已含)可避免此問題。
- 節點名稱不一致。proxy-groups 引用的節點名稱必須與 proxies 中的 name 逐字一致,包括空格與全半角差異。
機場訂閱檔通常已內建一套分流規則,直接編輯訂閱檔會在下次更新時被覆蓋。正確做法是使用用戶端的覆寫(Merge / Mixin)功能,或透過訂閱轉換服務在訂閱基礎上追加自訂規則與規則集。