Clash 規則分流設定實戰:國內外分流情境的規則寫法與比對順序
以國內外分流為目標,逐條講解規則類型、比對順序與策略組搭配,並附上一段可直接套用的設定範例與分流結果驗證方法。
分流目標:境內直連,境外走代理
Clash 的核心運作方式是以規則為基礎進行轉發:每一個進入 Clash 的連線,都會帶著目標位址依序與規則清單比對,命中哪一條規則,就走那條規則指定的出口。所謂國內外分流,本質上就是把「哪些流量直連、哪些流量走代理」轉換成一份順序正確的規則清單。
規則的出口只有三類:DIRECT 表示直連,目標位址由本機網路直接連線;REJECT 表示直接拒絕,常用於封鎖;第三類則是代理節點或策略組的名稱,表示交給代理通道轉發。
國內外分流要達成的效果很具體:境內站點直連,延遲低、不佔用節點流量;境外站點走代理出口;明確不想放行的請求直接拒絕。要做到這件事只需要三樣東西——一份涵蓋境內外位址的規則、一個指向節點的策略組,以及正確的排列順序。以下逐一拆解。
規則類型:每條規則在比對什麼
一條規則的寫法是「類型,參數,出口」,三段以英文逗號分隔。類型決定這條規則拿什麼去和請求比對,常見類型如下表。
| 規則類型 | 比對對象 | 寫法範例 | 說明 |
|---|---|---|---|
DOMAIN | 精確網域 | DOMAIN,example.com,PROXY | 只比對該網域本身,不含子網域 |
DOMAIN-SUFFIX | 網域後綴 | DOMAIN-SUFFIX,example.com,PROXY | 比對主網域與所有子網域,最常用的網域寫法 |
DOMAIN-KEYWORD | 網域關鍵字 | DOMAIN-KEYWORD,example,PROXY | 網域包含該字串即命中,誤判範圍大,慎用 |
GEOSITE | 網域分類集合 | GEOSITE,cn,DIRECT | 一條就能涵蓋整類網域,需 mihomo 核心 |
IP-CIDR | 目標 IP 段 | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve | 按網段比對,適合內網與固定位址段 |
GEOIP | 目標 IP 所屬地 | GEOIP,CN,DIRECT | 查 IP 資料庫判斷國家地區,作為分流的最終判斷 |
DST-PORT | 目標埠 | DST-PORT,853,DIRECT | 按埠分流,適合單埠服務 |
PROCESS-NAME | 發起連線的程序名稱 | PROCESS-NAME,chrome.exe,PROXY | 按程序分流,桌面平台可用 |
MATCH | 所有請求 | MATCH,PROXY | 規則清單末尾的最終出口,必須放在最後 |
選型的直覺很簡單:能用網域後綴就不用關鍵字,能用 GEOSITE 分類就不用堆幾百條 DOMAIN-SUFFIX,IP 類規則只放在網域規則之後做所屬地的最終判斷。DOMAIN-KEYWORD 最容易誤判,例如一個短關鍵字可能同時命中境內站點的子網域,除非目標非常明確,否則不建議放進國內外分流的主清單。
核心差異
GEOSITE 屬於 Clash Meta / mihomo 核心的功能,需依賴對應的 geodata 資料檔;若是原版 Clash 環境,請改用 DOMAIN-SUFFIX、規則集或 GEOIP 組合。切換核心前,先到用戶端的關於頁面確認核心名稱,再決定規則寫法。
比對順序:第一個命中即停止
Clash 會依 rules 清單從上到下比對,命中第一條就停止,後面的規則不再參與判斷。因此順序不只是排版習慣,而是直接決定分流結果。國內外分流的穩定順序是:本機與內網直連 → 明確要拒絕的目標 → 境內網域直連 → 境內 IP 直連 → 其餘全部走代理。
- 先放行本機、區域網路與保留位址段,避免路由器、NAS、印表機這類流量被送進代理。
- 接著放精確的封鎖規則,例如已知的追蹤網域或不想放行的服務;封鎖規則越靠前,越少觸發後續解析。
- 然後放境內網域集合,
GEOSITE,cn一條就能頂替一大批網域;沒有 GEOSITE 的環境,可用持續維護中的網域規則集替代。 - 接著放
GEOIP,CN,DIRECT,用來接住網域集合沒涵蓋到、但解析結果落在中國大陸的目標。 - 最後只留一條
MATCH,PROXY。所有沒有命中境內規則的請求,一律進入代理策略組。
no-resolve 只影響 IP 類規則:加上它,Clash 就不會為了比對這條規則而主動把網域解析成 IP。常見寫法是內網網段一律加上 no-resolve;GEOIP,CN 是否要加 no-resolve,取決於你的網域規則涵蓋率。當網域集合足夠完整時,可寫成 GEOIP,CN,DIRECT,no-resolve 以減少額外解析;若網域集合較舊,保留解析能力會更穩,但要搭配正確的 DNS 走向,避免解析本身繞過代理通道。
順序踩雷
把 MATCH,PROXY 誤放到清單中段,會讓它之後的境內直連規則全數失效;把 GEOIP,CN 放在 GEOSITE,cn 之前,則會讓大量本可依網域直連的請求先做一次 IP 所屬地判斷。症狀都一樣:境內站點被送進節點,延遲和節點流量同時上升。
策略組搭配:出口只對外暴露一個名稱
規則裡不建議直接寫死某個節點名稱,而是寫策略組名稱。這樣一來,換節點、測速或加備用出口時,規則清單完全不用動。國內外分流最少需要兩個組:一個手動選擇的 PROXY,一個自動測速的 AUTO。
| 策略組類型 | 行為 | 適用位置 |
|---|---|---|
select | 在用戶端手動選擇出口 | 主出口組,適合放最終決策 |
url-test | 定期測速,自動切到延遲最低的節點 | 嵌入 select 組,作為自動選項 |
fallback | 依順序偵測,故障時切到下一個可用節點 | 更看重可用性而非最低延遲 |
load-balance | 依策略把連線分攤到多個節點 | 多線負載,不適合作為預設排錯入口 |
建議的結構是:PROXY 為 select,候選項放入 AUTO、若干節點與 DIRECT;AUTO 則為 url-test,只放真正可用的代理節點。規則統一指向 PROXY,用戶端切換自動或手動節點時,只改組內選擇,不動規則。
可直接套用的設定範例
以下是一份最小可用的骨架設定,重點看 proxy-groups 與 rules 的對應關係。節點皆為示意用假值,只用來展示欄位位置;若是訂閱情境,節點與組別請交給訂閱轉換或覆寫機制維護,手動修改轉換結果會在下次更新時被覆蓋。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
proxies:
- name: "示例節點-請勿使用"
type: ss
server: node1.example.invalid
port: 443
cipher: aes-128-gcm
password: "demo-pass-000"
proxy-groups:
- name: PROXY
type: select
proxies:
- AUTO
- 示例節點-請勿使用
- DIRECT
- name: AUTO
type: url-test
proxies:
- 示例節點-請勿使用
url: http://example.invalid/generate_204
interval: 300
tolerance: 50
rules:
- DOMAIN-SUFFIX,localhost,DIRECT
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,169.254.0.0/16,DIRECT,no-resolve
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
若用戶端使用訂閱,優先尋找「覆寫 / Mixin / 設定補丁」這類入口,把上面 rules 的順序邏輯套進訂閱產生的規則之前或之後;不要直接編輯用戶端每次更新都會重建的成品設定檔。需要封鎖時,在 GEOSITE,cn 之前插入獨立的 REJECT 規則或規則集,保持境內直連規則仍然連貫。
判定標準
這份設定成功的標誌不是「能上網」,而是在連線面板裡境內目標命中 GEOSITE,cn 或 GEOIP,CN 且出口為 DIRECT;境外目標只命中 MATCH,出口進入 PROXY 組內目前選中的節點。
分流結果驗證方法
驗證分三層進行,順序不要顛倒。第一層看模式:確認用戶端處於規則模式,系統代理或 TUN 已接管流量;瀏覽器擴充功能代理、應用內建代理都會繞過 Clash,要先排除這些情況。第二層看命中:打開用戶端的連線或日誌頁面,分別發起一次境內請求與一次境外請求,核對每條連線右側顯示的規則鏈與出口,而不是憑網頁開啟速度猜測。第三層看指令列:用明確指定的代理發送請求,確認流量確實從 Clash 埠進入。
curl -x http://127.0.0.1:7890 -I https://你的目標網域/
指令列只能證明請求進入了 Clash;至於分到哪一邊,仍要回到連線面板查看 rule 與 chains 欄位。境內請求應顯示直連鏈,境外請求應顯示節點鏈。若境外請求顯示 DIRECT,多半是有更靠前的 DOMAIN-SUFFIX 或關鍵字規則誤命中;若境內請求進了節點,優先檢查 MATCH 是否位置過前、GEOSITE 資料是否缺失,或用戶端是否實際執行原版核心。
開啟 TUN 或增強 DNS 模式時,還要確認系統流量真的進入了 Clash 虛擬網卡;否則規則寫得再對,也只對手動設定代理的應用程式生效。排障時可先關掉 TUN,用系統代理驗證規則,再恢復 TUN,這樣能把「規則問題」和「接管問題」分開判斷。
常見錯誤清單
- 規則順序顛倒:把最終判斷規則放在前面,導致後面所有精細規則失效;儲存前只要看一下
rules的第一screen和最後一screen,就能擋掉大部分事故。 - 關鍵字誤判:
DOMAIN-KEYWORD命中範圍過廣,境內站點被帶進代理;改成DOMAIN-SUFFIX或交給 GEOSITE 分類處理。 - 節點名稱寫進規則:訂閱更新後節點改名,規則直接失效;規則應該只引用策略組名稱。
- GEOIP 單獨扛起分流:只靠
GEOIP,CN會漏掉 CDN 與海外映像站,網域集合與 IP 所屬地要一起搭配使用。 - 手動修改訂閱成品:更新後會被覆蓋,表現為設定「自己變回去」;應改用覆寫入口維護自訂區段。
- 忽略 IPv6:本機有可用 IPv6 但設定關閉或漏配時,部分請求會直接走系統網路;要麼在核心與系統端一致啟用並補上 IP-CIDR6 規則,要麼明確關閉它。
把規則當作里程碑來維護:每條只標示一個去向,順序只依「由具體到最終判斷」排列。境內直連、境外代理、異常可封鎖,三件事各就各位,之後換節點、換用戶端、加規則集都只是替換局部,不必重寫整份設定。
下載 Clash 用戶端
規則分流的前提是用戶端先接管流量。前往下載中心依平台選擇用戶端,再回到教學文章完成系統代理或 TUN 接管設定。