本文適合已在 Shadowrocket(小火箭)中使用自己的現有設定,並想新增少量封鎖規則的使用者。先分清規則條件與 REJECT 策略,再依序備份設定、新增精確規則、檢查順序並驗證新請求。範例使用保留網域與文件專用位址,著重說明語法,並非可直接取代現有設定的封鎖清單。
一、REJECT 是策略,不是網域比對條件
一條規則通常由比對類型、比對內容與處理策略組成。例如 DOMAIN-SUFFIX,ads.example.com,REJECT 中,DOMAIN-SUFFIX 用來決定比對方式,ads.example.com 是要比對的網域後綴,REJECT 才是符合規則後的處理策略。只寫 REJECT,並不能指定要封鎖哪個網域。
當請求進入 Shadowrocket 的處理範圍,並依目前設定進行規則比對時,符合 REJECT 的連線會遭拒絕,不會繼續依該請求原本可能採用的 DIRECT 或代理策略轉送。這不等於刪除網頁元素,也不會重新排版頁面中的空白區域;App 可能顯示載入失敗、佔位區域或重試提示。
規則比對發生在連線處理過程中,但不要因此推論「符合 REJECT 就絕不會產生 DNS 查詢」。網域解析、快取,以及為 IP 類規則取得位址的流程,都會影響實際行為。REJECT 的作用是拒絕符合條件的連線,不是獨立的 DNS 隱私開關。
二、常見寫法:精確網域、網域後綴與 IP 網段
先從精確網域開始,只有確認整個子網域樹都應拒絕時,再擴大使用 DOMAIN-SUFFIX。規則中的網域不要包含 https://、路徑、查詢參數或結尾斜線。以下各行分別用來說明語法,不必全部加入同一份設定。
[Rule]
DOMAIN,ads.example.com,REJECT
DOMAIN-SUFFIX,metrics.example.com,REJECT
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
IP-CIDR6,2001:db8::/32,REJECT,no-resolve
| 規則類型 | 比對範圍 | 使用注意事項 |
|---|---|---|
DOMAIN | 指定的完整網域。 | 適合只拒絕一個已確認的主機名稱。 |
DOMAIN-SUFFIX | 指定網域及其子網域。 | metrics.example.com 也會涵蓋 a.metrics.example.com,但不涵蓋 othermetrics.example.com。 |
IP-CIDR | IPv4 位址網段。 | 共用位址可能同時承載正常服務,不能把某個網域解析出的位址直接當成專用位址。 |
IP-CIDR6 | IPv6 位址網段。 | 只設定 IPv4 規則,無法涵蓋 IPv6 目標位址。 |
no-resolve 用來避免為了這條 IP 類規則主動將網域解析為 IP;這不代表關閉所有 DNS 解析,也不會阻止目標原本就是 IP 的請求參與比對。範例中的 192.0.2.0/24 與 2001:db8::/32 是文件專用位址,不能據此期待封鎖任何實際服務。
判斷原則:先縮小比對範圍,再擴大封鎖範圍
如果只觀察到一個主機名稱發出不需要的請求,先新增 DOMAIN 規則;確認各子網域的用途後,才改用 DOMAIN-SUFFIX。不要一開始就封鎖整個共用網段。
三、規則順序:例外放前面,FINAL 放最後
在一般規則清單中,請求會依序比對,由第一條符合的規則決定處理策略。把 REJECT 放在清單末尾,不代表它會覆蓋前面的允許規則;同樣地,前面已符合的廣泛封鎖規則,也不會被後面的例外規則取消。
[Rule]
DOMAIN,assets.ads.example.com,DIRECT
DOMAIN-SUFFIX,ads.example.com,REJECT
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
GEOIP,CN,DIRECT
FINAL,DIRECT
在這段範例中,assets.ads.example.com 會先符合精確例外;video.ads.example.com 則會符合下一條網域後綴封鎖規則。GEOIP 依目標 IP 的地理位置參與比對,不會辨識內容用途;若放在封鎖規則之前,符合條件的請求可能會先採用 DIRECT。FINAL 是前面的規則都未符合時使用的備援項目,應放在規則清單末尾。
精確例外
- 類型
DOMAIN- 目標
assets.ads.example.com- 策略
DIRECT- 位置
- 放在涵蓋該網域的後綴封鎖規則之前。
DIRECT 只表示直接連線;實際例外應沿用該服務所需且可用的策略。
後綴封鎖
- 類型
DOMAIN-SUFFIX- 目標
ads.example.com- 策略
REJECT- 位置
- 放在精確例外之後、廣泛放行規則與 FINAL 之前。
本文中的 FINAL,DIRECT 僅用於說明備援處理,不代表應取代原有分流策略。
合併規則時,請在現有 [Rule] 區段中插入對應行,不要重複貼上整個區段,也不要直接刪除原有代理策略、規則引用或備援設定。如果設定中還有外部規則引用,應依引用所在位置檢查整體順序,不能只看剛新增的幾行。
四、在 Config 中修改並驗證
規則儲存在設定檔中;現有節點訂閱主要提供連線資訊,更新訂閱不能取代規則編輯。操作前先保留一份目前可用的設定,再進入 Config,確認正在編輯的設定與目前使用的設定相同。遠端設定更新可能覆蓋本機修改,請保留自訂規則副本。
- 記錄原有狀態。記下 Home → Global Routing 目前的選項,以及 Config 中啟用的設定,並保留原始檔案以便還原。
- 只新增一條測試規則。在 Config 中開啟目標設定的編輯功能,於
[Rule]中新增已確認目標的 DOMAIN 規則,並放在可能先符合的廣泛規則之前,儲存後啟用該設定。 - 使用規則模式。在 Home → Global Routing 選擇 Config。Proxy 與 Direct 是不同的全域處理模式,不能用來驗證同一份 Config 規則是否正常符合;若使用 Scene,應先確認場景實際採用的設定與路由狀態。
- 重新發出請求。確認連線開關已開啟,關閉目標頁面後再重新開啟。必要時先中斷再重新連線,以建立新連線;只重新整理既有長連線中的畫面,可能看不到規則變更。
- 核對記錄。查看連線或日誌記錄中的目標網域、目標位址、符合的規則與處理策略。應以新請求符合 REJECT 為依據,不要只憑頁面某個區域暫時消失來判斷。
五、網域封鎖的限制與誤封原因
DOMAIN 與 DOMAIN-SUFFIX 處理的是主機名稱,不是網頁中的特定內容。HTTPS 請求中,同一主機的不同路徑,例如 https://example.com/news 與 https://example.com/promo,無法只靠這兩種網域規則區分;直接拒絕 example.com,會同時影響這兩個路徑的連線。
- 正常內容與待封鎖內容共用網域。圖片、登入、付款驗證與統計請求可能共用同一套基礎設施。若出現登入失敗或圖片缺失,請先還原最近新增的規則,再逐一核對主機名稱。
- 請求只有 IP 目標。如果規則引擎沒有可用的關聯網域,單一 DOMAIN-SUFFIX 規則無法只靠 IP 判斷它所屬的網域。不要把所有未符合的情況都歸因於規則順序。
- 內容來自快取或既有連線。離線資料、本機快取與重複使用中的連線,都可能讓修改後的頁面看起來沒有變化。請檢查規則啟用後的新請求,而不是只觀察舊頁面。
- 主機名稱與網路位址變動。網域可能切換至備用主機,位址也可能變動。針對暫時解析結果新增 IP-CIDR 規則,可能很快失效,也可能誤封共用該位址的其他網站。
- 請求未依目標設定處理。連線未啟用、選用了其他設定,或 Global Routing 狀態不符,都會使驗證結果失準。先確認實際處理路徑,再擴大封鎖範圍。
依網域拒絕通常不需要為此啟用 HTTPS 解密。新增憑證或修改其他無關設定,無法解決「同一網域承載多種內容」造成的比對粒度限制。對無法個別區分的資源,應保留必要功能,不要期待一條 REJECT 規則就能完整移除某類頁面內容。
六、常見問題:未符合、誤封與更新後還原
新增 REJECT 後,頁面為什麼還是能開啟?
先確認目標是整個頁面的主機,還是頁面中的某個資源主機。返回 Home → Global Routing 檢查是否選用 Config,再到 Config 核對啟用的檔案。重新發出請求後查看記錄;如果實際請求使用了另一個主機名稱,請依記錄新增精確規則,不要反覆新增同一行。
規則符合後,正常圖片也不見了,該怎麼辦?
先還原備份或移除最近新增的封鎖規則,確認圖片恢復。接著將 DOMAIN-SUFFIX 縮小為已確認的 DOMAIN;若確實有獨立的正常主機,請將其精確例外放在封鎖規則之前。如果圖片與待拒絕內容共用同一主機,單靠網域規則無法區分。
更新現有訂閱後,為什麼規則沒有變化?
先確認更新的是 Home 中的節點訂閱,還是 Config 中的遠端設定。前者不等於更新規則;後者則可能覆蓋本機編輯內容。返回 Config 檢查實際檔案中的 [Rule] 內容,分別備份自行維護的規則與原始設定,更新後逐項核對。
把 FINAL 改成 REJECT,就能省去逐條封鎖嗎?
FINAL,REJECT 會拒絕所有未符合前序規則的連線,影響範圍遠大於封鎖單一網域。除非正在維護明確的允許清單,否則不要用它取代指定目標的規則。請先還原原本的 FINAL 策略,再新增範圍明確的 DOMAIN 或 DOMAIN-SUFFIX。
七、儲存前的基本檢查清單
一份方便維護的 REJECT 設定,應能回答「拒絕哪個目標、為何採用這種比對方式、例外在哪裡、如何還原」這四個問題。每次只變更一項比對條件,並保留修改前後的記錄,比一次匯入大量未確認的規則更容易找出問題。
- 規則位於實際啟用設定的
[Rule]區段中,網域欄位不含通訊協定前綴或路徑。 - 精確例外位於對應的封鎖規則之前,封鎖規則則位於可能先符合的廣泛規則之前。
- FINAL 維持原有的備援用途,不要因新增封鎖規則而任意變更。
- Home → Global Routing 已選擇 Config,並已透過新的連線記錄核對實際符合結果。
- 已確認登入、圖片及其他必要功能正常,並保留可還原的原始設定。