手寫幾百條 DOMAIN-SUFFIX 規則不現實,也沒法跟上網站變化。rule-providers 讓你引用外部維護的規則列表,定期自動更新。
基本結構
分兩步:先定義 provider,再在 rules 裡引用。
rule-providers:
cn-domain:
type: http
behavior: domain
format: text
url: "https://example.com/rules/cn-domain.txt"
path: ./ruleset/cn-domain.txt
interval: 86400
proxy: DIRECT
rules:
- RULE-SET,cn-domain,DIRECT
- MATCH,PROXY欄位逐個說
| 欄位 | 取值 | 說明 |
|---|---|---|
type | http / file / inline | 遠程、本地檔案、或直接內聯 |
behavior | domain / ipcidr / classical | 必須和檔案內容匹配 |
format | text / yaml / mrs | 檔案格式 |
url | 規則檔案地址 | type 為 http 時必填 |
path | 本地快取路徑 | 相對於設定目錄 |
interval | 秒 | 更新間隔,86400 = 一天 |
proxy | 策略名 | 用哪條線路去下載規則檔案 |
behavior:三種類型不能混用
這是最容易出錯的地方——behavior 寫錯了不會報錯,規則只是靜默失效。
domain
檔案內容長這樣:
google.com
+.youtube.com
www.github.com+. 前綴等價於 DOMAIN-SUFFIX(含所有子網域),不帶前綴是精確匹配。
ipcidr
1.0.1.0/24
8.8.8.8/32
2001:4860::/32classical
DOMAIN-SUFFIX,google.com
DOMAIN-KEYWORD,youtube
IP-CIDR,8.8.8.8/32,no-resolve
PROCESS-NAME,Telegram.exe注意:classical 檔案裡不寫策略名,策略由引用它的那條 RULE-SET 決定。
format:text、yaml 與 mrs
text:純文本,每行一條,# 開頭是註釋。最常見。
yaml:
payload:
- google.com
- "+.youtube.com"mrs:Mihomo 特有的二進位格式,體積小、載入快。只支援 domain 和 ipcidr 兩種 behavior,不支援 classical。
規則集很大(幾萬條以上)時優先用 mrs 版本,如果規則源提供的話。
interval:更新間隔怎麼設
| 規則集類型 | 建議 interval |
|---|---|
| 国內網域/IP 列表 | 86400(一天) |
| 廣告攔截列表 | 86400 |
| 串流媒體解鎖列表 | 43200(半天) |
| 自己維護的小列表 | 3600 或更長 |
設太短沒意義——這些列表一天也更新不了幾次,反而給規則托管方增加壓力。
完整實戰設定
一套覆蓋常見需求的規則集組合:
rule-providers:
# 廣告攔截
reject:
type: http
behavior: domain
format: text
url: "https://example.com/reject.txt"
path: ./ruleset/reject.txt
interval: 86400
proxy: DIRECT
# 国內網域直連
direct:
type: http
behavior: domain
format: text
url: "https://example.com/direct.txt"
path: ./ruleset/direct.txt
interval: 86400
proxy: DIRECT
# 需要代理的網域
proxy:
type: http
behavior: domain
format: text
url: "https://example.com/proxy.txt"
path: ./ruleset/proxy.txt
interval: 86400
proxy: DIRECT
# 国內 IP 段
cncidr:
type: http
behavior: ipcidr
format: text
url: "https://example.com/cncidr.txt"
path: ./ruleset/cncidr.txt
interval: 86400
proxy: DIRECT
# 本機/內網
lancidr:
type: http
behavior: ipcidr
format: text
url: "https://example.com/lancidr.txt"
path: ./ruleset/lancidr.txt
interval: 86400
proxy: DIRECT
rules:
- RULE-SET,lancidr,DIRECT,no-resolve
- RULE-SET,reject,REJECT
- RULE-SET,proxy,🚀 节点选择
- RULE-SET,direct,DIRECT
- RULE-SET,cncidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,🐟 漏网之鱼注意順序:內網 → 攔截 → 代理 → 直連 → IP 段 → 地理兜底 → MATCH。
代理列表放在直連列表前面,是因為有些網域會同時出現在兩個列表裡,代理優先更符合預期。
inline:直接內聯小規則集
不想為幾條規則單獨建檔案:
rule-providers:
my-work:
type: inline
behavior: domain
payload:
- "+.mycompany.com"
- "+.internal.corp"
- "gitlab.internal"file:使用本地檔案
自己維護的規則放本地:
rule-providers:
personal:
type: file
behavior: classical
path: ./ruleset/personal.list配合 interval 可以讓核心定期重讀檔案(部分版本支援)。改完檔案後重載設定最穩妥。
規則集不生效時怎麼查
看快取檔案
path 指定的檔案就在設定目錄下,直接打開看:
- 檔案不存在 → 下載失敗,檢查 url 和 proxy 設定
- 檔案內容是 HTML → url 回傳的是網頁(比如 404 頁面),地址寫錯了
- 檔案內容正常但規則不生效 → behavior 不匹配
Windows 上設定目錄一般在:
%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\看日誌
把日誌級別切到 debug,搜索 provider 名稱,能看到下載和載入的完整過程:
INFO Start initial provider cn-domain
INFO Provider cn-domain loaded, 12043 rules看到 loaded, N rules 說明載入成功了。如果 N 是 0,就是 behavior 或格式問題。
效能考慮
如果你的規則集加起來超過十萬條,且設備效能有限(軟路由、老手機),考慮:
- 換用 mrs 格式
- 刪掉用不到的規則集(比如你不看的串流媒體平台)
- 用
GEOSITE代替部分網域列表(核心內置資料庫,無需額外下載)
小結
- behavior 必須和檔案內容對應,寫錯了靜默失效
- IP 類規則集引用時加 no-resolve
- 給 provider 加
proxy欄位,避免更新失敗 - 規則集順序:內網 → 攔截 → 代理 → 直連 → IP → GEOIP → MATCH
- 不生效時先看 path 裡的快取檔案長什麼樣
下一篇是實戰:公司內網 + 国內直連 + 海外代理的三方共存設定。
相關文件
十幾種規則類型的語法、匹配邏輯與效能開銷對照表,講清楚 no-resolve 的作用、規則順序為什麼決定一切,以及怎麼用連接頁反查命中了哪條規則。
按行程分流的完整寫法:find-process-mode 怎麼開、行程名怎麼查、PROCESS-NAME 與 PROCESS-PATH 的區別、效能開銷,以及為什麼規則寫了不生效。