本文適合已在 iPhone/iPad 的 Shadowrocket 匯入自有伺服器,並希望只代理少數網站的使用者。先確認 Global Routing(全域路由)設為 Config(設定),再在目前的設定檔中加入網域規則,並將 FINAL,DIRECT 放在規則末尾。下文提供可合併的規則片段、儲存與驗證步驟,以及規則未命中或資源載入不完整時的檢查方法;範例網域僅供說明。
先確認 Config 與預設伺服器
Shadowrocket(小火箭)的連線開關、伺服器選擇與分流規則是不同的設定。開啟連線開關只代表已啟用連線;是否依網域分流,還取決於 Home(首頁)中的 Global Routing(全域路由)。本文使用 Config(設定)模式,並由目前設定檔中的規則決定流量去向。
開始前,先確認現有伺服器可正常連線。在 Home(首頁)的伺服器清單中,點選目標項目左側的選取圓點,將它設為預設伺服器,再執行 Connectivity Test(連線測試)。本文使用內建策略 PROXY(代理);若原設定檔將規則指向自訂策略群組,實際使用的伺服器也會受該群組的選擇影響,不能只查看預設伺服器。
Config(設定)
建議依目前設定檔比對規則。可讓指定網域使用 PROXY(代理),其他連線則使用 DIRECT(直連)。
適用情境:本文的指定網站走代理、其他流量直連。
Proxy(代理)
將由用戶端處理的連線一律交由代理,不依本文的網域規則分流。可暫時用來區分代理連線問題與規則問題。
適用情境:短時間確認現有伺服器能否連線至目標。
Direct(直連)
將由用戶端處理的連線直接送出,不會因設定檔中有 PROXY 規則而改走代理。
適用情境:確認目前網路能否直接連線至目標。
Scene(場景)
依已設定的場景條件套用對應路由安排。這不是本文要固定使用的設定規則模式;排查問題時,請先切回 Config。
適用情境:已設定場景條件的使用方式。
先固定模式,再修改規則
先將 Global Routing 設為 Config,再進行測試。若同時切換場景、伺服器與規則,存取結果改變時便無法判斷是哪一項造成影響。
最精簡規則:指定網域走代理,其他流量直連
規則各欄位以英文逗號分隔。DOMAIN-SUFFIX(網域後綴比對)依序填入規則類型、網域後綴與目標策略。網域欄位只填主機名稱,不要加入通訊協定、路徑、連接埠或萬用字元。以下是規則區段範例,並非包含 DNS 等設定的完整設定檔。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
將這段合併至現有設定檔的 [Rule] 區段,不要在檔案中重複建立多個同名區段。若原設定檔已有規則,請先備份,再確認是否有規則會優先命中。若要達成「只有指定網站走代理」,就不能保留會將其他網域送往代理的寬泛規則,也不能讓舊的兜底規則留在中間。
DOMAIN-SUFFIX,example.com,PROXY會比對example.com本身,以及www.example.com、api.example.com等子網域。- 它不會比對
notexample.com,也不會比對example.com.other.test,因為這些主機名稱不屬於該網域後綴。 FINAL,DIRECT沒有比對值欄位,會將先前未命中的連線交由 DIRECT(直連)處理。不要寫成三欄格式。
此處的「其他流量直連」是指由該規則區段處理、且未命中前面規則的連線,不代表裝置的所有系統通訊都一定會出現在請求記錄中。這也不表示 DNS 查詢必然與網頁連線走相同路徑;DNS 仍須依目前設定檔另外檢查。
DOMAIN-KEYWORD 與規則順序
DOMAIN-KEYWORD(網域關鍵字比對)會檢查網域中是否包含指定文字。適用於確實需要依關鍵字涵蓋多個網域的情況,但比對範圍比後綴規則更廣。若只知道網站的主網域,優先使用 DOMAIN-SUFFIX,避免名稱中恰好含有相同字元的其他網域也走代理。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,media-example,PROXY
FINAL,DIRECT
上方第二條規則會比對網域中含有 media-example 的連線。它不是搜尋網頁標題、頁面文字或完整 URL。不要為了比對網站中的某個目錄而填入 example.com/video;網域規則不會依 URL 路徑區分同一主機上的不同頁面。
| 請求主機名稱 | 最先命中的規則 | 策略 |
|---|---|---|
api.example.com | DOMAIN-SUFFIX | PROXY |
img.media-example.test | DOMAIN-KEYWORD | PROXY |
unrelated.test | FINAL | DIRECT |
規則會依由上而下的順序比對,命中後便套用對應策略,不會自動挑選「看起來更精確」的後續規則。例如,若要讓 local.example.com 直連、其他相同後綴的網域走代理,就必須將精確網域規則放在後綴規則之前:
[Rule]
DOMAIN,local.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
在 iPhone/iPad 儲存並啟用設定檔
以下以已有可用設定檔為起點。先保留原設定檔的副本,再編輯本機副本;不要直接覆寫唯一可用的檔案。之後重新下載或更新遠端設定檔時,可能會覆蓋本機修改,因此要區分「更新伺服器清單」與「替換規則設定檔」。
-
備份設定檔
開啟 Config(設定),確認目前選取的檔案。使用該檔案的操作選單保留副本,並記下原檔名,以便發生問題時切回原設定。
-
編輯規則
在 Config 中開啟副本的檔案操作選單,進入 Edit Plain Text(編輯純文字)。找到
[Rule],將需要的網域規則放在FINAL,DIRECT之前;其他必要的設定區段請保留。 -
儲存並選取
儲存檔案並返回 Config,點選剛編輯的本機設定檔。確認選取標記顯示在該檔案上,而不是仍停留在原本的遠端設定檔。
-
切換模式
前往 Home → Global Routing → Config。返回 Home,確認預設伺服器後開啟連線開關;首次出現系統 VPN 設定授權提示時,請依系統指示允許。
-
重新建立連線
關閉先前開啟的測試頁面,再重新開啟目標網站。必要時先關閉再重新開啟 Shadowrocket 連線,讓新的請求套用剛儲存的規則;正在重複使用的舊連線不適合用來驗證。
若已在 Settings → On Demand(設定 → 隨選連線)啟用 On Demand,手動中斷連線後可能因符合連線條件而自動重新連線。測試期間請先檢查這些條件,必要時暫時停用 On Demand,並記得測試結束後恢復。On Demand 負責管理連線觸發條件,不會取代網域規則。
確認規則命中,再補齊頁面相依網域
驗證至少分成兩組:一組測試需要走代理的目標,另一組測試未加入規則的目標。先在 Home 執行 Connectivity Test,確認預設伺服器基本連線正常,再送出新的網頁請求。測試通過只代表測試目標連線正常,不表示所有網站都能存取。
- 檢查目標主機:核對瀏覽器目前網址與請求記錄中的實際主機名稱。重新導向後存取的網域可能已經不同,不能只查看最初輸入的網址。
- 檢查命中策略:在請求記錄中開啟對應連線的詳細資訊,核對可見的規則與策略資訊。需要走代理的目標應命中網域規則,其他測試目標則應套用
FINAL,DIRECT。 - 檢查相依請求:若頁面正文已出現,但圖片、登入或影片載入失敗,請查看失敗請求的主機名稱。資源可能來自不同網域,主站的後綴規則不會自動涵蓋這些網域。
- 逐條新增:只新增經確認需要走代理的相依網域規則,然後重新測試。不要直接加入過短的關鍵字,以免代理範圍擴大。
可依下方格式加入第二個已確認的資源網域。此處的 static.example.net 仍是示範文字,請替換成請求記錄中確認的實際主機名稱;若只需要比對這個主機,使用 DOMAIN(精確網域比對)即可,不必代理整個上層網域。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN,static.example.net,PROXY
FINAL,DIRECT
網域規則也仰賴連線中可取得的網域資訊。若應用程式直接連線至 IP 位址,單純的網域規則可能沒有可比對的對象。不要因此立刻加入大範圍的位址區段;請先確認請求目標、DNS 解析情況,以及該連線是否確實屬於要走代理的網站。
GEOIP、IP-CIDR 與訂閱更新的適用範圍
GEOIP(依 IP 地理位置比對)和 IP-CIDR(依 IPv4 位址範圍比對)處理的是位址條件,並不等同於網站清單。若目標是「僅指定網域走代理」,最精簡的規則片段不需要這兩種規則。若將涵蓋範圍廣的位址規則放在前面,會改變後續網域規則與兜底規則的適用範圍。
| 關鍵字 | 語法範例 | 檢查重點 |
|---|---|---|
DOMAIN-SUFFIX | DOMAIN-SUFFIX,example.com,PROXY | 涵蓋主網域及其子網域。 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,media-example,PROXY | 依網域中的文字比對,留意誤涵蓋其他網域。 |
GEOIP | GEOIP,CN,DIRECT | 依位址歸屬資料判斷,不代表網站所屬地區。 |
IP-CIDR | IP-CIDR,192.0.2.0/24,DIRECT,no-resolve | 範例為文件專用位址範圍;no-resolve 表示不會為此規則主動解析網域。 |
表格用來辨識規則類型,不表示必須將所有列都加入設定檔。尤其共享伺服器位址可能同時承載多個網站,依 IP 範圍設定代理容易偏離「只選指定網站」的目標。若網域已明確,先沿用網域規則;只有確認需要依位址比對時,才新增位址規則。
- Home 中 Subscribe(訂閱)項目的更新通常用於更新現有伺服器清單,不會代替你修改目前本機設定檔的
[Rule]內容。 - 更新遠端 Config 檔案可能會變更規則。更新後請重新確認目前選取的檔案、網域規則與最後一條 FINAL,不要只確認伺服器數量。
- 伺服器清單變動後,請檢查預設伺服器或策略群組是否仍指向可用項目。規則即使命中 PROXY,若代理目標不可用,網頁仍然無法開啟。
常見問題:規則設定後仍未依預期分流
為什麼所有網站都走代理?
先前往 Home → Global Routing,確認已選擇 Config,而不是 Proxy。再開啟目前選取的設定檔,檢查是否仍有 FINAL,PROXY 或涵蓋範圍過大的代理規則。確認目標規則以外的流量去向後,再以 FINAL,DIRECT 作為兜底。
為什麼指定網站仍然直連?
前往 Config 確認目前使用的是剛編輯的檔案。檢查網域是否誤加通訊協定或路徑、FINAL 是否放在最前面,以及是否有更早命中的 DIRECT 規則。接著關閉舊頁面,重新送出請求並查看實際主機名稱。
主頁能開啟,登入和圖片卻載入失敗?
在請求記錄中找出失敗資源的主機名稱,確認它是否位於主站網域之外。將確認需要走代理的獨立網域加入 FINAL 前,再重新開啟頁面。不要因單次頁面載入失敗,就認定整台伺服器無法使用。
切換至 Proxy 可以連線,Config 卻不行?
先切回 Home → Global Routing → Config,再確認目標請求命中了哪條規則。若命中 DIRECT,請修正網域範圍或規則順序;若已命中 PROXY,請確認該策略實際使用的伺服器是否與暫時切換 Proxy 測試時相同,並檢查 DNS 與資源網域。
完成後保留可用的設定檔副本,並記錄新增的網域。每次只修改一項:先改模式,再改規則,最後檢查伺服器。依此順序逐一排查,可區分「設定檔未啟用」、「規則未命中」與「代理連線失敗」,不必反覆替換整份設定檔。