一、設定前確認:核心、規則模式與策略群組
「中國大陸直連、海外走代理」並不是能自動判斷所有網站歸屬的開關。通常需要三個部分:明確的網域規則、網域或 IP 分類資料庫,以及最後一條兜底規則。設定目標是讓常用的中國大陸服務優先直連,指定的海外服務使用代理策略群組,並為未分類的連線提供可預期的出口。
本文以 mihomo 為準;它是 Clash Meta 後續採用的核心名稱。傳統 Clash 核心、不同分支,以及用戶端內建的設定轉換器,支援的欄位不盡相同。尤其是 GEOSITE 和地理資料庫設定,不能只看用戶端名稱就判斷是否可用。
- 確認實際執行的核心。在用戶端的「關於」或核心資訊頁面記下核心名稱與版本。若設定檢查提示不支援某種規則,應先確認核心功能,而不是繼續新增相同類型的規則。
- 選擇規則模式。規則分流需要設定
mode: rule。全域模式通常會將連線交由全域策略處理;直連模式則不會依本文的規則選擇代理。 - 確認出站名稱。本文以
Proxy表示已存在的代理策略群組;名稱有大小寫之分。它必須存在於目前設定的proxy-groups中,且能選取有效節點。 - 備份目前的設定。訂閱產生的設定可能在更新後被覆寫。建議使用用戶端提供的持久化覆寫、合併設定或規則編輯功能,並檢查最終生效的設定。
二、規則比對順序:由上而下,先符合先處理
在規則模式下,核心會依序檢查 rules。一般分流情境中,一旦找到符合的規則,就會依該規則指定的出站處理,不會繼續尋找「更精確」的下一條。因此,排序比規則數量更重要:手動例外放前面,批次分類放中間,MATCH 放最後。
| 規則類型 | 適用對象 | 主要差異 |
|---|---|---|
DOMAIN | 單一完整網域 | 精確比對,不會自動涵蓋其他子網域 |
DOMAIN-SUFFIX | 網域及其子網域 | github.com 也會涵蓋 api.github.com |
GEOSITE | 資料庫中的網域集合 | 需視本機資料庫是否包含相應分類 |
GEOIP | 目標 IP 所屬地區 | 不能據此判定網站、帳號或營運主體所屬地區 |
RULE-SET | 規則提供者中的項目 | 集合定義於 rule-providers 中 |
MATCH | 此前未符合規則的連線 | 作為最後兜底,不代表「辨識海外」 |
先用兩條網域規則確認比對順序
rules:
- DOMAIN,api.github.com,Proxy
- DOMAIN-SUFFIX,github.com,DIRECT
- MATCH,Proxy
這段設定用來說明優先順序:api.github.com 會符合第一條並使用 Proxy;github.com 和其他子網域則可能符合第二條而直連。如果將前兩條對調,後綴規則會先匹配 api.github.com,精確網域規則便不會生效。實際部署時,請依需求統一 GitHub 相關連線的出口,不必照搬這個用來比較的範例。
不要將 MATCH,DIRECT 放在規則開頭,也不要假設同一網域會自動選擇最精細的規則。廣告封鎖、公司內網、下載站等例外,也應遵循「需求越具體,規則越優先」的原則。
三、基本分流:網域優先、GEOIP 補充、代理兜底
先不加入外部規則檔,使用少量網域規則建立可驗證的基準設定。以下設定目標為:本機私有 IPv4 位址直連、Bilibili 相關主網域直連、GitHub 常用網域走代理、中國大陸目標 IP 直連,其餘連線交由 Proxy。
mode: rule
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,bilibili.com,DIRECT
- DOMAIN-SUFFIX,bilivideo.com,DIRECT
- DOMAIN-SUFFIX,github.com,Proxy
- DOMAIN-SUFFIX,githubusercontent.com,Proxy
- GEOIP,CN,DIRECT,no-resolve
- MATCH,Proxy
no-resolve 不代表「關閉 DNS」
no-resolve 表示不要只為了比對這條 IP 規則而主動觸發網域解析。如果連線中繼資料已有可用於比對的實際目標 IP,仍可判斷它是否位於指定網段或地區;如果目前只有網域、沒有可用 IP,這條規則可能會略過,連線接著往下比對。
因此,上述 GEOIP,CN,DIRECT,no-resolve 無法保證所有中國大陸網域都直連。若某個網域未被網域規則涵蓋,當下又沒有可用 IP,它最後仍可能使用 Proxy。相較於單靠 IP 分類,補上中國大陸網域集合通常更容易掌控。若改為允許 IP 規則觸發解析,也要一併評估解析路徑、耗時及回傳位址是否符合預期。
- 私有網段規則只會決定已進入核心的連線使用哪個出口,不會自動建立區域網路路由,也不會授予應用程式存取內網的權限。
- 這份範例只列出常見的私有 IPv4 網段;若使用 IPv6 內網,還需依實際網路補上相應規則。
- 使用 fake-ip DNS 時,應留意核心還原的網域與實際解析結果,不要直接將 fake-ip 位址範圍加入一般直連網段。
- 同一項服務可能使用多個網域。如果首頁正常,但圖片、登入或下載失敗,請從連線記錄找出遺漏的網域,不要直接將所有流量改為直連。
四、加入 GEOSITE:以網域分類補足中國大陸直連
GEOSITE 依據網域集合比對,不會根據伺服器 IP 推測網域歸屬。適合放在 GEOIP 前面,讓已分類的中國大陸網域直接使用 DIRECT。不過,集合內容取決於所使用的資料庫,不同資料來源的分類名稱和涵蓋範圍可能不同。
在 mihomo 中,可以採用以下局部結構。合併時保留上一節已確認的本機網段與手動例外;不要將這裡較短的 rules 誤認為必須取代原有規則清單的完整方案。
geodata-mode: true
rules:
- DOMAIN-SUFFIX,github.com,Proxy
- DOMAIN-SUFFIX,githubusercontent.com,Proxy
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,Proxy
geodata-mode: true 會讓 GEOIP 使用 DAT 資料模式;這種用法需要可用的 geoip.dat,而 GEOSITE 也需要 geosite.dat。請確認用戶端所用核心的工作目錄、資料庫載入記錄,以及資料來源確實包含 cn 分類。若沒有該分類,調整大小寫或反覆重新啟動都無法解決問題。
若記錄顯示資料庫載入失敗或找不到分類,請先還原上一節的基本規則,再修復資料檔。不要在同一次修改中同時更換 DNS、資料庫和代理節點,否則難以判斷是哪項調整改變了行為。
五、rule-providers 實作:將手動規則拆成易維護的檔案
規則增加後,可將中國大陸直連與強制代理項目拆成兩個檔案,減少重複編輯主設定的情況。以下使用本機 file 類型,避免直接加入來源不明的規則網址。檔案路徑以核心實際使用的設定目錄為準;透過用戶端匯入時,也要確認用戶端是否會複製或改寫設定目錄。
步驟一:建立兩個規則檔案
在核心設定目錄下建立 rules 資料夾,將以下內容分別儲存為 rules/direct.yaml 和 rules/proxy.yaml。這裡採用 classical 行為,因此每個項目都包含規則類型,但不包含最後的出站名稱。
# rules/direct.yaml
payload:
- DOMAIN-SUFFIX,bilibili.com
- DOMAIN-SUFFIX,bilivideo.com
- DOMAIN-SUFFIX,qq.com
- DOMAIN-SUFFIX,jd.com
# rules/proxy.yaml
payload:
- DOMAIN-SUFFIX,github.com
- DOMAIN-SUFFIX,githubusercontent.com
- DOMAIN-SUFFIX,wikipedia.org
步驟二:定義提供者並加入規則
以下片段整合了本機 IPv4 網段、兩個規則集合、中國大陸網域分類及 IP 分類。現有設定仍須先定義有效的 Proxy 策略群組,且上一節提到的資料庫必須能正常載入。
mode: rule
geodata-mode: true
rule-providers:
local-direct:
type: file
behavior: classical
format: yaml
path: ./rules/direct.yaml
local-proxy:
type: file
behavior: classical
format: yaml
path: ./rules/proxy.yaml
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
- RULE-SET,local-proxy,Proxy
- RULE-SET,local-direct,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,Proxy
若兩個集合都包含同一個網域,仍會依主設定中 RULE-SET 的排列順序處理。本例將強制代理集合排在中國大陸直連集合之前,讓它覆寫例外項目。集合名稱只是識別名稱,不會自動決定優先順序。
步驟三:檢查格式與更新方式
- YAML 階層:使用空格縮排,不要使用定位字元。同一份設定只保留一個頂層
rules和一個頂層rule-providers,並將新增項目合併至其中。 - 行為與內容:
classical檔案應填入DOMAIN-SUFFIX,github.com這類完整規則條件,不要混入純網域清單。domain和ipcidr行為各自有不同的內容格式。 - 本機更新:
type: file不會定時從網路下載內容。修改檔案後,請使用用戶端支援的重新載入或規則集更新功能使設定生效,再檢查記錄。 - 遠端更新:若改用
type: http,還需填寫可信任的實際 URL、快取路徑和更新間隔。例如interval: 86400代表 86400 秒,也就是 24 小時,不是 86400 毫秒。
訂閱更新與規則提供者更新是兩回事。前者可能重建整份設定,後者通常只會更新單一規則集合。若規則每次訂閱更新後都消失,請檢查用戶端的覆寫合併順序,而不是一再編輯暫時產生的檔案。
六、驗證分流:檢查規則、策略鏈與新連線
網頁能開啟,只代表某條存取路徑可用,無法證明連線符合預期規則。建議先將記錄層級設為 info,並在連線頁面同時檢查目標網域、目標 IP、符合的規則和出站鏈。不同用戶端的頁面名稱可能不同,請以實際顯示的欄位為準。
- 載入前檢查語法。若直接管理 mihomo,可在相同工作目錄執行
mihomo -t -f ./config.yaml。設定檔名稱與路徑應符合實際檔案;使用圖形介面用戶端時,也應使用內建的設定檢查功能。 - 測試直連範例。重新連線至
www.bilibili.com,確認是否符合local-direct,且最後使用DIRECT。頁面中的其他資源可能符合不同規則,請逐筆檢查記錄。 - 測試代理範例。重新連線至
github.com,確認是否符合local-proxy。展開出站鏈,確認Proxy目前選取的是代理節點,而不是群組中的DIRECT。 - 測試兜底規則。選擇一個不在手動集合中的網域,觀察它符合的是 GEOSITE、GEOIP 還是 MATCH。不要預設「未列入手動規則的網域」就一定會走代理。
- 關閉舊連線後重新測試。重新載入規則通常不會切換已建立的連線。瀏覽器連線重用、HTTP/2 和 QUIC 都可能讓舊路徑繼續使用;請關閉相關連線或離開應用程式後,再重新發出請求。
使用明確指定的代理,區分「流量未進入核心」與「規則未符合」
若設定的 mixed-port 是 7890,可在終端機執行以下兩次請求。若使用其他連接埠,請替換為實際值;Windows PowerShell 可使用 curl.exe,避免與其他命令別名混淆。7890 僅為範例連接埠,並非所有用戶端的固定設定。
curl -I --proxy http://127.0.0.1:7890 https://www.bilibili.com
curl -I --proxy http://127.0.0.1:7890 https://github.com
伺服器可能會對 HEAD 請求回傳重新導向或拒絕狀態,這不影響確認連線是否進入核心。重點是同步查看連線記錄。若明確指定代理的請求有記錄,但瀏覽器或遊戲沒有,應優先檢查系統代理、應用程式本身的代理設定或 TUN 接管範圍,不要先擴充規則清單。
TUN 模式負責接收符合路由條件的網路流量,不代表所有流量都會強制走代理;流量進入核心後,仍需依模式和規則選擇出口。並非所有應用程式都會遵循系統代理;兩者處理的是流量如何進入核心,而不是取代規則比對。
七、常見問題與維護順序
| 現象 | 優先檢查項目 | 處理方式 |
|---|---|---|
| 中國大陸網站仍走代理 | 是否符合 MATCH、連線是否只有網域中繼資料 | 補上網域規則,確認 GEOSITE 分類及 no-resolve 的影響 |
| 顯示 Proxy,實際卻使用本機出口 | 策略群組目前的選項與完整出站鏈 | 確認群組中選取的是有效代理節點,而非 DIRECT |
| 修改後行為沒有改變 | 生效中的設定、目前模式與既有連線 | 重新載入正確的設定,關閉舊連線後再測試 |
| 規則提供者載入失敗 | 檔案路徑、payload、behavior 與縮排 | 先修正本機檔案,再處理遠端下載問題 |
| 部分圖片或登入功能失敗 | 失敗請求使用的其他網域及其出口 | 為必要的相關網域設定一致的出口 |
| 只有某個應用程式未依規則連線 | 該應用程式的連線是否出現在核心中 | 檢查應用程式代理或 TUN 路由接管,不要先修改分類資料庫 |
維護時依「流量接管路徑 → 規則模式 → 生效中的設定 → 符合的規則 → 策略群組選項 → 節點連線狀態」依序排查。規則負責選擇出口,無法修復失效的節點,也無法保證直連線路本身正常。若已確認符合正確規則,接著應檢查對應出口,而不是重複新增相同網域。
若要進一步了解規則模式、監聽連接埠與策略群組,請參閱代理模式說明、連接埠說明和策略群組說明;訂閱更新造成設定被覆寫的問題,可從訂閱相關疑難排解繼續查找。