Clash 規則分流實戰:中國大陸網站直連、海外服務走代理的 rules 設定
了解 Clash rules 的比對順序,以及 DOMAIN-SUFFIX、GEOSITE、GEOIP 和 MATCH 的設定方式,搭配策略組讓中國大陸網站直連、海外服務走代理,並排除規則衝突。
1. 先確認規則模式與流量入口
要讓「中國大陸網站直連、海外服務走代理」,必須同時符合三個條件:請求已進入用戶端、目前使用規則模式,而且設定中的規則指向有效的出站。如果只編輯 rules,卻仍使用全域模式,就無法驗證分流結果;瀏覽器未使用代理時,規則也不會處理該請求。
FlClash 使用 mihomo 核心。本文依 mihomo 的規則語法說明,不將舊版 Clash 與目前核心的資料庫能力視為完全相同。開始前請先備份目前的設定,並確認以下項目。
- 已選取設定檔:在設定檔清單中確認目前使用的訂閱或本機設定檔,避免修改未啟用的副本。
- 出站模式設為規則:介面中的規則模式對應設定項目
mode: rule;全域模式和直連模式不會依照下方的規則鏈分流。 - 請求已進入核心:使用系統代理時,應用程式必須支援並遵循系統代理;使用 TUN 時,請確認虛擬網卡已啟動,且路由有接管目標請求。
- 代理出站可用:目標策略組必須存在,並已選取可連線的代理。規則比對正確,不代表上游連線一定成功。
2. rules 由上往下比對,首次命中就決定出站
常見規則格式為「類型、比對內容、策略」,例如 DOMAIN-SUFFIX,github.com,PROXY。核心會依序檢查規則,命中一條後通常就會決定這次連線使用的策略,不會再繼續尋找後面「更精確的規則」。因此,明確的例外規則應放在前面,分類規則放中間,最後才放兜底規則。
| 規則類型 | 比對對象 | 適用情境 |
|---|---|---|
DOMAIN | 完整網域名稱 | 為單一主機名稱指定出站 |
DOMAIN-SUFFIX | 網域後綴 | 涵蓋主網域及其子網域 |
GEOSITE | 網域分類資料庫 | 依網站集合分流 |
GEOIP | 目標 IP 所屬分類 | 補充分流網域規則未涵蓋的位址 |
MATCH | 所有其餘請求 | 最後兜底,不需要比對內容欄位 |
精確網域與網域後綴的差異
rules:
- DOMAIN,api.github.com,PROXY
- DOMAIN-SUFFIX,github.com,PROXY
- MATCH,PROXY
第一條只比對 api.github.com。第二條則會比對 github.com 及其子網域,但不會把 notgithub.com 視為相同後綴。範例中的第一條用來示範精確比對;若兩條都指向相同策略,通常保留後綴規則即可。
DIRECT 是內建的直連出站;PROXY 並非固定的內建代理關鍵字,而是本文使用的策略組名稱。若實際設定使用其他組名,請將範例中的 PROXY 全部替換為設定中已有的正確名稱。
3. 先準備策略組,再設定中國大陸直連規則
訂閱通常已包含 proxies、proxy-providers 和 proxy-groups 的部分或全部內容。請勿用一段規則範例覆蓋整份訂閱檔案。先找到 proxy-groups,確認代理組的 name,以及該組目前選取的實際出站。
已有策略組:直接引用組名
如果目前設定已有名為 PROXY 的可用策略組,可以直接使用後續規則。若組名是「代理選擇」,規則應寫成 GEOSITE,geolocation-!cn,代理選擇。組名中的空格與大小寫也都是名稱的一部分,請勿憑介面顯示印象自行縮寫。
手動設定:使用現有代理建立選擇組
以下是 mihomo 的策略組片段,前提是設定中已定義有效的代理或代理提供者。include-all: true 會將設定中的代理,以及代理提供者內的代理納入選擇範圍,但不會憑空建立代理連線資訊。
proxy-groups:
- name: PROXY
type: select
include-all: true
請將此項目合併到現有的 proxy-groups 清單中,不要再建立第二個同名的頂層欄位。載入後請確認組內確實有可選代理;如果清單是空的,應先修復訂閱或代理提供者,再處理規則。請勿為了讓設定通過而將唯一出站改成 DIRECT,否則「海外代理」最後仍會變成直連。
4. 可調整的中國大陸直連、海外代理 rules
以下是規則片段,並非完整訂閱。使用前須已有可用的 PROXY 組,並確認 GeoSite 資料包含 cn 與 geolocation-!cn 分類。規則分為五層:區域網路 IPv4 位址直連、網域例外、網域分類、IP 補充,以及最終兜底。
mode: rule
rules:
# 區域網路位址與本地域名
- DOMAIN,localhost,DIRECT
- DOMAIN-SUFFIX,lan,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
# 明確指定走代理的網域例外
- DOMAIN-SUFFIX,github.com,PROXY
# 先依網域分類
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,PROXY
# 再依已知目標 IP 補充
- GEOIP,CN,DIRECT,no-resolve
# 未命中其他規則的連線
- MATCH,PROXY
為何網域分類要放在 GEOIP 前面
網站服務的業務歸屬,與伺服器 IP 所在地並不相同。同一服務可能使用多個地區的 CDN,海外服務也可能有位於中國大陸的接入位址。先由已知網域分類決定出站,再用 IP 規則補漏,可以減少僅依 IP 地區判斷造成的錯誤分流。明確指定要走代理的網域,應放在 GEOSITE,cn,DIRECT 之前。
MATCH 放在最後代表什麼
MATCH,PROXY 表示未識別的流量預設走代理,但不保證所有中國大陸服務都會直連:若資料庫未收錄、未取得目標 IP,或 IP 分類不準確,請求仍可能落入兜底規則。若改成 MATCH,DIRECT,未識別的海外服務也可能直連。兩種兜底方式各有取捨,不應同時設定兩條,期待它們自動判斷。
5. GEOSITE、GEOIP 與 no-resolve 的適用範圍
GeoSite 分類依賴資料庫,並非即時地理位置查詢
GEOSITE,cn,DIRECT 會依網域集合比對,不是用來判斷伺服器所在國家。geolocation-!cn 也是一個特定分類名稱,並非自動排除所有其他分類的通用語法。如果資料來源沒有這個分類,載入設定時可能會顯示分類不存在。
遇到這類錯誤時,請先查看用戶端日誌中的 GeoSite 載入資訊,確認資料庫已下載、檔案可讀取,且包含所使用的分類。若暫時無法確認,可先移除這條海外分類規則,讓其餘流量由 MATCH,PROXY 處理;但仍須確保中國大陸分類及其他規則可正常載入。請勿反覆加入拼字相近、實際上不存在的分類名稱。
no-resolve 可避免額外解析,但也會影響比對機會
GEOIP,CN,DIRECT,no-resolve 的意思是:不會只為了這條 IP 規則而主動解析網域。若連線已有可用的真實目標 IP,仍可進行判斷;若只有網域名稱且沒有可用 IP,這條規則無法憑空判斷地區,請求會繼續往下比對。
- 直接連線至 IP:目標本身是 IP 位址時,可直接依該位址判斷,不需要解析網域。
- HTTP CONNECT 或 SOCKS 請求附帶網域名稱:不能假設請求進入規則鏈時,已經有真實目標 IP。
- Fake-IP 情境:能否還原網域並取得真實位址,取決於 DNS 接管、映射狀態及規則處理流程,不能只看應用程式顯示的虛擬位址。
若希望中國大陸 IP 規則能套用到更多未知網域,可以評估移除該規則中的 no-resolve,讓核心在需要時進行解析。但這會產生 DNS 查詢,結果也會受到解析器選擇影響。修改前請先確認 DNS 請求的路由與連線狀況,避免將 DNS 逾時誤判為規則失效。
6. 查看連線紀錄確認命中規則,不要只憑網頁速度判斷
設定載入成功後,應針對新連線進行驗證。瀏覽器可能會重用既有的 HTTP/2 或 HTTP/3 工作階段;修改規則不會讓所有舊連線自動重新選擇出站。先關閉目標頁面並結束相關連線,再重新發出請求,結果會比較容易判斷。
- 確認設定與模式:檢查目前設定已重新載入,且仍為規則模式。若載入失敗,請先處理日誌中的 YAML、策略組或資料庫錯誤。
- 測試區域網路位址:連線至實際存在的路由器管理位址,例如
192.168.1.1。若請求進入用戶端,應能看到私有位址規則或其他預期的直連規則命中。 - 測試中國大陸網站:造訪
www.baidu.com,在連線詳細資訊中查看目標網域、命中規則與最終出站;預期會命中中國大陸網域分類或中國大陸 IP 規則所對應的DIRECT。 - 測試明確例外:造訪
github.com,預期會命中DOMAIN-SUFFIX例外規則,並透過PROXY組中選取的代理出站。 - 區分規則與連線狀況:若已命中
PROXY,但連線逾時,請繼續檢查所選代理、DNS 與目標服務,不要先刪除所有中國大陸規則。
同一個網頁可能會同時連線至主站、圖片、登入 API 和統計網域。首頁命中直連,不代表頁面中的所有連線都會直連;應分別查看發生問題的請求網域。此處提供的位址僅供驗證,不代表實際測得的網路延遲或成功率。
7. 常見規則衝突與修正方式
| 現象 | 優先檢查項目 | 修正方向 |
|---|---|---|
| 所有連線都走同一個代理 | 是否使用全域模式;前面是否已有 MATCH | 切換回規則模式,並將兜底規則移至最後 |
| 新增的網域規則沒有命中 | 前面是否已有後綴、分類或規則集命中 | 將明確例外移到範圍較廣的規則之前 |
| 載入時提示策略不存在 | 規則目標與策略組名稱是否一致 | 使用現有組名,並檢查大小寫與空格 |
| 中國大陸網站落入 MATCH | 分類是否已收錄;是否有真實目標 IP | 補上網域規則,並檢查 no-resolve 與 DNS 行為 |
| 訂閱更新後自訂規則消失 | 修改是否直接寫入訂閱產生的內容 | 使用可持續保留的覆寫機制,或維護獨立的本機設定 |
| 連線清單中沒有目標請求 | 應用程式是否略過系統代理;TUN 路由是否生效 | 先修復流量入口,再排查規則 |
訂閱覆寫不能只看「新增成功」
不同版本的 FlClash,其設定編輯與覆寫入口可能不同,請以目前版本實際提供的功能為準。關鍵是檢查最終生效的規則清單:自訂規則必須位於兜底 MATCH 之前。若追加機制將新規則放在 MATCH 後面,即使檔案中看得到,也沒有機會比對。
訂閱中已有 RULE-SET 時,同樣要遵循由上往下的順序。不要為了套用本文範例而刪除所有規則集;請先確認既有的中國大陸分類、代理分類與兜底規則,再合併重複項目。保存一份可還原的設定,並在更新訂閱後重新檢查,可降低規則遭覆蓋卻未察覺的風險。
每次只修改一層
建議依序驗證「網域例外 → GeoSite 分類 → GeoIP 補充 → MATCH 兜底」。先確認一個明確網域命中正確策略,再逐步擴大涵蓋範圍;不要同時更換 DNS、切換 TUN、重寫規則和替換代理,否則很難判斷是哪個步驟改變了結果。
最後應保存的不只是規則文字,還包括三項確認結果:目前使用規則模式、連線詳細資訊顯示預期命中的規則,以及策略組實際出站符合預期。三項都確認無誤,才算完成一套可供檢查的中國大陸直連與海外代理設定。