Clash 規則分流實戰:台灣本地直連、境外走代理的配置寫法與優先級排查
以真實 rules 段為例講解 DOMAIN-SUFFIX、GEOIP、MATCH 的匹配順序,示範分流的最小可用規則集,並解釋規則不生效時的常見排查路徑。
以真實 rules 段為例講解 DOMAIN-SUFFIX、GEOIP、MATCH 的匹配順序,示範分流的最小可用規則集,並解釋規則不生效時的常見排查路徑。
不做分流的配置只有兩種極端:全域代理或全域直連。全域代理會讓台灣本地站點(銀行、政府機構、部分影音站)存取變慢,甚至觸發風控;全域直連則等於沒開代理。規則分流的作用是讓 Clash 在每一次連線發起時判斷目標網域或 IP 屬於哪一類,再決定走直連、走代理還是直接拒絕。這個判斷過程完全由 rules 段驅動,規則寫得越合理,體驗越接近「該走的走,該直連的直連」。
Clash 核心(以及目前活躍維護的 Clash Meta / mihomo 核心)在處理規則時是逐條從上到下匹配的,命中第一條就立即執行對應策略,後面的規則不再參與判斷。這意味著規則順序本身就是邏輯,寫反順序會讓後面精細的規則形同虛設。
一份典型的 rules 段會混用多種匹配類型,常見的幾種及其含義:
DOMAIN-SUFFIX,google.com 會命中 www.google.com、mail.google.com 等所有以該後綴結尾的網域。GEOIP,CN,DIRECT 表示目標 IP 歸屬中國大陸則直連。這條規則依賴內建或外部 GeoIP 資料庫,判斷發生在網域解析之後。關鍵點在於:網域類規則(DOMAIN-SUFFIX/DOMAIN-KEYWORD)在 DNS 解析前就能判斷,速度快;GEOIP 類規則需要先解析出 IP 再判斷,順序上通常排在網域規則之後。把 GEOIP,CN,DIRECT 放在最前面雖然能保證中國大陸 IP 優先直連,但也意味著所有請求都要先完成一次解析才能判斷,不適合追求速度的場景;把它放在網域規則之後、MATCH 之前,是更均衡的做法。
下面是一份可以直接理解、按需增補的最小分流規則集,涵蓋了「本地直連、境外代理、區域網路直連、兜底代理」四類最基本的場景:
rules:
# 局域网与内网地址直连
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
# 常见国内域名直连
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,alipay.com,DIRECT
# 常见需要代理的域名
- DOMAIN-SUFFIX,google.com,PROXY
- DOMAIN-SUFFIX,youtube.com,PROXY
- DOMAIN-SUFFIX,github.com,PROXY
# 按 IP 归属地兜底判断
- GEOIP,CN,DIRECT
# 未命中以上任何规则,统一走代理
- MATCH,PROXY
這裡的 PROXY 是策略群組名稱,需要在 proxy-groups 段提前定義好,通常指向訂閱節點或手動選擇的策略群組;DIRECT 是核心內建的直連策略,不需要額外定義。規則的先後順序嚴格對應上面列出的四類場景,從「精確、代價小」到「寬泛、代價大」依次排列,這也是編寫規則集的通用原則。
手寫幾十條 DOMAIN-SUFFIX 可以應付個人使用,但覆蓋不了完整的站點清單。實際生產環境中更常見的做法是引用規則集(RULE-SET),把大量網域/IP 歸類維護在外部檔案裡,規則段裡只寫引用:
rule-providers:
cn-domains:
type: http
behavior: domain
url: "https://example.com/rules/cn-domains.txt"
path: ./rules/cn-domains.yaml
interval: 86400
rules:
- RULE-SET,cn-domains,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
規則集會按 interval 設定的秒數定期刷新,不需要手動更新每一條網域。behavior 欄位決定規則集內容的解析方式(domain / ipcidr / classical),需要與規則集檔案本身的格式對應,寫錯會導致規則集載入失敗但不一定報錯明顯,這也是排查規則不生效時容易被忽略的一環。
規則寫完之後連線行為和預期不一致,通常可以按下面的順序逐項排查:
規則裡引用的 PROXY、DIRECT 等策略名必須和 proxy-groups 裡定義的 name 完全一致,包括大小寫。名稱不匹配時,不同用戶端的表現不一樣,有的會報錯,有的會靜默回退到預設策略,容易誤判成「規則沒生效」。
如果一條 DOMAIN-KEYWORD 或 GEOIP 規則寫在了前面,精確的 DOMAIN-SUFFIX 規則永遠輪不到它執行。把可疑規則暫時挪到最前面測試,能快速確認是不是順序問題。
GEOIP 類規則依賴解析出的 IP,如果用戶端啟用了 fake-ip 模式或者使用了境外 DNS,解析結果可能和真實歸屬地不符,導致 GEOIP,CN 判斷失效。可以在用戶端的連線日誌或規則命中記錄裡查看具體連線實際匹配到了哪一條規則。
使用 RULE-SET 時,如果外部 url 存取失敗或格式解析報錯,規則集會載入為空,相當於這條引用直接失效,後續流量會一路匹配到兜底 MATCH。查看用戶端啟動日誌或規則集刷新狀態可以確認這一點。
部分用戶端支援多套配置切換,如果修改的是備用 profile 而目前生效的是另一份,規則改動自然不會體現。確認目前啟用的配置檔案路徑,是最容易被忽略但最常見的原因。
規則集不是一次寫完就不再維護的東西,幾個長期實用的習慣值得保留:精確規則放前面、寬泛規則放後面,減少誤判;區域網路與內網段規則始終放在最前,避免本地服務被意外代理;GEOIP,CN,DIRECT 通常放在網域規則之後、MATCH 之前,作為中國大陸 IP 的兜底而不是主力判斷依據;涉及跨境辦公、跨境支付等特殊網域,建議單獨列出直連或代理,不要完全依賴 GEOIP 分類,因為部分服務的 IP 歸屬地和實際業務地不完全一致。規則集的價值隨著使用時間增長,建議定期回顧連線日誌,把頻繁被 MATCH 兜底命中的網域補充成明確規則,分流會越來越精準。
配置好規則分流前,先在對應平台安裝用戶端並完成訂閱匯入。