適合已有可用連線設定,只希望少數網站走代理的使用者。先將 Home → Global Routing 設為 Config,再於目前設定檔的 [Rule] 中列出目標網域,最後用 FINAL,DIRECT 處理其他請求。本文說明最精簡的規則寫法、比對順序、逐項驗證與故障排查;範例網域僅用來說明語法,請替換成實際瀏覽的網域。
一、先確認 Global Routing 與目前設定檔
Shadowrocket(小火箭)的連線開關與分流規則各有不同用途:開關用來啟用連線,Global Routing 則決定如何選擇流量的出口方式。若要「指定網站走代理,其他網站直連」,應選擇 Config;只把規則寫入檔案,卻仍停留在 Proxy 或 Direct,無法驗證這組規則是否生效。
本文假設使用者已有自己的服務供應商、訂閱及可用的連線參數。購買用戶端與連線服務彼此獨立。Shadowrocket 是閉源商業 App,僅透過 Apple 平台的 App Store 一次性付費購買;主要供 iPhone 和 iPad 使用。系統需求與適用的購買範圍,請以 App Store 頁面標示為準。
| 設定項目 | 用途 | 本文建議的選項 |
|---|---|---|
| Proxy | 全域代理模式,不依本文的網域規則區分請求 | 僅用於單獨測試代理連線路徑 |
| Direct | 全域直連模式 | 無法用來驗證指定網域是否走代理 |
| Config | 依目前設定檔中的規則決定策略 | 本文使用此選項 |
| Scene | 依已設定的情境條件套用對應的路由設定 | 先固定使用 Config,減少環境切換造成的變數 |
- 在 Home 確認已選取自己有權使用且可正常連線的伺服器設定。
- 前往 Config,確認目前啟用的是準備修改的設定檔。先保留一份副本,以免修改後無法還原。
- 返回 Home → Global Routing,選擇 Config;確認無誤後再開啟連線開關。
Home 中的伺服器資訊與 Config 中的規則檔案屬於不同層級的設定。更新訂閱通常是更新連線項目,不代表已啟用剛編輯的規則檔;每次測試前都應確認目前使用的設定檔。
二、DOMAIN-SUFFIX 的基本規則寫法
若目標是某個網站及其子網域,優先使用 DOMAIN-SUFFIX。以下範例會將 example.com 和 example.net 結尾的網域交由 PROXY 處理,其他請求則交由 DIRECT。這些網域僅用於示範語法,不代表推薦任何服務。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-SUFFIX,example.net,PROXY
FINAL,DIRECT
如果現有設定檔已包含 [Rule],請在該段落中修改,不要重複新增同名段落,也不要用這四行覆寫整份設定檔。原有的 DNS、策略群組與其他設定都應保留並個別檢查。若保留舊規則,也必須一併確認它們是否擴大了代理範圍。
DOMAIN-SUFFIX,example.com,PROXY:比對example.com,也會比對www.example.com、api.example.com等子網域。DOMAIN,login.example.org,PROXY:只比對這個完整網域,不會自動涵蓋其他子網域。FINAL,DIRECT:為前面沒有符合任何規則的請求指定直連策略,應放在規則段落的最後。
規則中的網域不包含 https://、路徑、查詢參數或連接埠。即使網址是 https://www.example.com:443/account,此處仍只填 example.com;DOMAIN-SUFFIX 不會依網頁路徑比對。
三、如何搭配 DOMAIN-KEYWORD 與規則順序
DOMAIN-KEYWORD 會依網域中的關鍵字比對,涵蓋範圍通常比 DOMAIN-SUFFIX 更廣。例如 DOMAIN-KEYWORD,example,PROXY 不只可能比對 example.com,也可能比對 myexample.net。若只想指定幾個已知網站,逐一列出網域後綴通常更容易檢查。
規則會由上往下檢查,第一條符合的規則會決定對應策略。例外規則應放在較寬泛的規則之前,FINAL 則放在最後。以下範例會讓登入子網域直連、主站的其他子網域走代理,並示範關鍵字規則的放置位置:
[Rule]
DOMAIN,login.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,examplemedia,PROXY
FINAL,DIRECT
| 請求網域 | 第一條符合的規則 | 策略 |
|---|---|---|
login.example.com | DOMAIN 完整網域比對 | DIRECT |
img.example.com | DOMAIN-SUFFIX | PROXY |
cdn.examplemedia.net | DOMAIN-KEYWORD | PROXY |
example.org | FINAL | DIRECT |
結論:少數網站優先逐一列出網域
先只使用 DOMAIN 與 DOMAIN-SUFFIX,確認所有目標都能正常使用後,再考慮是否需要 DOMAIN-KEYWORD。每新增一條關鍵字規則,都應用一個預期不會符合的網域反向測試。
若希望「其他請求全部直連」,也必須檢查現有設定檔中的 GEOIP 或 IP-CIDR 規則。例如舊檔案若含有 GEOIP,US,PROXY,即使最後一條是 FINAL,DIRECT,符合該 IP 地理分類的其他請求仍可能走代理。IP-CIDR 會依 IP 位址網段比對,不能用來取代位址可能變動的網站網域清單。
四、儲存後如何確認規則確實生效
網頁能開啟,不足以證明符合了預期規則;網頁無法開啟,也不足以證明規則寫錯。應分開確認「規則選擇了哪種策略」以及「該出口能否完成連線」。以下說明檢查順序,並非 App 介面示意圖。
- 確認檔案已生效:儲存後返回 Config,確認目前啟用的檔案;在 Home → Global Routing 確認選項仍是 Config。
- 建立新的連線:關閉測試網頁後重新開啟。必要時中斷後重新連線 Shadowrocket,避免沿用舊連線影響判斷。
- 測試正向案例:瀏覽已填入規則的目標網站,並在 App 內的連線記錄或日誌中核對目標 Host、符合的規則及策略資訊;請以目前介面實際提供的欄位為準。
- 測試反向案例:瀏覽一個未列入規則的網站,確認其請求使用 DIRECT,不要只觀察單一目標網站。
- 檢查相依請求:若頁面文字正常,但圖片、影片或登入功能失敗,請檢查這些資源實際請求的網域,再決定是否新增個別規則。
同一個頁面可能同時向主站、登入介面、圖片網域及獨立的 CDN 網域發出請求。DOMAIN-SUFFIX 只涵蓋相同網域後綴,不會因為資源出現在網頁中,就自動讓它跟著主站走代理。請依連線記錄補上必要網域,不要一再擴大關鍵字的比對範圍。
也要區分 DNS 與連線策略:FINAL,DIRECT 決定未符合規則的連線使用哪個出口,不代表所有 DNS 查詢都會強制直連。DNS 解析路徑由相關設定決定;如果記錄中只出現 IP,沒有可用的網域資訊,網域規則可能無法如預期比對。請先檢查 App 的實際記錄與解析設定。
五、排查逾時、連線遭拒與規則未命中
先查看請求記錄中的策略,再檢查錯誤訊息。以下列出連線日誌中可能出現的底層錯誤文字,實際顯示內容可能包含位址或其他資訊。這些錯誤不等同於規則語法錯誤,也不應直接當成新增網域規則的依據。
錯誤:Connection timed out
原因與處理方式:連線未能在指定時間內完成,可能與所選代理、目標位址或目前的網路路徑有關。先確認該請求使用 PROXY 還是 DIRECT;若是 PROXY,請用同一個已知可用的目標測試所選連線,不要先擴大規則範圍。
錯誤:Connection refused
原因與處理方式:目標位址的連接埠拒絕連線,常見原因是連接埠不符或服務未在該連接埠監聽。請核對現有設定中的位址、連接埠與服務狀態;例如服務參數明確要求 443,就不能自行改成 80,也不能只憑這個錯誤判定所有服務都必須使用 443。
- 目標仍顯示 DIRECT:先確認 Global Routing 是否設為 Config,再檢查目前使用的檔案與網域拼字,最後確認是否先被前面的 DIRECT 規則符合。
- 不相關的網站也顯示 PROXY:檢查範圍較廣的 DOMAIN-KEYWORD、IP-CIDR、GEOIP 規則,以及最後一條是否仍為 FINAL,PROXY。
- 只有切換網路後結果改變:檢查是否使用 Scene;也請前往 Settings → On Demand 核對隨選連線條件。On Demand 影響連線何時啟用,不會取代 DOMAIN-SUFFIX 來選擇請求策略。
- 更新訂閱後無法連線:分別檢查 Home 中選取的連線,以及 Config 中目前使用的規則。連線項目變動與網域規則是否符合,是兩個不同層面的問題,應分開處理。
結論:每次只修改一個變數
固定使用同一個測試網站、同一個網路與同一個代理出口,先修改規則並觀察符合情況;確認規則符合正確後若仍無法連線,再檢查連線參數。不要同時更換出口、DNS 與規則,否則難以判斷是哪個步驟影響結果。
六、指定網站分流常見問題
只想讓某個頁面走代理、其他頁面直連,可以用網域規則嗎?
DOMAIN 與 DOMAIN-SUFFIX 不會區分同一網域下的網頁路徑。如果兩個頁面使用相同的 Host,本文的規則會讓它們採用相同策略。請勿將包含路徑的完整網址填入 DOMAIN-SUFFIX。
新增 example.com 後,還需要寫 www.example.com 嗎?
使用 DOMAIN-SUFFIX 時通常不需要,前者已涵蓋後者。如果主站實際上會轉址到另一個獨立網域,就需要依連線記錄新增該網域;請先確認實際請求,再修改 Config。
切換到 Proxy 就能開啟,切回 Config 卻不行,該先檢查什麼?
先在 Config 模式下重新送出請求,確認失敗的請求是否符合 PROXY。若使用 DIRECT,請檢查遺漏的網域與前置規則;若已符合 PROXY,則繼續核對實際出口與連線失敗的具體原因,不要只新增重複規則。
FINAL,DIRECT 是否代表中斷 Shadowrocket?
不是。它只會指定未符合前面規則的請求使用 DIRECT,不會關閉連線開關。保持 Config 模式並啟用連線,才能讓前面符合規則的指定網域繼續使用 PROXY。
維護時請保留一份已驗證的設定副本,並記錄每次新增網域的用途。需要更詳細的選項說明,請參閱選項手冊;不確定規則關鍵字的意思時,先查看概念速查,再回到最精簡的規則逐項測試。