想擋廣告,就得在 rules 裡手寫幾百條廣告網域嗎?大可不必。規則集(rule-providers)讓你像訂閱節點一樣訂閱規則:社群維護、定時更新,你的設定檔只需要一行引用。
規則集是什麼
一般規則直接寫在 rules 裡,一條管一個比對;規則集則是把成百上千條同類規則打包成一個外部檔案,我定時去抓取更新。兩者搭配使用:
- rule-providers 區塊:宣告「有哪些規則包、從哪裡下載、多久更新」。
- rules 區塊:用
RULE-SET,包名,出口一行引用整個包。
宣告一個規則集
rule-providers: reject-ads: type: http behavior: domain url: "https://example.com/ruleset/reject.yaml" path: ./ruleset/reject.yaml interval: 86400 # refresh once a day local-direct: type: http behavior: domain url: "https://example.com/ruleset/direct-local.yaml" path: ./ruleset/direct-local.yaml interval: 86400 telegram-cidr: type: http behavior: ipcidr url: "https://example.com/ruleset/telegram.yaml" path: ./ruleset/telegram.yaml interval: 86400
欄位逐一解釋:
| 欄位 | 說明 |
|---|---|
type | http 遠端訂閱(建議)或 file 本地檔案 |
behavior | 規則格式:domain(純網域)/ ipcidr(純 IP 段)/ classical(混合完整規則) |
url | 規則檔案的下載位址 |
path | 本地快取路徑,斷網時用快取當備援 |
interval | 自動更新間隔(秒),86400 = 24 小時 |
在 rules 裡引用
rules: - RULE-SET,reject-ads,REJECT # thousands of ad domains, one line - RULE-SET,local-direct,DIRECT - RULE-SET,telegram-cidr,節點選擇 - MATCH,節點選擇
順序依然重要:攔截類規則集放最前面,直連類其次,最後防線 MATCH 永遠排在最後。
behavior 怎麼選
三種格式對應不同的比對效能,選對了能讓比對更快:
- domain:內容全是網域時用它,我會建構前綴樹,幾萬條規則命中耗時也在微秒級。
- ipcidr:內容全是 IP 段時用它,底層是高效率的 trie 結構。
- classical:混合了 DOMAIN、IP-CIDR、PROCESS-NAME 等多種類型時才用,靈活但比對開銷最大。
規則集更新失敗怎麼辦
規則集畢竟依賴外部下載,偶爾會遇到更新失敗的情況。排查思路按順序來:
- 先看本地快取:
path指向的檔案如果存在,我會先用舊版本當備援,不會因為一次更新失敗就讓整個規則集失效,所以你可能完全沒感覺到問題——這也是為什麼建議隔一段時間主動檢查一下更新時間。 - 檢查下載位址是否還有效:社群維護的規則集偶爾會搬移倉庫或改路徑,在瀏覽器裡直接打開
url看能不能存取,存取不了就去規則集的專案首頁找最新位址替換。 - 確認 interval 沒設得太離譜:見過有人把 interval 設成幾十秒,觸發了來源站的限流反而經常失敗,日常情境 43200~86400 秒(12~24 小時)就足夠。
常見的規則集去哪裡找
不需要自己從零攢規則,GitHub 上有幾個長期維護、星數很高的規則集倉庫,涵蓋廣告攔截、本地直連、串流媒體解鎖、常見 App 分流等情境,搜尋「clash rule providers」或「ruleset」基本都能找到。挑選時留意兩點:最近是否還在更新、behavior 類型是否和你的引用方式相符。規則集和我這個客戶端本身是兩回事——規則集決定「怎麼分流」,我負責「怎麼連線、怎麼排程」,兩者搭配才能既乾淨又好用。
把廣告攔截規則集接進來之後,很多網頁上討厭的橫幅廣告會直接從源頭消失,比裝瀏覽器擴充功能還省心——畢竟這是在網路層攔截,所有裝置、所有 App 都能一起生效。
手寫規則和規則集要怎麼搭配,而不是二選一
很多人一上手規則集就把所有手寫規則全刪了,其實不必這麼徹底。兩者的定位不同:規則集適合處理「數量龐大、更新頻繁、自己維護不現實」的情境,比如成千上萬條廣告網域或是隨時可能變化的串流媒體 IP 段;手寫規則則更適合「數量很少但你非常在意優先權、需要精確控制」的情境,比如公司內網網域、自己常用的幾個特殊網站。
建議的寫法是:把個人化的手寫規則放在最前面,確保它們優先命中;規則集緊接著處理大批量的通用分類;最後用 MATCH 當最後防線。這樣既保留了靈活性,又不用為了幾百條廣告網域把設定檔撐到幾千行,維護成本大幅下降。
一個新手最容易忽略的細節:規則順序真的會影響結果
規則是從上到下逐條比對的,第一條命中就立即生效,後面的規則即使寫得再對也不會被執行到。所以如果你發現某個網站「明明配了規則卻沒生效」,八成不是規則寫錯了,而是前面某一條更寬泛的規則(比如某個規則集裡的通用條目)提前把它擋住了。排查這類問題最快的辦法是打開控制面板的連線頁,直接看這條連線實際命中的是哪一條規則,而不是對著設定檔乾猜——這一點在講控制面板的那篇文章裡也提到過,兩者結合起來用效率會高很多。
小結
規則集把「人工維護規則」這件苦差事交給了社群和自動更新,你要做的只是宣告來源、選對 behavior、按正確順序引用。記住三個關鍵點:攔截類放最前面,直連類緊接其後,MATCH 永遠當最後防線;behavior 要和規則集本身的內容格式對應,選錯會導致比對變慢甚至出錯;更新失敗時先看本地快取是否還在生效,再排查下載位址和更新間隔。設定一旦搭好,後續幾乎不用再手動維護,規則集自己就會隨著社群更新保持新鮮。
如果你目前設定檔裡還堆著幾百條手寫的網域規則,不妨挑個週末抽半小時,把能替換成規則集的部分都換掉——設定檔會立刻清爽很多,日後維護也不再是負擔。