先啟用規則模式,再確認流量已進入核心

開啟用戶端的模式選單,切換至「規則 / Rule」;接著前往「代理 / Proxies」,在要使用的代理策略組中選擇可連線的節點。國內外分流由規則決定流量出口;全域模式會略過這套分流邏輯,直連模式也不會依照下文規則選擇代理。

本文以使用 mihomo 核心的用戶端為設定對象。Clash 是常見的用戶端與設定生態統稱,但舊版 Clash 核心對 GEOSITE、資料檔案及部分參數的支援各有差異。請先在用戶端的「關於」或核心資訊頁面確認核心名稱;設定發生錯誤時,優先檢查實際使用的核心和記錄檔,而不只看應用程式名稱。

  1. 確認目前的設定:在「設定檔 / Profiles」頁面找到已啟用的訂閱,並先匯出備份。自訂內容建議寫入用戶端提供的覆寫、合併或擴充設定,以免訂閱更新後遺失。
  2. 確認流量接管方式:測試瀏覽器時可先開啟系統代理;若要接管不使用系統代理的程式,再啟用 TUN。這兩種接管方式都能使用同一組分流規則。
  3. 確認監聽連接埠:以下範例使用 mixed-port: 7890。實際連接埠請以目前生效的設定為準,別因範例使用 7890,就假設用戶端也在監聽這個連接埠。
  4. 開啟連線記錄:找到「連線 / 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 連線通常不會因規則變更而立即重新選路;瀏覽器重複使用連線,也可能讓舊結果持續一段時間。

  1. 驗證中國大陸直連:開啟 www.bilibili.com,並在連線記錄中依網域篩選。首頁網域應命中 local-direct 或其他優先順序更高的直連規則,策略鏈最終應顯示 DIRECT。相關資源網域需分開檢查。
  2. 驗證海外代理:前往實際需要代理的海外服務,查看是否命中 geolocation-!cn 或 MATCH,並確認策略鏈從 PROXY 指向預期節點,而非策略組中的直連選項。
  3. 驗證封鎖:請求 https://doubleclick.net/,預期連線會命中 local-ads 並採用 REJECT。只看到瀏覽器報錯還不夠,請查看連線記錄,確認是規則封鎖,而非 DNS 或網路故障。
  4. 驗證區域網路:連線至實際使用的路由器或 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 規則也不能只改副檔名就當成二進位規則集。更新後請保留一份可回復的設定,再用相同網域重新驗證。

最後確認三件事:連線確實進入核心、命中的規則符合預期、策略組最終選擇的出口正確。分開記錄這三個環節,才能持續維護中國大陸直連、海外代理與廣告封鎖,不必靠不斷增加規則碰運氣。若要了解用戶端的操作位置,請參閱使用教學;若要確認設定欄位,請參閱進階設定。