本文目錄
規則從一條真正走錯的連線開始
規則不是按網站首頁標題匹配,而是按實際連線中的網域、IP、處理程式等資訊匹配。一個頁面可能同時請求主網域、登入網域、圖片 CDN 和 API;只憑位址欄寫一條規則,常常只修好頁面的一部分。
固定節點並保持 Rule 模式,重複失敗動作,到 Connections 記錄目標、目前命中的規則和出口。需要改的是「這條連線為什麼先命中這裡」,而不是把網路上的整份規則表塞進設定。
動手前留下四項
- 失敗連線的完整網域或目標 IP
- 目前顯示的規則類型與規則內容
- 最終使用的策略群組或 DIRECT
- 這條連線實際應該去的策略
Mihomo 從上往下匹配,命中第一條就停止
更具體的規則通常放在更寬的規則前面。下面把 api.example.com 交給示例中已經定義的「代理選擇」,並讓更寬的 example.com 規則保持 DIRECT;末尾的 MATCH 接住此前沒有匹配的連線。
proxy-groups:
- name: 代理选择
type: select
include-all: true
proxies:
- DIRECT
rules:
- DOMAIN,api.example.com,代理选择
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,代理选择儲存並重載設定後,關閉舊頁面連線,再發起新請求。Connections 顯示 DOMAIN,api.example.com 和「代理選擇」,說明規則與順序同時生效;仍顯示上一條結果時,可能是連線重用或目前 Profile 沒有載入這份修改。
同一來源的長名單,才值得交給 rule-providers
只有幾條本機網域時,直接規則更容易讀。某個專案維護了幾十、幾百條網域或 IP,且需要定期更新,才用 rule-providers 把資料源與主設定分開。主 rules 中用 RULE-SET 引用 provider,並為整組指定策略。
provider 只是規則資料,不會自己選擇節點。示例中的「RULE-SET,work-domains,代理選擇」把匹配結果交給已經定義的「代理選擇」;如果換成自己的組名,proxy-groups 和 rules 兩處必須完全一致。
proxy-groups:
- name: 代理选择
type: select
include-all: true
proxies:
- DIRECT
rule-providers:
work-domains:
type: http
behavior: domain
format: yaml
url: https://rules.example.com/work.yaml
path: ./ruleset/work.yaml
interval: 86400
rules:
- RULE-SET,work-domains,代理选择
- MATCH,代理选择behavior 要和檔案內容一致
rule-provider 的 behavior
| 值 | 檔案裡放什麼 | 不適合放什麼 |
|---|---|---|
| domain | 網域、網域後綴等網域集合 | IP 網段與完整經典規則行 |
| ipcidr | IPv4 / IPv6 CIDR | DOMAIN、PROCESS-NAME 等條件 |
| classical | 帶類型的完整規則,例如 DOMAIN-SUFFIX,... | 只想維護純網域時會顯得冗長 |
format 用來說明檔案編碼形式,常見有 yaml、text 和 mrs。behavior 和 format 是兩件事:一個說明規則語義,一個說明檔案怎麼儲存。把純網域文字聲明成 ipcidr,下載可能成功,載入仍會發生錯誤。
先查看規則源自己公佈的格式說明,不要根據 URL 後綴猜。源檔案改變格式時,用戶端快取的舊檔案也可能繼續存在,日誌中的 provider 名稱和解析錯誤能幫助確認。
規則集更新失敗,要看 url、interval、proxy 和 path
- type
- http 從遠端更新,file 讀取本機檔案,inline 把內容直接放在設定中。
- url
- 遠端規則源位址;401、403、404 和 timeout 應按 HTTP 結果處理。
- interval
- 更新間隔,單位為秒。過短只會增加請求,並不會讓規則更準確。
- proxy
- 指定下載規則源時使用的代理;源站本機可達時也可以按設定直連。
- path
- 快取檔案路徑。Mihomo 預設限制在 HomeDir,外部路徑需要 SAFE_PATHS。
provider 下載失敗時,舊快取可能仍被使用,所以「網站還能開啟」不代表今天更新成功。查看 provider 的本次更新時間與日誌,保留舊快取到新源恢復,不要直接刪掉所有規則檔案。
遠端訂閱會被覆蓋,自訂規則應放進覆寫
直接編輯下載到 Profiles 目錄的遠端 YAML,當下可能有效,下一次訂閱重新整理會把它替換。Clash Verge Rev 等用戶端提供合併、指令碼或規則覆寫能力,用來在遠端設定載入時插入本機內容;具體入口隨版本不同,應使用目前用戶端的 Profile 覆寫頁面。
一條需要優先執行的自訂規則,應透過 prepend 或等效的前置合併放到訂閱寬規則之前。只是把它追加到 MATCH 後面,檔案裡雖然能看到,執行階段永遠不會到達。
prepend-rules:
- DOMAIN,api.example.com,DIRECT
- DOMAIN-SUFFIX,intranet.example,DIRECT重載後看執行階段命中,不要只看編輯器裡有這行
驗證一條覆寫規則
儲存並啟用覆寫
確認它綁定到正在使用的遠端 Profile。
重載設定
日誌不應出現 rule、provider 或 proxy group 解析錯誤。
關閉舊連線
避免瀏覽器重用修改前建立的會話。
重複目標動作
在 Connections 讀取新規則和最終策略。
手動更新訂閱
更新後再請求一次,確認覆寫沒有消失。
兩次請求都命中同一自訂規則,才證明「目前有效」和「更新後保留」同時成立。只在編輯器裡搜尋到文字,不能代表它已經進入 Mihomo 的執行設定。
規則不生效時,按下載、解析、引用、順序四層檢查
provider download 401 / 403 / 404
處理遠端位址、權限或已遷移路徑,規則語法還未參與。
provider parse error
核對 behavior、format 與源檔案實際內容。
RULE-SET not found
rules 引用名與 rule-providers 鍵名不一致。
proxy group not found
規則目標組在目前訂閱中不存在或已經改名。
規則載入但總命中前一條
調整順序,讓具體規則位於寬規則和 MATCH 之前。
訂閱更新後自訂項消失
停止直接改遠端檔案,改用綁定目前 Profile 的覆寫。
每條新增規則都要能解釋執行結果
規則越多,互相遮擋的機會越大。完成目標網域的驗證後,檢查同一頁面的其他連線是否仍按預期直連或代理;若只需要三條規則,就不必引入一個包含數萬條未知來源的清單。
收尾時用一句話說明執行結果:哪條連線命中了哪個條件,進入哪個策略群組,訂閱更新後仍然如此。解釋不了的規則暫時不加,日後節點和 Profile 改名時也更容易維護。
