Shadowrocket 白名單分流設定:DOMAIN-SUFFIX 搭配 FINAL,DIRECT,指定網站走代理

示範如何用實際規則,讓指定網域走 PROXY、其他流量一律 DIRECT,並說明在 Config 中修改及驗證的方法。

本文重點

本文適合已在 Shadowrocket(小火箭)匯入自己的設定,並希望只有少數網站走代理的使用者。做法是將目標網域加入 DOMAIN-SUFFIX 規則,並在規則末尾保留 FINAL,DIRECT,再將 Global Routing 設為 Config。以下說明最精簡的規則寫法、編輯步驟、連線驗證及常見問題;範例網域僅用來說明語法,不提供連線服務。

一、先釐清白名單分流的範圍

這裡的「白名單」指代理連線名單:列出的網域交由 PROXY 處理,其他請求則由 DIRECT 處理。這不是存取控制清單,也不會封鎖名單以外網站的網路連線。DIRECT 代表直接連線至目標,不等於關閉 Shadowrocket;連線仍可能經過本機通道及規則處理。

若要讓規則參與判斷,請先在 Home → Global Routing 選擇 Config。選擇 Proxy 或 Direct,無法用來驗證這份依網域分流的設定;Scene 用於場景相關的路由選擇,本次排查也不以它為準。先固定使用 Config 再修改規則,才能避免誤把模式變更當成規則生效。

發出請求 取得目標 依序比對 決定策略 建立連線

規則會依序檢查,符合條件後便採用對應策略,不會繼續比對後續的一般規則。因此,如果前面已有涵蓋目標的 DIRECT 規則,新增的代理規則可能根本不會命中。設定白名單分流時,必須同時檢查規則內容及排列順序,不能只確認檔案中有出現某個網域。

二、使用 DOMAIN-SUFFIX 與 FINAL,DIRECT 撰寫最精簡規則

以下是最精簡的規則範例。example.com 和 example.net 都是示範網域;實際設定時,請改成自己要處理的網站網域。現有設定通常還包含其他區段,本例只展示 [Rule],不能直接拿來取代完整的連線設定檔。

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

DOMAIN-SUFFIX,example.com,PROXY 會同時比對 example.com、www.example.com、assets.example.com 等子網域。它不是比對任意包含字串的網域:不會比對 notexample.com,也不會比對 example.com.other.test。規則參數只填網域,不要加上 https://、路徑、查詢參數或連接埠。

2 條
範例中的 DOMAIN-SUFFIX 代理規則
1 條
末尾的 FINAL,DIRECT 預設規則
443
HTTPS 常見目標連接埠,不填入網域參數

FINAL,DIRECT 會接手處理前面未比對到的請求,必須放在所有需要判斷的具體規則之後。如果它排在第一行,後面的網域規則就無法如預期運作。PROXY 也不是伺服器位址,而是代理策略;使用前請確認 Home 中已有可用的伺服器,且設定沒有讓實際連線的出口偏離預期。

結論:先用最精簡的規則驗證

第一次驗證時,只保留一個目標網域和末尾的預設規則;確認代理和直連各有一個可重現的命中結果後,再逐一擴充名單。

三、在 Config 中修改並啟用設定

編輯前,先記下 Home 目前選用的伺服器、Global Routing 模式,以及 Config 正在使用的檔案。先複製一份設定再修改,比直接覆寫唯一檔案更容易復原。如果原始檔案由遠端網址維護,請保留本機副本;之後更新遠端設定時,本機修改可能會被覆蓋。

  1. 保留原始設定

    進入 Config,找到目前使用的設定檔,先透過檔案操作選項儲存副本或匯出備份。確認副本容易辨識後再開始編輯;不要把伺服器訂閱更新當成規則檔案備份。

  2. 編輯規則區段

    在 Config 中開啟待修改檔案的文字編輯功能,找到現有的 [Rule]。將目標 DOMAIN-SUFFIX 規則加入該區段,不要再建立另一個同名區段;規則列請使用英文逗號。

  3. 檢查預設規則

    檢查整個規則區段的排列順序,將 FINAL,DIRECT 放在末尾。若要嚴格做到「只有列出的網域走代理」,也要檢查原有的 GEOIP、IP-CIDR、規則集引用及其他代理規則,避免代理範圍因此擴大。

  4. 選取設定檔

    儲存後回到 Config,確認選取的是剛才修改的檔案,而不是名稱相似的遠端檔案。檔案已儲存和檔案已選用是兩件事,請分別確認。

  5. 啟用 Config

    返回 Home → Global Routing → Config,選擇已有的伺服器並建立連線。重新發出測試請求;若仍沿用舊連線,可先中斷連線再重新連線,然後重新開啟測試頁面。

如果手動關閉連線後,開關又自動開啟,請檢查 Settings → On Demand 的現有設定。On Demand 會影響依條件連線的行為,但不負責設定網站網域的代理名單。為方便重現問題,可先記下原設定,暫時關閉相關的自動連線條件,測試完成後再還原。

四、處理子網域例外與網站附屬資源

如果某個主網域大多數子網域都需要代理,但有一個子網域必須直連,請先寫較具體的例外,再寫涵蓋範圍較大的網域後綴規則。例如,只讓 status.example.com 直連時,可依照以下順序設定。DOMAIN 只會比對這個完整主機名稱,不會自動涵蓋其下的子網域。

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

網站不等於單一網域。主頁、登入介面、圖片、字型或影片可能來自不同主機。若只加入對應頁面網址的主網域,可能會出現文字正常但圖片無法顯示,或頁面能開啟卻無法登入的情況。遇到這類問題,請查看失敗請求的實際主機名稱,再決定是否加入名單;不要直接把所有流量改成走代理,以掩蓋規則缺漏。

新增 IP-CIDR 規則時,也要留意共用 IP 位址:同一個位址可能對應多個網域,依 IP 位址設定代理會影響網域名單以外的其他請求。因此,若要做到「只有指定網站走代理」,應優先從實際主機名稱著手;只有在充分了解位址範圍及影響後,才新增 IP 規則。

五、確認規則命中,不要只看網頁能否開啟

網頁能開啟,只代表某條存取路徑可用,不能證明使用了 PROXY;網頁無法開啟,也不能直接證明規則寫錯。驗證時,請在 Shadowrocket 的連線紀錄或日誌中核對目標主機、命中規則及最終策略,觀察新建立的連線,而不是只查看伺服器延遲測試。

  1. 先選一個名單內的實際網站,以及一個名單外、目前網路可直接存取的網站,並記下兩者的完整主機名稱。範例網域僅用於說明語法,不能取代實際測試目標。
  2. 以 Config 模式連線後,重新造訪名單內的網站。應確認目標命中相應的 DOMAIN-SUFFIX 或 DOMAIN 規則,策略為 PROXY;接著核對實際使用的代理出口。
  3. 造訪名單外的網站,檢查其請求是否由 FINAL 接手,以及策略是否為 DIRECT。如果命中其他規則,請回到 Config 檢查原有規則。
  4. 分別查看主頁和失敗資源的紀錄。同一頁面同時出現 PROXY 和 DIRECT 不一定有問題,重點是各主機的處理結果是否符合名單設定。
  5. 每次只修改一項,重新建立連線後再重複同一組測試。記錄修改前後的目標、規則及結果,才能確認是哪一項變更造成影響。
DNS 與連線重用會影響觀察結果

網域解析失敗時,後續連線可能尚未建立;應用程式內建的加密 DNS,或直接使用 IP 的請求,也可能影響可取得的網域資訊。不要為了修正網域規則而同時更換多項 DNS 設定。請先保留目前設定並確認解析結果,再另外處理解析問題;若連線已建立很久,請重新連線後再查看新紀錄。

六、依據現象區分規則問題與連線問題

遇到異常時,先檢查兩個層面:第一,請求是否命中預期規則;第二,選定的連線出口是否能完成連線。以下兩則是網路連線中可能出現的原始錯誤訊息,不代表每次都會以完全相同的形式顯示在同一個介面;請搭配紀錄中的目標位址及連線出口判斷。

錯誤:Connection timed out

原因:連線未能在等待期限內完成,可能發生於連線至代理伺服器或目標網站的階段;不能只憑這段訊息判定 DOMAIN-SUFFIX 無效。

處理方式:先確認命中的策略;若確實為 PROXY,再測試自己已有伺服器的連線狀態及相同目標的存取情況,以判斷問題出在代理連線出口還是目標網站無法連線。

錯誤:Connection refused

原因:遠端拒絕連線,常見原因包括目標連接埠沒有服務監聽,或伺服器位址、連接埠與實際服務不符。

處理方式:先確認錯誤發生在代理伺服器還是網站,再向自己的服務供應商確認現有設定中的位址和連接埠;不要直接把網站的 HTTPS 連接埠 443 當成代理伺服器連接埠填入。

結論:根據命中紀錄決定下一步

若命中錯誤,修正規則及排列順序;若命中正確但連線失敗,則排查對應的連線出口。分開處理這兩類問題,才能維持「名單內走代理、其他流量直連」的設定範圍。

最後保留一份已驗證的本機設定,以及一組固定的名單內外測試目標。日後新增網站、調整訂閱或更新遠端設定後,請重複相同的驗證步驟。Shadowrocket 用戶端購買與連線服務分別處理;本文假設使用者已擁有自己的服務供應商及設定。

前往 App Store