1. 規則模式與比對順序
Clash 分流的基本單位是連線。連線進入核心後,核心會依據可取得的目標網域、目標 IP、連接埠等資訊,由上而下檢查 rules。第一條符合的規則會決定使用哪個出口策略,後續規則通常不再參與這條連線的判斷。因此,規則順序比規則數量更重要。
本文採用 Clash 常見的基礎規則語法,適用於支援這些欄位的 Clash 與 Clash Meta/mihomo 核心。用戶端介面名稱可能不同,但設定中的 mode: rule、rules 與策略名稱仍須符合實際執行設定。不能因此推定擴充規則類型與資料庫選項在所有版本中都通用。
修改前請確認三項設定
- 執行模式:切換至 Rule/規則模式。Global/全域模式不會依本文規則逐條分流,Direct/直連模式也不是規則測試環境。
- 流量入口:讓瀏覽器透過系統代理或明確指定的代理進入核心。若要接管不遵循系統代理的程式,再評估 TUN 模式。
- 可用出口:設定中已有可用代理節點,或包含這些節點的策略群組。本文統一將此策略群組命名為
海外代理。
系統代理與 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. 載入設定、驗證連線與查看記錄
驗證分為兩步:先確認設定成功載入,再確認新連線符合預期策略。儲存檔案不代表用戶端已採用新規則。訂閱設定也可能經用戶端的產生流程重新處理,請以執行中的設定或連線詳細資料為準。
- 備份:匯出目前設定,並記下執行模式、監聽連接埠與策略群組選擇。
- 檢查語法:確認使用半形逗號與空格縮排,且頂層只設定一個
rules。 - 重新載入:使用用戶端的設定重新載入功能;若載入失敗,先處理記錄中的 YAML 或策略名稱錯誤。
- 建立新連線:關閉測試頁面既有連線後重新發出請求。舊連線可能沿用建立時的出口,重新整理頁面也可能重用持續連線。
- 核對三項資訊:目標網域或 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 指定出口。若要進一步確認欄位,可參閱協定參考;若尚未完成用戶端與代理入口設定,請先依照設定教學確認流量已進入核心。