Clash 國內外分流規則設定實戰:網域規則、GEOIP 與兜底策略

以中國大陸直連、海外流量走代理為例,逐步設定 DOMAIN-SUFFIX、GEOIP、MATCH 規則,說明匹配順序、策略組與兜底寫法,並教你確認分流是否生效。

先確定目標:中國大陸直連,海外流量交給策略組

Clash 的規則模式不會先判斷網站屬於「中國大陸」還是「海外」,再自動選擇出口。核心實際執行的是一份由上而下排列的規則表:每個新連線依序進行規則匹配,命中第一條後立即停止,接著交由該規則指定的策略組、代理節點或 DIRECT 處理。因此,分流效果首先取決於規則順序,其次才是規則庫涵蓋率與節點狀態。

本文採用一個可直接套用的目標:區域網路與明確的中國大陸網域直接連線,已知需要代理的網域交給「海外流量」策略組,其餘目標嘗試透過 GEOIP 判斷,最後由 MATCH 統一兜底。範例以 mihomo v1.19 系列支援的經典規則語法為基準,同樣適用於多數讀取 Clash YAML 設定的圖形化客戶端。

流量類型 建議動作 主要規則 放置位置
本機與區域網路位址 DIRECT IP-CIDR 最前面
需要強制代理的網域 海外流量 DOMAIN、DOMAIN-SUFFIX 中國大陸規則之前
明確的中國大陸網域 DIRECT DOMAIN-SUFFIX 中段
解析至中國大陸的 IP DIRECT GEOIP,CN 接近末尾
其餘未命中的連線 海外流量 MATCH 最後一條

規則語法:DOMAIN、DOMAIN-SUFFIX 與 IP-CIDR

精確網域與網域後綴

DOMAIN 只會匹配一個完整的主機名稱。例如 DOMAIN,api.example.com,海外流量 會匹配 api.example.com,但不會匹配 www.example.com。它適合處理單一 API 網域、更新伺服器,或需要覆蓋通用規則的特殊主機。

DOMAIN-SUFFIX 會匹配指定網域及其下層子網域。規則 DOMAIN-SUFFIX,example.com,海外流量 可以涵蓋 example.comwww.example.comapi.eu.example.com。實際維護時,後綴規則比逐一列出主機名稱更簡潔,但涵蓋範圍也更大;不要只為了處理一個 API,就讓整個服務網域都改走代理。

rules:
  - DOMAIN,api.example.com,海外流量
  - DOMAIN-SUFFIX,wikipedia.org,海外流量
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,taobao.com,DIRECT

規則中的策略名稱必須與 proxy-groups 中已存在的名稱完全一致。若策略組名為「節點選擇」,規則結尾就應寫「節點選擇」,不能改寫成「海外流量」。名稱不同不會自動映射,設定檢查通常會直接回報找不到策略。

使用 IP-CIDR 讓區域網路位址優先直連

路由器管理介面、NAS、印表機與本機開發服務通常使用私有位址。將這些位址放在前面,可以避免連線至 192.168.1.110.0.0.20 等裝置時被交給遠端代理。IPv4 常見的私有網段包括 10.0.0.0/8172.16.0.0/12192.168.0.0/16

rules:
  - 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

no-resolve 表示匹配該 IP 網段時,不為網域額外發起解析。對明確的私有位址規則而言,這能減少不必要的 DNS 查詢。它不等於關閉 DNS,也不會改變已取得的目標 IP。

GEOIP,CN 的作用與限制

GEOIP,CN,DIRECT 會根據目標 IP 的地理歸屬資料庫進行判斷。當連線目標本身是 IP 位址,或核心為了匹配規則取得網域解析結果時,只要該 IP 被資料庫歸類為 CN,就會執行直連。它很適合作為大範圍中國大陸直連的後備規則,但不宜取代所有網域規則。

網域歸屬與伺服器 IP 歸屬並不總是一致。中國大陸的服務可能使用海外 CDN 節點,海外服務也可能透過位於中國大陸的邊緣節點提供靜態資源。GEOIP 資料還有更新週期,剛調整機房或重新分配的位址區段可能暫時分類不準。因此,穩定性要求較高的關鍵服務,應優先使用 DOMAIN 或 DOMAIN-SUFFIX 指定方向,再把 GEOIP 放在網域規則之後補充涵蓋。

是否要為 GEOIP 加上 no-resolve

以下兩種寫法的結果可能不同:

- GEOIP,CN,DIRECT
- GEOIP,CN,DIRECT,no-resolve

第一種允許核心在需要時解析網域,以取得 IP 後執行地理匹配;第二種則阻止這條規則觸發額外解析。如果前面已經有涵蓋完整的中國大陸網域規則集,為 GEOIP 加上 no-resolve 可以減少規則匹配階段的解析動作。如果只依賴少量手寫網域規則,過早使用 no-resolve 可能讓未列出的中國大陸網域直接落入 MATCH,最後改走代理。

實際設定時,可以先使用不帶 no-resolve 的寫法,觀察連線記錄與 DNS 延遲。在測試環境中,連續首次存取 20 個未快取網域時,額外解析通常會增加數毫秒至數十毫秒的等待,實際數值取決於本機 DNS、網路距離與快取命中率。若已啟用涵蓋充分的 GEOSITE 或 rule-provider,再根據記錄決定是否減少 GEOIP 的解析行為。

GEOIP 資料需要隨核心資源更新

mihomo 通常透過 GeoIP 資料檔案辨識位址歸屬。圖形化客戶端可能在核心更新、設定資源更新,或獨立的資料庫更新入口中維護該檔案。若大量常見的中國大陸 IP 被錯誤分配到兜底策略,除了檢查規則順序,也應確認 GeoIP 檔案是否成功載入。記錄中若出現資源檔案遺失、解析失敗或資料庫格式不相容,繼續增加 DOMAIN-SUFFIX 只能緩解局部現象,無法修復地理規則本身。

MATCH 兜底:最後一條決定未知流量出口

MATCH 會接收所有先前未命中的連線,因此必須放在規則清單末尾。中國大陸直連、海外代理的常見設計是 MATCH,海外流量:無法確認歸屬的目標預設交給代理策略組。這更適合尚未收錄於規則庫的新網域,也方便在策略組內切換節點。

如果寫成 MATCH,DIRECT,未收錄的海外網域就會直接連線。它適合「預設直連、僅代理少數服務」的另一類需求,但不符合本文目標。兩種設計都能運作,差別在於未知流量的預設出口,而不是 MATCH 本身的優先級。

一份易讀的完整規則順序

以下片段假設設定中已存在名為「海外流量」的策略組。不包含節點憑證與訂閱資訊,可併入客戶端的規則覆寫區域:

mode: rule
mixed-port: 7890
log-level: info

rules:
  - 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,wikipedia.org,海外流量
  - DOMAIN-SUFFIX,githubusercontent.com,海外流量

  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,taobao.com,DIRECT
  - DOMAIN-SUFFIX,jd.com,DIRECT
  - DOMAIN-SUFFIX,bilibili.com,DIRECT

  - GEOIP,CN,DIRECT
  - MATCH,海外流量

mode: rule 用於啟用規則模式,mixed-port: 7890 同時接受常見的 HTTP 與 SOCKS 入站連線。若客戶端已管理連接埠,就不必在覆寫中重複宣告,以免與介面設定衝突。Clash Verge Rev 2.3.x 可在「設定」→「Clash 設定」中檢查目前的連接埠與執行模式;不同版本的分組名稱可能略有調整,但應確認模式顯示為 Rule,而不是 Global 或 Direct。

規則之間不需要插入空白行,範例中的空行只用來區分區域網路、強制代理、中國大陸網域與兜底四個層次。YAML 使用空格縮排,不能使用定位字元。儲存後若客戶端提示解析錯誤,應先檢查冒號後的空格、清單前的短橫線,以及策略組名稱。

訂閱設定的持久化方法

直接開啟訂閱產生的設定並修改,短時間內可以看到效果,但下次更新訂閱時通常會被覆蓋。圖形化客戶端一般提供「覆寫」「合併設定」或「擴充腳本」功能,用於載入訂閱內容後追加或調整欄位。應採用哪種方式,取決於客戶端是否支援規則前置、規則後置及陣列替換。

  1. 先複製目前的設定,再在副本中完成規則測試。
  2. 確認客戶端的覆寫機制是追加 rules,還是完全替換原有規則陣列。
  3. 需要優先命中的自訂規則應放在訂閱規則之前,不能只追加到 MATCH 後面。
  4. 儲存後重新載入設定,再查看實際執行中的設定,而不是只查看編輯器中的原始檔案。
  5. 手動更新一次訂閱,確認自訂規則仍然存在且維持原有順序。

「追加到末尾」是最常見的失效原因。訂閱規則通常已經以 MATCH 或 FINAL 結束,追加在其後的內容永遠不會命中。若客戶端只能追加規則,應使用它提供的 prepend、規則前置或腳本注入功能;若只能整體替換,則需要將訂閱原有的重要直連、攔截與區域網路規則一併納入維護。

確認分流是否真正生效

先檢查模式、連接埠與系統代理

規則正確但流量沒有進入 Clash 時,記錄中不會出現對應連線。桌面客戶端應先確認已啟用 Rule 模式,再確認系統代理指向目前的監聽連接埠。本文範例使用 127.0.0.1:7890;如果介面顯示的是 7897、7899 或其他連接埠,測試指令也要同步修改。

curl -I -x http://127.0.0.1:7890 https://www.qq.com/
curl -I -x http://127.0.0.1:7890 https://www.wikipedia.org/

這兩個指令只用於確認請求經過指定的 HTTP 代理連接埠。回傳 200301302 都表示已收到遠端 HTTP 回應,不能只憑狀態碼判斷出口。真正的分流結果應搭配客戶端連線清單或記錄中的規則名稱、策略組與實際節點查看。

在連線記錄中查看三個欄位

一個網頁可能同時連線至主站網域、圖片 CDN、統計 API、字型資源與影片分片,因此同一頁面出現 DIRECT 與代理連線並不矛盾。檢查分流時應以單一連線為判斷單位,而不是把整個瀏覽器分頁視為一個目標。清除連線記錄後重新開啟無痕視窗,通常更容易觀察首次建立的連線。

使用臨時規則驗證優先級

如果懷疑規則順序不正確,可以在最前面暫時加入一條容易辨識的測試規則,例如將某個中國大陸網域指向「海外流量」。重新載入設定並存取該網域,若記錄仍顯示 DIRECT,表示目前執行中的設定未採用這條規則,或前置覆寫未生效。測試完成後應刪除臨時規則,避免長期改變服務的存取路徑。

TUN 模式下的額外檢查

系統代理只涵蓋會主動讀取代理設定的應用程式;TUN 模式則透過虛擬網路裝置接管更多 TCP、UDP,以及不遵循系統代理設定的流量。規則語法仍按相同順序匹配,但 DNS、路由表與應用程式自身的加密 DNS 會更明顯地影響結果。

啟用 TUN 後,先確認客戶端已取得建立虛擬網路裝置所需的系統權限。Windows 可檢查客戶端是否成功安裝並啟用虛擬網卡;macOS 會出現網路延伸功能或 VPN 設定授權;Linux 通常需要可用的 /dev/net/tun 以及相應 capability。權限失敗時,介面可能顯示 TUN 開關已切換,但實際連線仍只經過系統代理。

若瀏覽器啟用了獨立的安全 DNS,可能會繞過設定中的 DNS 監聽方案,造成網域解析結果與規則引擎預期不一致。排查期間可以暫時讓瀏覽器使用系統 DNS,再比較連線記錄。mihomo 設定中常見的 DNS 監聽連接埠為 1053,代理混合連接埠常見為 7890,兩者用途不同,不能將系統代理指向 DNS 連接埠。

常見錯誤與修正方法

現象 常見原因 處理方法
所有網站都經過同一個節點 目前處於 Global 模式 切換為 Rule,並重新建立連線
自訂規則完全沒有命中 規則被追加在 MATCH 之後 改用規則前置或整體合併
中國大陸網域偶爾走代理 網域未收錄,解析出的 IP 也未歸入 CN 增加精確網域規則並更新 GeoIP 資料
區域網路裝置無法開啟 私有位址被兜底規則接管 將私有網段的 IP-CIDR 放在最前面
更新訂閱後規則消失 修改了訂閱產生的檔案 移轉至客戶端覆寫或合併設定
規則命中但網頁仍然無法開啟 策略組選中的節點無法使用 檢查延遲測試、握手記錄與節點選擇

完成設定後,不必追求規則越多越好。更穩妥的做法是保留清晰層次:私有位址、少量強制例外、經過維護的中國大陸網域規則、GEOIP,以及最終 MATCH。每次只調整一個層次,並透過記錄確認命中結果;日後遇到新網域時,也更容易判斷應新增精確規則、更新規則集,還是修正策略組。

下載 Clash 客戶端 依平台查看可選版本