跳到主要內容

首頁 / 部落格 / 規則分流

rule-providers 遠程規則集:behavior、format 與更新策略

規則分流2026-07-211700 字約 4 分鐘
rule-providers 遠程規則集:behavior、format 與更新策略

手寫幾百條 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

欄位逐個說

欄位取值說明
typehttp / file / inline遠程、本地檔案、或直接內聯
behaviordomain / ipcidr / classical必須和檔案內容匹配
formattext / yaml / mrs檔案格式
url規則檔案地址type 為 http 時必填
path本地快取路徑相對於設定目錄
interval更新間隔,86400 = 一天
proxy策略名用哪條線路去下載規則檔案

behavior:三種類型不能混用

這是最容易出錯的地方——behavior 寫錯了不會報錯,規則只是靜默失效

三種 behavior 對應的檔案內容domain純網域列每行一個網域或 +.網域不能含 IP 或規則類型最常用ipcidr純 IP 段每行一個 CIDR不能含網域classical完整規則每行是「類型,內容」可混合各種類型最靈活但最慢
拿到一個規則檔案,先打開看內容長什麼樣,再決定 behavior

domain

檔案內容長這樣:

google.com
+.youtube.com
www.github.com

+. 前綴等價於 DOMAIN-SUFFIX(含所有子網域),不帶前綴是精確匹配。

ipcidr

1.0.1.0/24
8.8.8.8/32
2001:4860::/32

classical

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 特有的二進位格式,體積小、載入快。只支援 domainipcidr 兩種 behavior,不支援 classical。

三種格式的載入開銷(同一份十萬條網域列表的相對量級)mrs 二進位最快,記憶體佔用最低text 純文本解析耗時中等yaml需要完整 YAML 解析規則集條目少時差別可忽略;上萬條時 mrs 優勢明顯

規則集很大(幾萬條以上)時優先用 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 可以讓核心定期重讀檔案(部分版本支援)。改完檔案後重載設定最穩妥。

規則集不生效時怎麼查

排查順序檢查 behavior 與檔案內容是否匹配(最常見的錯誤)檢查 path 指向的檔案是否真的下載下來了日誌裡搜 provider 關鍵字,看有沒有下載失敗url 在瀏覽器裡能直接打開嗎規則集在 rules 裡的位置是否被前面的規則截胡了MATCH 是不是被誤放到了 RULE-SET 前面

看快取檔案

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 或格式問題。

效能考慮

大規則集的資源佔用1記憶體每萬條網域規則約佔用幾 MB,十萬條量級需要留意2首次載入需要下載並解析,會讓啟動慢幾秒3匹配耗時domain 類用後綴樹,接近 O(1);classical 是逐條比對,慢很多4建議優先用 domain

如果你的規則集加起來超過十萬條,且設備效能有限(軟路由、老手機),考慮:

  • 換用 mrs 格式
  • 刪掉用不到的規則集(比如你不看的串流媒體平台)
  • GEOSITE 代替部分網域列表(核心內置資料庫,無需額外下載)

小結

  • behavior 必須和檔案內容對應,寫錯了靜默失效
  • IP 類規則集引用時加 no-resolve
  • 給 provider 加 proxy 欄位,避免更新失敗
  • 規則集順序:內網 → 攔截 → 代理 → 直連 → IP → GEOIP → MATCH
  • 不生效時先看 path 裡的快取檔案長什麼樣

下一篇是實戰:公司內網 + 国內直連 + 海外代理的三方共存設定


相關文件

用 PROCESS-NAME 規則讓指定程式單獨走代理
規則分流 用 PROCESS-NAME 規則讓指定程式單獨走代理

按行程分流的完整寫法:find-process-mode 怎麼開、行程名怎麼查、PROCESS-NAME 與 PROCESS-PATH 的區別、效能開銷,以及為什麼規則寫了不生效。

2026-06-221765 字約 4 分鐘