如果你想讓「所有中國大陸網站」或者「所有常見廣告網域」都統一走某條規則,手動寫幾十條 DOMAIN-SUFFIX 顯然不現實,而且社群裡已經有人維護好了這類規則集並持續更新。Rule Provider 就是讓你的設定檔「引用」這些遠端規則集的機制,本地只需要寫一行引用,規則內容由遠端檔案自動更新。
01基本寫法
Rule Provider 分兩步:先在 rule-providers 裡宣告規則集來源,再在 rules 裡用 RULE-SET 引用它。
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/rules/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- GEOIP,CN,DIRECT
- MATCH,PROXY02behavior 欄位的三種類型
behavior 決定了這個規則集裡的內容該怎麼被解析,寫錯會導致規則集完全不生效,是最容易出錯的一個欄位。
| behavior | 規則集內容格式 | 典型用途 |
|---|---|---|
| domain | 純網域清單,每行一個網域或網域後綴 | 廣告網域黑名單、特定網站分流清單 |
| ipcidr | 純 IP 段清單,每行一個 CIDR | 中國大陸 IP 段、特定雲端服務商 IP 段 |
| classical | 完整的規則語句(不含最終策略),如 DOMAIN-SUFFIX,x.com | 規則類型混合、更靈活的自訂規則集 |
type 欄位:http 還是 file
type: http 表示從遠端 URL 定期拉取更新,是最常見的用法;type: file 則表示直接使用本地已有的規則集檔案,適合你自己維護、不需要連網更新的場景。
03常見的規則集來源
社群裡比較知名的規則集專案包括基於網域分類整理的 GeoSite 系列、以及各類「ACL4SSR」風格的規則合集,它們通常會同時提供 domain 和 classical 兩種格式的檔案,具體連結可以在對應專案的官方儲存庫中找到,使用時注意核對 behavior 是否與你選用的檔案格式一致。
04為什麼規則集不生效
- behavior 和檔案格式不匹配:比如遠端檔案其實是純網域清單,卻寫成了 behavior: classical,核心解析會直接報錯或忽略該規則集。
- path 指向的本地快取過期:如果修改了 url 但本地已經快取過一份舊檔案,有些用戶端不會自動覆蓋,需要手動刪除 path 對應的本地檔案後重新拉取。
- interval 設定過長:更新間隔(單位:秒)設定得太長會導致規則集長期停留在舊版本,日常使用建議設定為 43200~86400(12~24 小時)。
05Rule Provider 和一般規則可以混用嗎
可以,而且這是最常見的用法。rules 清單裡 RULE-SET 引用和一般規則(如 DOMAIN-SUFFIX、GEOIP)完全可以混合書寫,核心依然按照「從上到下逐條比對,命中即停止」的順序處理,不會因為規則來源不同而區別對待。實際設定中,通常會把幾個常用的規則集(比如廣告封鎖、中國大陸網站直連)放在前面,中間穿插一些你自己手寫的特殊網域規則,最後用一條兜底規則收尾,兩種寫法搭配使用反而是更省心的做法。
06自己維護規則集檔案是否有必要
對絕大多數一般使用者來說,沒有必要。社群維護的規則集已經涵蓋了廣告封鎖、境內外網站分類等主流需求,且有持續更新維護,直接引用即可。只有當你有非常特殊的分流需求(比如公司內部網域、自己長期維護的特定網站清單)且這些內容不適合公開分享時,才值得考慮用 type: file 搭配本地檔案自己維護一份規則集,平時正常使用手寫幾條規則或者用 rules 裡的一般規則完全夠用。