首頁和詳細教學裡都提到了「規則分流」,也各給了一段範例,但都是點到為止。這篇文章把規則檔裡最常見的幾種比對類型、它們的比對順序,以及新手最容易寫錯的幾個地方,依實際例子完整過一遍。
連線之後,可以讓「所有流量」都走節點。這樣最省事,但也最浪費——台灣網站、網銀、Apple 服務直連更快,還不會佔節點額度。規則檔要做的只有一件事:依網域或 IP 決定直連還是代理,而不是一刀切。
規則檔本質上是一份純文字清單,每一行是一條規則,格式統一是:
類型,比對內容,策略
Shadowrocket 從上到下逐行讀取這份清單,某個網路請求命中了哪一行,就依那一行末尾寫的策略處理,命中即停止,不會繼續往下比對。
「類型」決定了這一行規則依什麼維度去比對請求,最常用的幾種如下:
| 類型 | 比對對象 | 範例 | 說明 |
|---|---|---|---|
| DOMAIN | 完整網域,精確比對 | DOMAIN,www.example.com,PROXY | 只比對這一個網域,子網域或其他前綴都不算命中 |
| DOMAIN-SUFFIX | 網域後綴 | DOMAIN-SUFFIX,netflix.com,PROXY | 比對 netflix.com 及其所有子網域(例如 www.netflix.com) |
| DOMAIN-KEYWORD | 網域中包含的關鍵字 | DOMAIN-KEYWORD,youtube,PROXY | 只要網域裡出現這個關鍵字就命中,範圍比後綴比對更寬,容易誤傷,謹慎使用 |
| IP-CIDR | IP 位址區段 | IP-CIDR,192.168.0.0/16,DIRECT | 依 IP 區段比對,常用於內網位址、特定伺服器 IP |
| GEOIP | IP 所屬國家/地區 | GEOIP,TW,DIRECT | 依目標伺服器所在地判斷。TW 代表台灣,常用來做「本地 IP 直連」的保底 |
| FINAL | 沒有比對到以上任何一條時的預設策略 | FINAL,PROXY | 必須放在規則檔最後一行,作用是「其餘情況怎麼處理」 |
策略部分(逗號後面的最後一項)通常是 PROXY(走代理節點)、DIRECT(直連)或 REJECT(拒絕連線,常用於封鎖廣告網域)。
這是規則檔裡最容易被忽略、也最關鍵的一點:規則是依順序從上到下逐條比對的,一旦某一行命中就立即依那一行的策略處理,不會繼續往下看。這意味著規則的先後順序會直接影響結果,即使後面還有更「精確」的規則,只要前面已經有一行命中了,後面的就不會被執行。
一個完整、可以直接理解的範例:
DOMAIN-SUFFIX,netflix.com,PROXY
DOMAIN-SUFFIX,pchome.com.tw,DIRECT
DOMAIN-KEYWORD,youtube,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,TW,DIRECT
FINAL,PROXY
依這份規則,造訪 www.netflix.com 會命中第一行(後綴 netflix.com)走代理;pchome.com.tw 命中第二行直連;路由器管理頁 192.168.1.1 命中第四行直連;伺服器 IP 在台灣則走到第五行 GEOIP 直連;都沒命中就落到 FINAL,PROXY。
FINAL 代表「以上都沒比對到時怎麼處理」,如果寫在中間,它後面的所有規則都會變成永遠不會被執行的「死程式碼」,因為請求只要到了 FINAL 這一行就已經被處理並停止比對了。FINAL 必須放在檔案的最後一行。
關鍵字比對的範圍比想像中寬,比如 DOMAIN-KEYWORD,ads,PROXY 不僅會比對到廣告網域,也可能誤傷網域裡恰好包含 "ads" 這幾個字母的正常網站。優先用 DOMAIN-SUFFIX 精確比對已知網域,只有在確實需要涵蓋大量相似網域、且能接受一定誤傷範圍時才用關鍵字比對。
串流或新聞網站常把快取放在你所在國家的 CDN。若 GEOIP,TW,DIRECT 太靠前,這些 IP 會被當成「本地」放行,反而到不了你要的片庫來源。務必走代理的網域請放前面,GEOIP 放後面比較穩。
如果編輯的是本機手動維護的規則檔,儲存後一般會立即生效;如果用的是訂閱形式的規則集,需要重新觸發一次更新(進入對應訂閱項目點「更新」),本機快取的舊規則不會自動重新整理。
多數供應商會附一份規則集,匯入即可。這篇文章是讓你看懂每一行,方便局部調整(例如把網銀網域加成直連),不是要每個人從零寫一份。
說明:本文規則語法基於 Shadowrocket 官方使用手冊與實測整理,不同版本對規則類型的支援可能略有差異,請以你所用版本的實際支援情況為準。
延伸閱讀:返回首頁:Shadowrocket 是什麼 · 進階規則設定教學