Shadowrocket 分流規則設定:指定網站走代理的 Config 範例

在 Config 中使用 DOMAIN-SUFFIX、DOMAIN-KEYWORD 指定網站走 PROXY,並以 FINAL,DIRECT 作為兜底,讓其他流量直連。了解規則由上而下的比對順序,以及 Global Routing 設為 Config 時規則如何生效。

本文重點

本文適合已在 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] 區段,不要在檔案中重複建立多個同名區段。若原設定檔已有規則,請先備份,再確認是否有規則會優先命中。若要達成「只有指定網站走代理」,就不能保留會將其他網域送往代理的寬泛規則,也不能讓舊的兜底規則留在中間。

2 行
最精簡規則區段:1 條網域規則 + 1 條兜底規則
3 個欄位
網域規則欄位:類型、比對值、策略
最後 1 行
FINAL,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.comDOMAIN-SUFFIXPROXY
img.media-example.testDOMAIN-KEYWORDPROXY
unrelated.testFINALDIRECT

規則會依由上而下的順序比對,命中後便套用對應策略,不會自動挑選「看起來更精確」的後續規則。例如,若要讓 local.example.com 直連、其他相同後綴的網域走代理,就必須將精確網域規則放在後綴規則之前:

[Rule]
DOMAIN,local.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

在 iPhone/iPad 儲存並啟用設定檔

以下以已有可用設定檔為起點。先保留原設定檔的副本,再編輯本機副本;不要直接覆寫唯一可用的檔案。之後重新下載或更新遠端設定檔時,可能會覆蓋本機修改,因此要區分「更新伺服器清單」與「替換規則設定檔」。

  1. 備份設定檔

    開啟 Config(設定),確認目前選取的檔案。使用該檔案的操作選單保留副本,並記下原檔名,以便發生問題時切回原設定。

  2. 編輯規則

    在 Config 中開啟副本的檔案操作選單,進入 Edit Plain Text(編輯純文字)。找到 [Rule],將需要的網域規則放在 FINAL,DIRECT 之前;其他必要的設定區段請保留。

  3. 儲存並選取

    儲存檔案並返回 Config,點選剛編輯的本機設定檔。確認選取標記顯示在該檔案上,而不是仍停留在原本的遠端設定檔。

  4. 切換模式

    前往 Home → Global Routing → Config。返回 Home,確認預設伺服器後開啟連線開關;首次出現系統 VPN 設定授權提示時,請依系統指示允許。

  5. 重新建立連線

    關閉先前開啟的測試頁面,再重新開啟目標網站。必要時先關閉再重新開啟 Shadowrocket 連線,讓新的請求套用剛儲存的規則;正在重複使用的舊連線不適合用來驗證。

若已在 Settings → On Demand(設定 → 隨選連線)啟用 On Demand,手動中斷連線後可能因符合連線條件而自動重新連線。測試期間請先檢查這些條件,必要時暫時停用 On Demand,並記得測試結束後恢復。On Demand 負責管理連線觸發條件,不會取代網域規則。

確認規則命中,再補齊頁面相依網域

驗證至少分成兩組:一組測試需要走代理的目標,另一組測試未加入規則的目標。先在 Home 執行 Connectivity Test,確認預設伺服器基本連線正常,再送出新的網頁請求。測試通過只代表測試目標連線正常,不表示所有網站都能存取。

可依下方格式加入第二個已確認的資源網域。此處的 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-SUFFIXDOMAIN-SUFFIX,example.com,PROXY涵蓋主網域及其子網域。
DOMAIN-KEYWORDDOMAIN-KEYWORD,media-example,PROXY依網域中的文字比對,留意誤涵蓋其他網域。
GEOIPGEOIP,CN,DIRECT依位址歸屬資料判斷,不代表網站所屬地區。
IP-CIDRIP-CIDR,192.0.2.0/24,DIRECT,no-resolve範例為文件專用位址範圍;no-resolve 表示不會為此規則主動解析網域。

表格用來辨識規則類型,不表示必須將所有列都加入設定檔。尤其共享伺服器位址可能同時承載多個網站,依 IP 範圍設定代理容易偏離「只選指定網站」的目標。若網域已明確,先沿用網域規則;只有確認需要依位址比對時,才新增位址規則。

常見問題:規則設定後仍未依預期分流

為什麼所有網站都走代理?

先前往 Home → Global Routing,確認已選擇 Config,而不是 Proxy。再開啟目前選取的設定檔,檢查是否仍有 FINAL,PROXY 或涵蓋範圍過大的代理規則。確認目標規則以外的流量去向後,再以 FINAL,DIRECT 作為兜底。

為什麼指定網站仍然直連?

前往 Config 確認目前使用的是剛編輯的檔案。檢查網域是否誤加通訊協定或路徑、FINAL 是否放在最前面,以及是否有更早命中的 DIRECT 規則。接著關閉舊頁面,重新送出請求並查看實際主機名稱。

主頁能開啟,登入和圖片卻載入失敗?

在請求記錄中找出失敗資源的主機名稱,確認它是否位於主站網域之外。將確認需要走代理的獨立網域加入 FINAL 前,再重新開啟頁面。不要因單次頁面載入失敗,就認定整台伺服器無法使用。

切換至 Proxy 可以連線,Config 卻不行?

先切回 Home → Global Routing → Config,再確認目標請求命中了哪條規則。若命中 DIRECT,請修正網域範圍或規則順序;若已命中 PROXY,請確認該策略實際使用的伺服器是否與暫時切換 Proxy 測試時相同,並檢查 DNS 與資源網域。

完成後保留可用的設定檔副本,並記錄新增的網域。每次只修改一項:先改模式,再改規則,最後檢查伺服器。依此順序逐一排查,可區分「設定檔未啟用」、「規則未命中」與「代理連線失敗」,不必反覆替換整份設定檔。

App Store 正版核驗