如果你在 rules 裡手寫了幾百條 DOMAIN-SUFFIX,那基本可以確定:用錯方法了。規則集(rule-providers)能把這些常見分類打包成獨立檔案,統一維護、定時更新,設定檔本身反而會變得非常乾淨。

rule-providers 是什麼

簡單說,它是一份託管在別處(本機檔案或遠端 URL)的規則清單,Clash 定時抓取並載入,你只需要在 rules 裡用一行 RULE-SET 引用它,而不用把幾百條規則堆進主設定檔。

rule-providers: reject: type: http behavior: domain url: "https://example.com/rules/reject.txt" path: ./rules/reject.yaml interval: 86400 rules: - RULE-SET,reject,REJECT - MATCH,PROXY

behavior 欄位:三種規則集格式

behavior內容格式常見用途
domain網域 / 網域後綴清單廣告封鎖、串流分流、社群平台網域集
ipcidrIP 段清單本地 IP 段、特定機房 IP 段直連
classical完整規則語法(含類型前綴)混合類型、需要精確控制比對方式的場景
behavior 必須與規則集檔案的實際內容格式一致,用錯會導致規則集載入失敗或比對異常,務必參照規則集來源方給出的說明填寫。

type:http 還是 file

  • http:從遠端 URL 定時抓取,適合跟隨社群維護的規則集持續更新。
  • file:只讀取本機檔案,不會自動更新,適合你自己維護的私有規則。

常見規則集來源

社群裡有不少長期維護的開源規則集專案,涵蓋廣告封鎖、本地直連、串流分區、社群平台分流等分類,可以按需選取幾個組合使用,避免自己從零編寫。

不需要一次性引入太多規則集,規則集數量越多,核心啟動與規則比對的負擔也會略微增加,按實際需求選取即可。

常見規則集分類怎麼組合

如果不知道該引入哪些規則集,可以按「優先度由高到低」的思路來組織:先處理廣告/隱私追蹤封鎖(避免不必要的連線),再處理必須直連的本機/內網位址,然後是需要特殊分流的串流與社群平台,最後再兜底一條本地 IP 段直連規則,剩下沒比對到的流量預設走代理。這個順序背後的邏輯是:影響範圍小、判斷依據明確的規則放前面,模糊的兜底規則放最後,避免大範圍規則「搶先」攔截了本該精確比對的流量。

自己維護一份私有規則集

公司內部服務、自己常用但小眾的網站,社群維護的規則集大機率不會覆蓋,這種場景就適合用 type: file 建一份本機維護的規則檔案,格式和遠端規則集完全一致,只是不會自動從網路更新,需要自己手動編輯維護:

rule-providers: private: type: file behavior: domain path: ./rules/private.yaml

把公司 VPN、內部管理後台之類的網域放進這份私有規則集,既能保持主設定乾淨,也不用擔心和公用規則集混在一起被覆蓋。

怎麼設定自動更新

interval 欄位控制更新頻率,單位為秒。常見做法是給廣告封鎖、串流分流這類更新頻繁的規則集設定較短間隔(如一天),而相對穩定的規則集可以設定更長間隔(如一週)。

rule-providers: streaming: type: http behavior: classical url: "https://example.com/rules/streaming.yaml" path: ./rules/streaming.yaml interval: 43200 # 12 小時更新一次

規則集也要注意比對順序

和一般規則一樣,RULE-SET 引用同樣遵循「從上到下,命中即停止」的原則。如果把範圍寬泛的規則集放在前面,後面更精確的規則可能永遠比對不到,排查時記得優先檢查規則順序。

規則集載入失敗怎麼排查

規則集設定出錯通常有幾種典型表現:核心啟動報錯、面板/日誌裡提示規則集下載失敗,或者規則看起來載入成功但完全沒有生效。排查時可以按下面的順序逐一排除:

  1. 檢查 URL 是否可存取:直接在瀏覽器裡開啟 url 欄位的位址,確認能正常下載到文字內容,而不是 404 或者需要額外驗證。
  2. 核對 behavior 是否符合檔案格式:開啟下載到本機的規則檔案看內容格式,確認與設定的 behavior(domain/ipcidr/classical)一致。
  3. 確認 path 指向的目錄有寫入權限:核心需要把遠端內容快取到本機 path 指定的路徑,如果目錄沒有寫入權限會導致更新失敗。
  4. 查看規則引用名稱是否拼寫一致rule-providers 裡定義的名稱必須和 rulesRULE-SET,名稱,... 完全一致,大小寫、拼寫錯誤都會導致規則被靜默忽略。

規則集快取要不要手動清理

正常情況下不需要。核心會根據 interval 自動判斷快取是否過期並重新抓取,不需要手動干預。但如果懷疑本機快取的規則檔案已經損壞(比如上次下載過程中被中斷),或者規則集來源方更新了內容格式導致解析異常,可以手動刪除 path 指向的本機檔案,重啟核心後它會重新完整下載一份,相當於強制刷新一次快取。

規則集會不會拖慢啟動速度

引入規則集之後,核心每次啟動(或者規則集快取過期需要更新時)都需要額外花時間下載並解析這些檔案,規則集數量越多、單個檔案越大,啟動耗時也會相應增加。對絕大多數家庭使用場景來說,這點耗時幾乎感覺不到;但如果你在資源有限的裝置(比如低效能路由器)上執行核心,同時引入了大量規則集,可以考慮適當延長 interval,減少不必要的頻繁重新下載,把更新頻率控制在真正需要的範圍即可。

小結

與手寫規則相比,規則集的最大價值在於「解耦」與「自動更新」:主設定只保留少量自訂規則和策略群組結構,繁瑣的網域/IP 分類都交給外部規則集去維護,減少了大量重複勞動,也更容易長期維護。