1. 規則模式與比對順序

Clash 分流的基本單位是連線。連線進入核心後,核心會依據可取得的目標網域、目標 IP、連接埠等資訊,由上而下檢查 rules。第一條符合的規則會決定使用哪個出口策略,後續規則通常不再參與這條連線的判斷。因此,規則順序比規則數量更重要。

本文採用 Clash 常見的基礎規則語法,適用於支援這些欄位的 Clash 與 Clash Meta/mihomo 核心。用戶端介面名稱可能不同,但設定中的 mode: rule、rules 與策略名稱仍須符合實際執行設定。不能因此推定擴充規則類型與資料庫選項在所有版本中都通用。

修改前請確認三項設定

  1. 執行模式:切換至 Rule/規則模式。Global/全域模式不會依本文規則逐條分流,Direct/直連模式也不是規則測試環境。
  2. 流量入口:讓瀏覽器透過系統代理或明確指定的代理進入核心。若要接管不遵循系統代理的程式,再評估 TUN 模式。
  3. 可用出口:設定中已有可用代理節點,或包含這些節點的策略群組。本文統一將此策略群組命名為 海外代理。

系統代理與 TUN 決定哪些連線會進入核心;規則則決定連線進入後如何選擇出口。啟用 TUN 不會自動讓所有連線改走代理,啟用規則模式也不會自動接管系統中的所有應用程式。請先確認連線出現在用戶端的連線清單中,再檢查分流結果。

三種核心規則

規則比對依據常見用途
DOMAIN-SUFFIX完整網域及其子網域指定網站直連或走代理
GEOIP目標 IP 在資料庫中的地理位置將 CN 位址導向直連
MATCH所有尚未符合規則的連線指定明確的預設出口

DIRECT 是內建的直連策略;海外代理 是使用者設定的名稱,並非核心內建關鍵字。兩者都可以寫在規則的策略欄位,但後者必須已在節點或策略群組中定義,名稱也必須完全一致。

2. 中國大陸直連、海外走代理的基礎設定

請先備份目前使用的設定,再替換規則區段。以下片段需合併至現有設定,不包含訂閱網址、節點憑證與完整策略群組。若已有 mixed-port 或 mode,請修改原欄位,不要在同一層級重複新增。

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

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
  - IP-CIDR6,::1/128,DIRECT,no-resolve
  - IP-CIDR6,fc00::/7,DIRECT,no-resolve
  - IP-CIDR6,fe80::/10,DIRECT,no-resolve

  # 明確指定網域策略
  - DOMAIN-SUFFIX,qq.com,DIRECT
  - DOMAIN-SUFFIX,jd.com,DIRECT
  - DOMAIN-SUFFIX,github.com,海外代理
  - DOMAIN-SUFFIX,githubusercontent.com,海外代理
  - DOMAIN-SUFFIX,wikipedia.org,海外代理

  # IP 地區判斷與最後預設規則
  - GEOIP,CN,DIRECT
  - MATCH,海外代理

7890 是本文範例使用的 HTTP/SOCKS 混合監聽連接埠,不代表每個用戶端的預設連接埠。若目前用戶端使用其他連接埠,請保留實際設定值。也要檢查策略群組:即使規則符合 海外代理,若群組目前選擇的是 DIRECT,最後仍會直連。

為什麼要把明確指定的網域放在 GeoIP 前面

網域策略代表使用者的連線意圖,GeoIP 表示 IP 資料庫中的地理分類,兩者並不相同。假設某個明確要求走代理的網域解析到資料庫標示為 CN 的位址,若先檢查 GEOIP,CN,DIRECT,連線就會提前直連。將明確的網域規則放在前面,才能讓網站策略優先於位址歸屬。

同樣地,若企業服務需要直連,即使位址位於海外,也可以透過前置網域規則指定 DIRECT。本文所說的「中國大陸與海外分流」是預設策略,不是對每個網站的絕對分類。登入、付款、企業專線等服務,應依實際網路需求個別設定。

3. DOMAIN-SUFFIX 的用法與適用範圍

DOMAIN-SUFFIX,qq.com,DIRECT 會比對 qq.com 及 mail.qq.com 等子網域,不會只因字串相似就比對到 notqq.com。欄位中只填網域,不要填 https://、路徑或查詢參數,也不需要加上 *.qq.com。

  • 精確主機名稱:DOMAIN,login.example.com,DIRECT 只會比對這個主機名稱。
  • 整個網域樹:DOMAIN-SUFFIX,example.com,DIRECT 會同時比對根網域與子網域。
  • 關鍵字:DOMAIN-KEYWORD 依包含關係進行比對,範圍較廣,不適合取代精確的網域清單。

上例中的 example.com 僅用來說明語法。實際維護時,請填入已確認的服務網域。單一網頁可能同時連線至主網站、圖片、API 與物件儲存服務;只有主網站網域符合代理規則,不代表所有資源都會採用相同策略。例如 GitHub 頁面與部分原始檔案分別涉及 github.com 和 githubusercontent.com,請在連線清單中逐一確認。

範圍較窄的例外規則必須放在前面

rules:
  - DOMAIN,download.example.com,DIRECT
  - DOMAIN-SUFFIX,example.com,海外代理
  - GEOIP,CN,DIRECT
  - MATCH,海外代理

這段獨立片段示範如何為同一網域樹設定例外:下載主機直連,其餘子網域走代理。若將前兩條規則對調,後綴規則會先符合,精確主機規則便不再生效。每次新增規則,都應檢查上方是否已有涵蓋範圍更大的規則。

4. GeoIP、DNS 與 no-resolve 的搭配

GEOIP,CN,DIRECT 不代表「中文網站直連」,也不代表「所有 .cn 網域直連」,而是依據目標 IP 的地理位置進行判斷。網域可能使用海外 CDN,海外網站也可能回傳中國大陸位址;資料庫更新、位址移轉與 DNS 回應都會影響比對結果。

傳統 Clash 常使用 Country.mmdb 提供 GeoIP 資料。mihomo 也有依執行模式與版本而異的地理資料庫設定。遇到資料載入錯誤時,請先查看目前核心的記錄與實際資料庫設定,不要直接照抄其他用戶端的資料庫檔名、更新網址或擴充欄位。

no-resolve 不等於停用 DNS

為 IP 類規則加上 no-resolve,表示不為了檢查這條規則而額外解析目標網域。如果連線原本就帶有目標 IP,仍可依該位址進行比對。這不會禁止應用程式發出 DNS 查詢,也不會變更系統 DNS 設定。

設定方式目標是網域時主要取捨
GEOIP,CN,DIRECT必要時可進行解析,以判斷位址歸屬涵蓋未符合網域規則、但 IP 屬於 CN 的連線
GEOIP,CN,DIRECT,no-resolve不會為這條規則額外解析網域缺少可用目標 IP 時,可能會繼續套用預設規則

本文基礎設定為區域網路網段規則加上 no-resolve,避免只為檢查私有位址就預先解析每個網域;CN 規則則保留解析能力。如果內網名稱必須穩定直連,請優先新增明確網域規則或正確設定內網 DNS,不要假設私有位址規則一定能先取得解析結果。

Fake-IP 與網域可見性

Fake-IP 模式由核心維護網域與假位址之間的對應關係。連線進入核心後,可透過這項對應還原網域,再進行規則判斷。不要把常見的 Fake-IP 位址範圍 198.18.0.0/16 當成真實的海外服務網段,也不要為了「略過假位址」而強制將整個網段設為直連。

反之,若應用程式使用自己的 DNS、直接連線至 IP,或連線繞過預期的 DNS 路徑,核心可能無法取得足夠的網域資訊,DOMAIN-SUFFIX 就不一定會參與比對。mihomo 的嗅探功能可以補充部分連線的網域資訊,但無法還原所有協定。請搭配連線詳細資料中的網域、目標 IP 與符合的規則來判斷,不要只看瀏覽器網址列。

5. 載入設定、驗證連線與查看記錄

驗證分為兩步:先確認設定成功載入,再確認新連線符合預期策略。儲存檔案不代表用戶端已採用新規則。訂閱設定也可能經用戶端的產生流程重新處理,請以執行中的設定或連線詳細資料為準。

  1. 備份:匯出目前設定,並記下執行模式、監聽連接埠與策略群組選擇。
  2. 檢查語法:確認使用半形逗號與空格縮排,且頂層只設定一個 rules。
  3. 重新載入:使用用戶端的設定重新載入功能;若載入失敗,先處理記錄中的 YAML 或策略名稱錯誤。
  4. 建立新連線:關閉測試頁面既有連線後重新發出請求。舊連線可能沿用建立時的出口,重新整理頁面也可能重用持續連線。
  5. 核對三項資訊:目標網域或 IP、符合的規則,以及最後使用的出口節點。三者都正確,才能確認這次分流符合預期。

透過明確的代理入口測試,不要只查看公網 IP

如果目前的混合連接埠確實是 7890,可以在本機使用以下命令,透過核心發出一次請求。此命令只會驗證明確指定的代理入口,不代表其他應用程式已連上系統代理或 TUN。

curl --proxy http://127.0.0.1:7890 --head --connect-timeout 10 https://github.com/

這裡的 10 是連線階段的逾時秒數,不是速度測試結果。執行後,請在連線清單中搜尋 github.com,預期會符合前置的網域後綴規則,再經由 海外代理 策略群組連至所選節點。HTTP 回傳重新導向或其他狀態碼,不能單獨用來判定分流錯誤。

若要驗證 GeoIP,可暫時選擇一個未被前置網域規則涵蓋的測試目標,記錄該次解析出的 IP,再查看是否符合 CN 規則。不要斷言某個公開網站永遠會符合同一條規則,因為 CDN 位址與資料庫內容都可能變動。若要驗證最後一條 MATCH,同樣應以實際連線記錄為準。

6. 常見錯誤與後續維護

狀況優先檢查處理方式
所有新連線都使用相同策略執行模式,以及 MATCH 是否出現在規則頂端切回規則模式,並將 MATCH 移至最後
設定重新載入失敗策略名稱、逗號、縮排與重複欄位依記錄定位行號,並核對實際群組名稱
符合代理群組,卻仍然直連群組目前選取的項目與巢狀群組確認最終的葉節點出口不是 DIRECT
網域規則沒有符合核心是否取得網域資訊,以及前面是否已有其他規則檢查 DNS 路徑與比對順序
中國大陸服務套用預設代理解析出的位址、GeoIP 資料與 no-resolve依據實際資訊修正資料庫或新增網域例外
訂閱更新後規則消失修改的是訂閱原始設定,還是持續生效的覆寫設定使用用戶端支援的覆寫或合併功能

訂閱更新與規則合併

訂閱提供的是設定或節點資料,規則能否保留取決於用戶端如何處理設定。直接編輯一次性產生的檔案,下一次更新時可能會被覆蓋。請使用用戶端明確支援的持續覆寫、指令碼或規則合併功能,並確認規則是「前置」、「後置」還是「整體取代」。將新增規則放在既有 MATCH 後方,語法或許正確,分流卻不會生效。

規則數量增加後,可以評估改用規則集管理。mihomo 支援透過 rule-providers 載入規則集,再以 RULE-SET 引用;規則行為類型與檔案格式必須相符。不要把只有一欄網域的檔案當成任何格式都適用的通用規則集,也不要只為處理一條網域例外就直接替換整套規則。

最後檢查清單

  • 精確的服務例外放前面,通用 GeoIP 規則放後面,MATCH 放在最後。
  • 網域規則不含通訊協定與 URL 路徑,策略名稱須與實際設定一致。
  • 分別檢查 IPv4 與 IPv6;一次 IPv4 測試成功,不代表雙堆疊連線都正常。
  • 每次只調整一組相關規則,重新載入後以新連線驗證,再繼續修改。
  • 記錄符合的規則與最後使用的節點;若發生逾時,再分別檢查代理節點、DNS 與目標服務是否可連線。

穩定的基礎分流架構是:優先處理本機與服務例外,其次套用網域策略,再以 GeoIP 處理未涵蓋的位址,最後由 MATCH 指定出口。若要進一步確認欄位,可參閱協定參考;若尚未完成用戶端與代理入口設定,請先依照設定教學確認流量已進入核心。