先啟用規則模式,再確認流量已進入核心
開啟用戶端的模式選單,切換至「規則 / Rule」;接著前往「代理 / Proxies」,在要使用的代理策略組中選擇可連線的節點。國內外分流由規則決定流量出口;全域模式會略過這套分流邏輯,直連模式也不會依照下文規則選擇代理。
本文以使用 mihomo 核心的用戶端為設定對象。Clash 是常見的用戶端與設定生態統稱,但舊版 Clash 核心對 GEOSITE、資料檔案及部分參數的支援各有差異。請先在用戶端的「關於」或核心資訊頁面確認核心名稱;設定發生錯誤時,優先檢查實際使用的核心和記錄檔,而不只看應用程式名稱。
- 確認目前的設定:在「設定檔 / Profiles」頁面找到已啟用的訂閱,並先匯出備份。自訂內容建議寫入用戶端提供的覆寫、合併或擴充設定,以免訂閱更新後遺失。
- 確認流量接管方式:測試瀏覽器時可先開啟系統代理;若要接管不使用系統代理的程式,再啟用 TUN。這兩種接管方式都能使用同一組分流規則。
- 確認監聽連接埠:以下範例使用
mixed-port: 7890。實際連接埠請以目前生效的設定為準,別因範例使用 7890,就假設用戶端也在監聽這個連接埠。 - 開啟連線記錄:找到「連線 / Connections」與「記錄 / Logs」。接下來需要同時查看目標網域、命中的規則,以及最終的策略鏈。
釐清 GEOSITE、GEOIP 與 RULE-SET 的用途
分流可以依網域判斷,也可以依目標 IP 判斷。中國大陸服務常使用跨區域 CDN,海外服務也可能解析到鄰近地區的位址,因此「IP 所屬地區」和「服務應使用哪個出口」並非同一回事。一般會先套用明確的網域策略,再用 IP 地理資料庫補充判斷。
| 規則類型 | 判斷依據 | 適用情境 |
|---|---|---|
DOMAIN-SUFFIX | 網域本身及其子網域 | 需要固定出口的特定服務 |
GEOSITE | 網域分類資料庫 | 中國大陸服務、海外服務等批次分類 |
GEOIP | 目標 IP 與位址資料庫 | 私有網路或地區 IP 的補充判斷 |
RULE-SET | 在設定中命名的規則提供者 | 分別維護的直連、代理與封鎖清單 |
MATCH | 處理前面規則都未命中的連線 | 規則清單的最後一行 |
規則順序:由上而下,命中即執行
rules 會由上而下依序比對,首次命中後就採用該規則的策略。建議順序為:必要的例外放行、廣告封鎖、區域網路直連、特定服務網域策略、中國大陸網域、海外網域、中國大陸 IP,最後才是兜底規則。若將 MATCH 提前,後續規則就不會有機會執行。
GEOSITE 的 cn 與 geolocation-!cn 是常見資料集中的分類名稱,但並非所有資料來源都一定提供;後者也不等於「所有非中國大陸網域」。啟用前請確認目前使用的 geosite 資料包含這些分類。只有 GEOIP 資料檔時,不能據此推斷 GEOSITE 也已可用。
設定組合:中國大陸直連、海外代理與廣告封鎖
以下使用兩個本機規則集,分別維護廣告網域與特定服務的直連網域。這樣可以先確認規則是否成功載入並命中,再考慮改用遠端維護的清單。範例中的 PROXY 是策略組名稱,必須替換為設定中實際存在的代理組名稱,或確認已有同名策略組;它不是會自動建立節點的關鍵字。
步驟一:建立本機規則集檔案
在核心可存取的設定目錄中建立 rules 資料夾,並分別儲存以下兩個檔案。相對路徑通常以核心的工作目錄為基準,不一定是下載訂閱檔案所在的目錄;部分圖形介面用戶端會限制檔案路徑,請使用用戶端允許的設定目錄。
rules/local-ads.yaml:採用 classical 行為,檔案內容須寫出完整的規則類型,但不包含流量出口策略。
payload:
- DOMAIN-SUFFIX,doubleclick.net
- DOMAIN-SUFFIX,googlesyndication.com
rules/local-direct.yaml:採用 domain 行為,內容只需列出網域模式。依此規則集語法,前綴 +. 會涵蓋網域本身及其子網域。
payload:
- '+.bilibili.com'
- '+.bilibili.cn'
這份廣告清單只有兩個網域,用來示範封鎖流程,並非完整的廣告清單。廣告網域可能與登入、統計或內容載入互相依賴,擴充清單後應逐項測試。直連清單也只是範例;影片、圖片及帳戶服務可能使用其他網域,請依照連線記錄補充。
步驟二:合併規則提供者與分流規則
將以下欄位合併至目前的設定。若已有 rule-providers,請保留原有項目;若已有 rules,請依序整合,勿在同一個 YAML 層級重複宣告同名鍵。若用戶端的「追加規則」排在訂閱的 MATCH 之後,同樣不會生效;請改用前置規則,或能控制完整順序的覆寫方式。
mixed-port: 7890
mode: rule
rule-providers:
local-ads:
type: file
behavior: classical
format: yaml
path: ./rules/local-ads.yaml
local-direct:
type: file
behavior: domain
format: yaml
path: ./rules/local-direct.yaml
rules:
- RULE-SET,local-ads,REJECT
- 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,fc00::/7,DIRECT,no-resolve
- RULE-SET,local-direct,DIRECT
- GEOSITE,cn,DIRECT
- GEOSITE,geolocation-!cn,PROXY
- GEOIP,CN,DIRECT
- MATCH,PROXY
這是合併設定的範例,仍需依賴現有的節點、proxy-groups 與可用的地理資料庫,不能單獨作為訂閱使用。私有位址範圍只列出常見項目,並非完整的特殊用途位址清單;企業網路若使用其他內部網段,請依實際網路規劃補充。
步驟三:確認兜底策略與相容性
- 中國大陸網域優先直連:
GEOSITE,cn,DIRECT排在 IP 判斷之前,可避免中國大陸服務只因解析到其他地區的 CDN,就被導向代理兜底規則。 - 已分類的海外服務優先走代理:海外網域規則排在中國大陸 IP 規則之前,可減少海外服務因 CDN 位址所在位置而意外直連的情況。
- 未分類的連線走代理:
MATCH,PROXY有助於連線至海外服務。若改為MATCH,DIRECT,未收錄的海外網域可能無法直連;請依實際使用需求選擇。 - 缺少分類時,先移除對應規則:如果核心提示找不到 GEOSITE 分類,請先移除該規則,恢復設定正常載入,再設定符合需求的資料來源。不要反覆重新啟動用戶端來掩蓋載入錯誤。
DNS 與 no-resolve:別把解析問題當成規則問題
儲存並重新載入設定後,先查看記錄檔是否出現找不到規則集檔案、策略組不存在或地理資料庫讀取失敗等錯誤。確認設定載入成功後,再檢查 DNS。若網域解析出異常位址,即使規則順序正確,也可能造成直連逾時或服務無法存取。
中國大陸 IP 規則是否要加上 no-resolve
範例中的 GEOIP,CN,DIRECT 沒有加上 no-resolve,因此比對需要 IP、但連線只有網域時,核心可以觸發解析以繼續判斷。這有助於將未列入中國大陸網域分類的中國大陸位址導向直連,但也會更依賴 DNS 的解析結果。
若改為 GEOIP,CN,DIRECT,no-resolve,該規則不會為了比對而觸發網域解析。已知目標 IP 的連線仍可命中;只有網域且沒有可用 IP 的連線,則可能繼續落到 MATCH。因此,加上這個參數不代表中國大陸網域辨識會更準確。
Fake-IP 與 TUN 的檢查重點
- Fake-IP:應用程式可能取得
198.18.0.0/16常見範圍內的映射位址,實際範圍請以fake-ip-range為準。這個位址並非伺服器的真實地理位置,不能用來查詢地區或判斷分流是否正確。 - 網域資訊:正確接管 DNS 並建立映射,有助於核心還原網域並套用 GEOSITE。若應用程式使用獨立的加密 DNS、直接連線至快取 IP,或沿用舊連線,觀察結果可能會不同。
- TUN:確認虛擬網卡路由與 DNS 接管確實生效。TUN 能擴大流量接管範圍,但不會自動修正策略組名稱、規則順序或資料庫分類。
- 選擇解析器:分別測試中國大陸網域與代理網域的解析結果。需要依網域選擇解析器時,再設定
nameserver-policy;修改前請確認目前的 mihomo 文件,以及用戶端覆寫 DNS 的行為。
驗證分流:查看命中的規則,不只看網頁能否開啟
重新載入設定後,請關閉測試應用程式仍在使用的舊連線,或在用戶端的連線頁面中結束對應連線,再重新發出請求。既有 TCP 連線通常不會因規則變更而立即重新選路;瀏覽器重複使用連線,也可能讓舊結果持續一段時間。
- 驗證中國大陸直連:開啟
www.bilibili.com,並在連線記錄中依網域篩選。首頁網域應命中local-direct或其他優先順序更高的直連規則,策略鏈最終應顯示DIRECT。相關資源網域需分開檢查。 - 驗證海外代理:前往實際需要代理的海外服務,查看是否命中
geolocation-!cn或MATCH,並確認策略鏈從PROXY指向預期節點,而非策略組中的直連選項。 - 驗證封鎖:請求
https://doubleclick.net/,預期連線會命中local-ads並採用REJECT。只看到瀏覽器報錯還不夠,請查看連線記錄,確認是規則封鎖,而非 DNS 或網路故障。 - 驗證區域網路:連線至實際使用的路由器或 NAS 位址,檢查私有網段規則與直連出口。若公司網路有特殊路由,也請一併檢查系統路由表。
透過明確指定代理,排除系統代理設定的影響
在 macOS「終端機」中執行以下指令,可明確將請求送至本機的 7890 連接埠。--max-time 15 會將單次測試時間限制為 15 秒;這只是診斷參數,不代表實際效能測試。若實際連接埠不同,請先修改指令。
curl -I --max-time 15 \
--proxy http://127.0.0.1:7890 \
https://www.bilibili.com/
curl -I --max-time 15 \
--proxy http://127.0.0.1:7890 \
https://www.wikipedia.org/
HTTP 狀態碼由目標服務決定;重新導向、存取限制或不接受 HEAD 請求,都可能影響輸出結果。這裡主要確認請求是否出現在用戶端的連線記錄,以及命中的規則與策略鏈;單憑 200、403 或一次逾時,無法判斷國內外分流是否正確。
常見異常:從設定、比對、出口三個層面排查
| 現象 | 優先檢查項目 | 處理方式 |
|---|---|---|
| 中國大陸網站仍走代理 | 實際網域、直連清單、規則順序 | 依連線記錄補上網域;將明確的直連規則移到代理規則之前 |
| 海外網站命中直連 | 範圍過廣的直連規則、策略組選擇 | 縮小網域範圍,並確認代理組是否選到了 DIRECT |
| 儲存後完全沒有生效 | 目前使用的設定、覆寫結果、模式 | 確認正在執行的是目標設定,並切換至 Rule |
| 廣告仍然出現 | 是否由同一網域投放、是否實際命中規則 | 補上獨立的廣告網域;同網域內容則需透過瀏覽器內容過濾處理 |
| 代理請求逾時 | 命中記錄、節點連線狀態、DNS | 先確認選路正確,再測試節點與解析,避免盲目增加規則 |
| 重新載入時提示檔案錯誤 | 路徑、YAML 縮排、behavior | 確認工作目錄,並確保檔案格式與規則提供者宣告一致 |
例外規則應維持最小範圍
若某條廣告規則誤擋登入,請將確認必要的網域單獨加入封鎖規則之前。優先使用 DOMAIN 精確比對,不要將整個服務商的大型網域都設為放行。反過來說,若某項海外服務需要固定走代理,也應在中國大陸分類規則之前新增精確規則,而非移除整組中國大陸直連規則。
將規則集從本機檔案改為遠端訂閱時,請一併確認 type、behavior、format 與更新週期。domain 清單不能直接當作 classical 規則讀取,YAML 規則也不能只改副檔名就當成二進位規則集。更新後請保留一份可回復的設定,再用相同網域重新驗證。
最後確認三件事:連線確實進入核心、命中的規則符合預期、策略組最終選擇的出口正確。分開記錄這三個環節,才能持續維護中國大陸直連、海外代理與廣告封鎖,不必靠不斷增加規則碰運氣。若要了解用戶端的操作位置,請參閱使用教學;若要確認設定欄位,請參閱進階設定。