一、先確認分流依據:網域、目標 IP 與備援策略
中國大陸與海外分流並非依網頁語言或公司註冊地判斷。Clash 規則引擎會根據連線可取得的網域、目標 IP 等資訊,依設定順序尋找符合項目。本文的目標是:明確列入直連範圍的網域優先直連,已知的中國大陸 IP 嘗試直連,其餘連線則交由代理群組處理。
這是一套便於維護的路由策略,並非精確分類所有網站的地理位置。跨國服務可能使用中國大陸 CDN,中國大陸服務也可能連線至海外 API。網域規則代表使用意圖,GEOIP 補充 IP 位址歸屬,兩者不能互相取代。
| 規則 | 判斷依據 | 適用範圍 |
|---|---|---|
DOMAIN | 完整網域 | 單一主機名稱的精確例外 |
DOMAIN-SUFFIX | 網域後綴 | 主網域及其子網域 |
GEOIP | 目標 IP 的資料庫歸屬 | 補足網域清單未涵蓋的連線 |
MATCH | 前面的規則皆未命中 | 所有其餘連線的備援策略 |
設定生效的三個前提
- 用戶端必須處於
rule規則模式。全域模式不會依本文的規則清單選擇出口。 - 目標應用程式的流量確實進入用戶端。系統代理僅適用於遵循代理設定的應用程式;TUN 則仰賴虛擬網卡、路由與權限設定。
- 規則引用的代理群組必須已存在。本文使用的群組名稱為
海外代理,請替換為目前設定中的實際名稱。
二、將 DOMAIN-SUFFIX 排在 GEOIP 前面
DOMAIN-SUFFIX,qq.com,DIRECT 可比對 qq.com 和 mail.qq.com,但不會比對 notqq.com。規則會依網域標籤邊界辨識後綴,不必寫成 *.qq.com,也不要將 https://、連接埠或 URL 路徑填入網域欄位。
標準規則清單採用由上而下、首次命中即停止的原則,不會自動挑選「較精確」的規則。因此,同一網站需要局部例外時,應先寫精確網域,再寫範圍較大的後綴規則;若後綴規則已命中,後續的 GEOIP 就不會改變結果。
基本規則片段
mode: rule
rules:
- DOMAIN,localhost,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
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,taobao.com,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,海外代理
這段設定會保留常見私有網路位址、IPv6 唯一本機位址與迴路位址直連,接著處理兩個明確指定的網域後綴。它並未涵蓋所有特殊用途位址;若網路使用 IPv6 鏈路本機位址、多點傳播或企業自訂路由,請配合現有的區域網路規則補充,不要直接刪除原設定中的相關項目。
DIRECT是內建的直連策略,並不代表流量不經過用戶端,而是由用戶端以直連方式建立出口連線。海外代理是自訂的策略群組名稱,規則中的名稱必須與proxy-groups中的名稱完全一致。MATCH必須放在最後。若提早放置,後續規則就不會有命中機會。
若需求是「某個子網域必須走代理,但主網域其餘部分直連」,可在後綴規則前新增一條 DOMAIN,指定的完整主機名稱,海外代理。不要只為了處理一個介面,就把整個大型服務的網域後綴改成代理;這會擴大變更範圍,也更難驗證。
三、GEOIP 與 no-resolve:是否主動解析網域以進行比對
GEOIP,CN,DIRECT 查詢的是 IP 資料庫,而非即時判斷網站所屬國家。若目前連線只有網域資訊,規則引擎可能必須先解析網域,才能執行 IP 比對。實際解析行為也會受到核心實作、DNS 模式及連線既有中繼資料影響。
加入 no-resolve 的意思是:不要只為了這條 IP 規則主動進行網域解析。若連線已具備可供比對的目標 IP,仍然可以命中;若沒有可用 IP,就會繼續檢查後續規則。它不是「關閉 DNS」或「阻止 DNS 請求」的開關。
| 寫法 | 只有網域時 | 取捨 |
|---|---|---|
GEOIP,CN,DIRECT | 可能會觸發解析以判斷 IP | 增加依 IP 歸屬直連的機會,但會依賴解析 |
GEOIP,CN,DIRECT,no-resolve | 不為這條規則主動解析 | 減少比對階段的額外解析,部分網域連線會進入備援策略 |
如何選擇
- 已維護較完整的直連網域清單,並希望其餘網域直接交由代理群組處理:可優先使用
no-resolve。 - 若要依 IP 歸屬補足大量未列出的中國大陸網域,可評估不加這個參數,但也必須確認 DNS 是否可用,以及解析結果是否符合預期。
- 應用程式直接連線至 IP 位址時,目標位址已存在,
no-resolve通常不會妨礙比對該位址。
GEOIP 的準確性也取決於本機資料庫。位址區段移轉、資料庫更新延遲及 CDN 調度都可能造成偏差。mihomo 的地理資料設定也會影響實際讀取的資料檔案。若啟動記錄顯示資料庫遺失或讀取失敗,應先排除資料載入問題,而不是一再調整規則順序。
四、rule-providers:將直連網域整理成易維護的檔案
網域例外從幾條增加到幾十條後,繼續堆在主設定中容易重複或出錯。mihomo 可透過 rule-providers 宣告規則提供者,再以 RULE-SET 引用。提供者負責存放比對條件,最終採用哪種策略,仍由主設定中的引用規則決定。
主設定:宣告本機網域規則集
rule-providers:
domestic-domains:
type: file
behavior: domain
format: yaml
path: ./rules/domestic-domains.yaml
rules:
- DOMAIN,localhost,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
- RULE-SET,domestic-domains,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,海外代理
規則檔案:rules/domestic-domains.yaml
payload:
- '+.qq.com'
- '+.taobao.com'
- '+.jd.com'
在 mihomo 的 domain 類型規則集中,+.qq.com 代表該網域及其子網域。單引號用來保留網域模式的原始文字。這裡不要寫成 DOMAIN-SUFFIX,qq.com,DIRECT,因為這不是此檔案所需的網域項目格式。
behavior: domain:檔案存放網域比對項目,適合用於直連或代理網域清單。behavior: ipcidr:檔案存放 IP 網段,不可混入網域項目。behavior: classical:檔案存放DOMAIN-SUFFIX,qq.com等規則運算式,通常不會在項目末尾寫入策略名稱。
相對路徑應依核心工作目錄及用戶端的檔案存取限制判斷,不一定是相對於正在編輯的訂閱檔案。行動裝置用戶端也可能限制檔案匯入與儲存位置。儲存後,請確認規則集載入成功、項目數量合理,再重新建立連線測試。本機的 type: file 不會從網路自動下載內容,也不需要加入用於遠端更新的 interval。
若改用遠端規則集,請先核對來源檔案的 behavior 與 format。不可將網域純文字清單當成 YAML 檔案讀取,也不可將其他核心專用的二進位檔案交給不支援該格式的版本。
五、DNS、系統代理與 TUN:規則能取得哪些資訊
規則未命中,不一定是語法錯誤。請先確認連線進入用戶端時帶有哪些資訊。HTTP 代理請求通常會提供目標主機名稱;有些 SOCKS 應用程式會先在本機解析,接著只將 IP 傳給用戶端。即使後者造訪同一個網站,也未必能直接命中網域後綴規則。
三個常見限制
- 先由本機解析,再交給代理。 應用程式只提交目標 IP 時,網域規則就缺少直接比對條件。支援嗅探的核心可在部分通訊協定中補回網域資訊,但無法保證還原所有連線的主機名稱。
- DNS 接管範圍不足。 TUN 的 DNS 劫持設定不代表能識別所有加密 DNS。應用程式內建的 DoH 會使用 HTTPS 連線,不能簡單視為一般的 UDP 53 查詢。
- IPv4 與 IPv6 的路由可能不同。 同一網域可能同時取得 A 與 AAAA 記錄,兩次連線使用不同位址。只觀察 IPv4 測試結果,無法證明 IPv6 連線也會採用相同策略。
TUN 用於接管符合路由條件的 IP 流量,不會自動修正錯誤的規則清單。若系統代理與 TUN 同時啟用,請確認目前測試的應用程式實際使用哪個入口。企業 VPN、容器網段與虛擬機器網路也可能改變路由;無法存取內網時,先檢查是否有網段重疊,再考慮新增直連規則。
DNS 與出口需要分開驗證:解析成功只代表取得位址,不代表目標連接埠可連線;命中 DIRECT 也不代表直連路線可用。若網域解析至海外位址而未命中 GEOIP,這是規則依目前資料運作的結果,不一定是規則引擎故障。
六、規則未命中的排查順序與驗證案例
排查時一次只修改一個變數。先記錄失敗連線的網域、目標 IP、連接埠、命中規則與實際策略,再決定要調整網域清單或 IP 規則。以下是預期結果表,並非實際網路速度測試;各項結果都需要在目前的設定與網路環境中逐一驗證。
| 驗證項目 | 預期比對結果 | 檢查重點 |
|---|---|---|
192.168.1.1:80 | 私有網路 IP 規則 → DIRECT | 僅在該位址確實是本機閘道時測試 |
www.qq.com:443 | 網域後綴或規則集 → DIRECT | 連線記錄是否保留網域資訊 |
| 不在網域清單中的 CN 位址 | GEOIP → DIRECT | 連線是否已有可供比對的 IP |
| 其餘新建連線 | MATCH → 海外代理 | 群組中實際選取的節點或策略 |
依六個步驟定位問題,不要先重新安裝用戶端
- 確認目前使用的設定與模式。 檢查目前的設定名稱,確認處於規則模式,並查看正在執行的規則清單,而非只看編輯器中的檔案。
- 確認連線有進入用戶端。 在連線面板尋找目標請求。完全沒有記錄時,優先檢查系統代理、TUN 路由或應用程式本身的代理設定。
- 檢查第一條命中的規則。 若較早命中了範圍過大的網域規則,請將更精確的例外移到它前面。若命中提前出現的 MATCH,先調整備援規則的位置。
- 確認解析結果與資料庫。 查看目標 IP、使用 IPv4 或 IPv6,以及地理資料載入記錄。使用
no-resolve時,確認未命中是否因缺少可用 IP 所致。 - 檢查規則集是否載入。 路徑錯誤、縮排錯誤或格式不一致,都可能使規則提供者無法使用。先確認檔案可讀且項目已載入,再檢查 RULE-SET 的位置。
- 重新建立連線。 關閉目標應用程式的舊工作階段,或在用戶端中中斷對應連線後再試。規則檔案變更後,既有的長連線通常不會自動切換至其他出口。
完成驗證後,也要查看代理群組實際選用的策略。規則命中「海外代理」只代表連線交由該群組處理;若群組內選中 DIRECT,最後仍會直連。反之,規則命中直連但網頁無法開啟,問題可能出在 DNS、目標服務或本機網路,不應直接判定分流失效。