用 rule-providers 讓分流規則自動更新,不用手動改設定
如果你的 rules 欄位已經堆到幾十條甚至上百條,每次想加一個網域都要手動編輯檔案,那是時候了解一下 rule-providers 了——它能把規則集託管成遠端檔案,用戶端定時拉取即可。
手寫 rules 的問題在哪
直接在 rules 裡逐條寫 DOMAIN-SUFFIX、IP-CIDR 沒有問題,但當規則數量上升到成百上千條(例如想精確區分「境內網站直連、境外網站代理」)時,會遇到兩個麻煩:設定檔變得臃腫難以維護;規則本身需要持續更新(新增網域、修正誤判),手動同步很容易遺漏。
rule-providers 解決了什麼
rule-providers 把一整批規則託管成一個獨立檔案(本地或遠端 URL),主設定裡只需要引用它的名稱,並設定一個更新間隔,用戶端會按週期自動重新拉取,規則內容更新時你什麼都不用做。
behavior 欄位決定規則格式
domain:規則集內容是網域列表,逐行一個網域或網域後綴。ipcidr:規則集內容是 IP 段列表,逐行一個 CIDR。classical:規則集內容可以是完整的比對語法(和rules欄位寫法一致),最靈活但體積也最大。
interval 決定多久拉取一次
單位是秒,86400 就是 24 小時更新一次。規則集本身通常變化不會太頻繁,設成每天或每幾天更新一次即可,沒必要設得過短,避免給規則集的伺服器造成不必要的壓力。
常見用法:廣告攔截 + 區域直連
比較典型的組合是準備兩個規則集:一個用於攔截廣告與追蹤網域(命中後指向 REJECT),一個用於識別境內網站與 IP 段(命中後指向 DIRECT),剩下的流量全部走代理策略組,這樣只需要維護兩份規則集,就能覆蓋絕大多數分流需求。
behavior 即可,不必依賴任何第三方服務商。多個規則集如何組合使用
實際設定裡往往不止一個規則集,常見的組合是:廣告攔截規則集放在最前面優先判斷,接著是境內直連規則集,然後才是各個代理策略組對應的分流規則,最後用 MATCH 兜底。rules 欄位是自上而下逐條比對的,命中即停止,所以順序非常重要——如果把「全部走代理」的規則放在最前面,後面所有更精細的規則集都不會再被檢查到。
可以把這個順序理解為「先排除、再兜底」:先處理明確要攔截或明確要直連的流量,剩下沒被前面規則覆蓋到的,才交給最後的 MATCH 走預設策略組。
規則集的更新與遷移注意事項
規則集檔案下載後會快取在 path 指定的本地路徑,即便暫時斷網,用戶端依然能用上一次快取的版本繼續工作,不會因為拉取失敗而導致規則全部失效。如果你換了裝置或者重裝了用戶端,記得把 path 對應的快取目錄一起遷移過去,否則首次啟動時會重新觸發一次遠端下載,網路不佳時可能會有短暫的規則缺失。
另外,不同規則集之間的 behavior 必須與其內容格式匹配——用 domain 宣告卻提供了 classical 格式的內容會導致解析失敗,用戶端一般會在日誌裡給出明確的報錯提示,修改後重啟或等待下一次 interval 到期即可生效。
小結
rule-providers 把「規則內容」和「規則引用」拆開了:內容可以獨立更新、獨立維護,主設定檔只保留引用關係,長期來看會比一份幾百行的 rules 列表清爽得多,也更方便多臺裝置共用同一套規則。