先確定目標:中國大陸直連,海外流量交給策略組
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.com、www.example.com 與 api.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.1、10.0.0.20 等裝置時被交給遠端代理。IPv4 常見的私有網段包括 10.0.0.0/8、172.16.0.0/12 與 192.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 使用空格縮排,不能使用定位字元。儲存後若客戶端提示解析錯誤,應先檢查冒號後的空格、清單前的短橫線,以及策略組名稱。
訂閱設定的持久化方法
直接開啟訂閱產生的設定並修改,短時間內可以看到效果,但下次更新訂閱時通常會被覆蓋。圖形化客戶端一般提供「覆寫」「合併設定」或「擴充腳本」功能,用於載入訂閱內容後追加或調整欄位。應採用哪種方式,取決於客戶端是否支援規則前置、規則後置及陣列替換。
- 先複製目前的設定,再在副本中完成規則測試。
- 確認客戶端的覆寫機制是追加
rules,還是完全替換原有規則陣列。 - 需要優先命中的自訂規則應放在訂閱規則之前,不能只追加到 MATCH 後面。
- 儲存後重新載入設定,再查看實際執行中的設定,而不是只查看編輯器中的原始檔案。
- 手動更新一次訂閱,確認自訂規則仍然存在且維持原有順序。
「追加到末尾」是最常見的失效原因。訂閱規則通常已經以 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 代理連接埠。回傳 200、301 或 302 都表示已收到遠端 HTTP 回應,不能只憑狀態碼判斷出口。真正的分流結果應搭配客戶端連線清單或記錄中的規則名稱、策略組與實際節點查看。
在連線記錄中查看三個欄位
- 目標主機:確認記錄的是預期網域,而不是某個背景請求或頁面中的第三方資源。
- 命中規則:中國大陸網站應看到 DOMAIN-SUFFIX 或 GEOIP,CN,海外測試網域則應看到指定的後綴規則或 MATCH。
- 最終鏈路:DIRECT 表示直接連線;策略組名稱後通常還會顯示實際選定的節點。
一個網頁可能同時連線至主站網域、圖片 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。每次只調整一個層次,並透過記錄確認命中結果;日後遇到新網域時,也更容易判斷應新增精確規則、更新規則集,還是修正策略組。