ClashX 規則優先級實戰:DOMAIN-SUFFIX、GEOIP、MATCH 如何避免衝突

多數問題不是節點故障,而是規則被上方條件提前命中。ClashX 採自上而下匹配,命中即停止,因此順序本身就是策略邏輯。

本文會把規則優先級拆成可執行模型、模板與排障流程,讓你在維持可讀性的同時,也能得到可預測的分流結果。

為什麼規則會看起來隨機失效

多數問題不是節點故障,而是規則被上方條件提前命中。ClashX 採自上而下匹配,命中即停止,因此順序本身就是策略邏輯。

若將 MATCH、大範圍 GEOIP 或過寬 DOMAIN-SUFFIX 放在前面,下方精準規則就不會生效。

🧠
First Match Wins 是唯一規則

每次請求只會命中第一條規則。後面規則再正確,只要前面先命中,就等於不存在。這就是為什麼「順序」要和「內容」一起評審。

常見症狀

  • 流量行為忽快忽慢,看似節點波動。
  • 日誌永遠落在 GEOIP 或 MATCH,精準規則沒出現。
  • 首頁可開,登入/播放/下載請求卻失敗。
  • 改一條看似無關的規則,另一個系統突然異常。
⚠️
最常見錯誤:MATCH 放太前

MATCH 應只保留一條,且必須最後。放在中段會直接終止後續匹配。

規則優先級的核心模型

建議採漏斗模型:精準條件在前、兜底條件在後。常用順序:DOMAINDOMAIN-SUFFIXDOMAIN-KEYWORDIP-CIDRGEOIPMATCH

  • 精準域名規則可預測性最高
  • 關鍵業務域名先寫,避免被寬規則蓋掉
  • 兜底規則只留一條並放最後
規則類型 建議優先級 典型用途 風險提示
DOMAIN 1(最高) 登入回調、支付介面、核心 API 需持續維護精準清單
DOMAIN-SUFFIX 2 整站或服務族群分流 後綴過寬容易誤傷
DOMAIN-KEYWORD 3 短期過渡規則 誤判機率最高
IP-CIDR 4 內網、辦公網段、固定出口 注意 no-resolve 使用
GEOIP 5 國別層級兜底 CDN/Anycast 可能偏差
MATCH 6(最後) 最終兜底 不可提前
🧩
每層規則的職責

DOMAIN 負責精準鎖定,DOMAIN-SUFFIX 負責服務族群,DOMAIN-KEYWORD 作為過渡,IP-CIDR 處理網段,GEOIP 做大範圍兜底,MATCH 防止漏網流量。

DOMAIN
最快且可預測
DOMAIN-SUFFIX
快、覆蓋廣
GEOIP
中後段兜底
MATCH
最終收口

漏斗模型(由上到下)

第一層:關鍵業務精準域名
第二層:服務域名後綴規則
第三層:關鍵字過渡規則
第四層:網段與地理分流
第五層:MATCH 最後兜底

常見衝突情境與修復

情境 1:內網系統走錯線路。通常是被上方寬規則覆蓋,需把內網白名單前置。

情境 2:影音服務不穩。建議拆分 API 與內容域名,避免單一關鍵字規則過寬。

情境 A:辦公系統走錯線路

🧨
問題配置

SSO 網域在海外、主站在本地;若 GEOIP 前置,登入回調可能走錯策略,造成偶發失敗。

rules:
  - GEOIP,CN,DIRECT
  - DOMAIN-SUFFIX,corp.example.com,DIRECT
  - DOMAIN,sso.corp-auth.com,PROXY
  - MATCH,PROXY
修復方式

先放精準登入與 API 規則,再放服務後綴,最後才是 GEOIP 與 MATCH。

rules:
  - DOMAIN,sso.corp-auth.com,PROXY
  - DOMAIN,api.corp.example.com,DIRECT
  - DOMAIN-SUFFIX,corp.example.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

情境 B:串流識別失敗

🎬
問題配置

只寫一條關鍵字規則會漏掉鑑權、媒體與靜態資源網域,導致可進站但播放異常。

rules:
  - DOMAIN-KEYWORD,netflix,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,DIRECT
修復方式

拆分 API、媒體與主域後綴規則,再交給 GEOIP 與 MATCH 收尾。

rules:
  - DOMAIN,api.netflix.com,PROXY_STREAM
  - DOMAIN-SUFFIX,nflxvideo.net,PROXY_STREAM
  - DOMAIN-SUFFIX,netflix.com,PROXY_STREAM
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

情境 C:國內 CDN 被誤代理

📦
問題配置

主站需要代理,但靜態資源由國內 CDN 提供。若用寬關鍵字統一代理,會造成回源繞路與延遲。

rules:
  - DOMAIN-KEYWORD,example,PROXY
  - MATCH,DIRECT
修復方式

把主站和 CDN 域名拆開:主站代理,CDN 直連,避免誤導流量。

rules:
  - DOMAIN,app.example.com,PROXY
  - DOMAIN-SUFFIX,static.examplecdn.cn,DIRECT
  - DOMAIN-SUFFIX,example.com,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

情境 D:UDP 遊戲不通

🎮
問題配置

遊戲流量被送到不穩定或不支援 UDP 的策略組,導致登入成功但對戰掉線。

rules:
  - DOMAIN-SUFFIX,game.example.com,PROXY
  - MATCH,PROXY
修復方式

為遊戲域名與遊戲網段建立獨立 UDP 策略組,並保留原有兜底規則。

rules:
  - DOMAIN-SUFFIX,match.game.example.com,GAME_UDP
  - IP-CIDR,203.0.113.0/24,GAME_UDP,no-resolve
  - DOMAIN-SUFFIX,game.example.com,GAME_UDP
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

實用模板(可直接套用)

rules:
  - DOMAIN,api.example.com,ProxyA
  - DOMAIN-SUFFIX,example.com,ProxyA
  - DOMAIN-KEYWORD,office,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,ProxyB

模板核心是層次與順序,不是節點名稱。替換策略組時,請保留結構。

模板一:基礎版(個人日常)

rules:
  - DOMAIN,login.company.com,PROXY
  - DOMAIN-SUFFIX,company.com,DIRECT
  - DOMAIN-SUFFIX,google.com,PROXY
  - DOMAIN-SUFFIX,github.com,PROXY
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

模板二:進階版(rule-providers)

rule-providers:
  direct:
    type: http
    behavior: classical
    url: https://example.org/rules/direct.yaml
    path: ./ruleset/direct.yaml
    interval: 86400

  proxy:
    type: http
    behavior: classical
    url: https://example.org/rules/proxy.yaml
    path: ./ruleset/proxy.yaml
    interval: 86400

rules:
  - RULE-SET,direct,DIRECT
  - RULE-SET,proxy,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

模板三:串流優先版

rules:
  - DOMAIN-SUFFIX,netflix.com,PROXY_STREAM
  - DOMAIN-SUFFIX,nflxvideo.net,PROXY_STREAM
  - DOMAIN-SUFFIX,disneyplus.com,PROXY_STREAM
  - DOMAIN-SUFFIX,youtube.com,PROXY_STREAM
  - DOMAIN-SUFFIX,bilibili.com,DIRECT
  - DOMAIN-SUFFIX,iqiyi.com,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

模板解讀重點

所有模板都採同一骨架:前段高優先規則、中段場景規則、後段 GEOIP、最後 MATCH。改策略組名稱即可,不建議改層次。

🛠️
自訂建議

一次只改一層,改完立刻回歸測試。多層同時改動會讓排障難度指數上升。

排查流程(5 分鐘版)

  1. 開啟日誌並重現目標請求
  2. 確認實際命中規則
  3. 檢查上方寬規則是否覆蓋
  4. 核對規則集更新時間
  5. 做關鍵域名回歸測試

5 分鐘實戰版

第 1 分鐘:重現並記錄時間點;
第 2 分鐘:抓到命中規則;
第 3 分鐘:查看上方是否被寬規則覆蓋;
第 4 分鐘:最小改動並重載;
第 5 分鐘:回歸三類關鍵流量。

# 追蹤 ClashX 日誌
tail -f ~/Library/Logs/ClashX/clashx.log

# 篩選特定域名
grep "api.example.com" ~/Library/Logs/ClashX/clashx.log

# 快速查看規則命中
grep -E "MATCH|GEOIP|DOMAIN" ~/Library/Logs/ClashX/clashx.log | tail -n 50
Step 1
重現問題
Step 2
定位命中
Step 3
確認覆蓋
Step 4
最小修正
Step 5
回歸驗證
📍
ClashX 日誌路徑

常見路徑在 ~/Library/Logs/ClashX/。不同版本檔名可能不同,但通常都位於這個目錄。

團隊協作與版本管理

多人協作時,建議按「業務白名單、系統服務、地理分流、兜底」分層管理,並保留每次變更的目的、影響與回退點。

只要分層明確,線上異常時就能快速定位責任區段,避免全檔回滾。

建議目錄結構

config/
  base.yaml
  rules/
    10-business.yaml
    20-services.yaml
    30-geo.yaml
    99-fallback.yaml
  providers/
    direct.yaml
    proxy.yaml
# Commit message 建議格式
feat(rule): add explicit routing for corp SSO callbacks
fix(rule): move MATCH to last line and reduce keyword shadowing
chore(ruleset): bump streaming provider to 2026-02-10
🤝
rule-provider 適合團隊共享

將規則集集中維護,主配置只負責組合與策略映射,可降低多人維護造成的漂移與衝突。

FAQ:規則優先級高頻問題

Q1:no-resolve 是什麼?

A:表示該 IP 規則不再做額外 DNS 解析,常用於內網網段,能減少不必要延遲與誤解析。

Q2:MATCH 應該放哪裡?

A:最後一行,且只保留一條。

Q3:規則集和本地規則衝突怎麼辦?

A:看最終執行順序,不看來源。最上方命中者生效。

Q4:為什麼同一服務有時正常有時失敗?

A:主域、API、媒體域可能分別命中不同規則,需拆分規則而非用單一關鍵字覆蓋。

Q5:DOMAIN-SUFFIX 與 DOMAIN-KEYWORD 如何選?

A:優先用 DOMAIN-SUFFIX;DOMAIN-KEYWORD 建議只作短期過渡。

Q6:GEOIP 可以放前面嗎?

A:通常不建議。前置 GEOIP 會吞掉高優先級業務規則,造成難以追蹤的副作用。

Q7:規則改完多久生效?

A:重載配置後立即生效,但建議重新發起請求並查看日誌確認命中路徑。

Q8:如何避免多人維護互相覆蓋?

A:分層檔案 + 提交規範 + 審查順序變更,三者缺一不可。

總結

先建立可預測的規則順序,再優化節點品質,才能長期穩定。

規則優先級不是排版細節,而是流量行為的核心設計。