本文適合已在 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://、路徑、查詢參數或連接埠。
FINAL,DIRECT 會接手處理前面未比對到的請求,必須放在所有需要判斷的具體規則之後。如果它排在第一行,後面的網域規則就無法如預期運作。PROXY 也不是伺服器位址,而是代理策略;使用前請確認 Home 中已有可用的伺服器,且設定沒有讓實際連線的出口偏離預期。
結論:先用最精簡的規則驗證
第一次驗證時,只保留一個目標網域和末尾的預設規則;確認代理和直連各有一個可重現的命中結果後,再逐一擴充名單。
三、在 Config 中修改並啟用設定
編輯前,先記下 Home 目前選用的伺服器、Global Routing 模式,以及 Config 正在使用的檔案。先複製一份設定再修改,比直接覆寫唯一檔案更容易復原。如果原始檔案由遠端網址維護,請保留本機副本;之後更新遠端設定時,本機修改可能會被覆蓋。
-
保留原始設定
進入 Config,找到目前使用的設定檔,先透過檔案操作選項儲存副本或匯出備份。確認副本容易辨識後再開始編輯;不要把伺服器訂閱更新當成規則檔案備份。
-
編輯規則區段
在 Config 中開啟待修改檔案的文字編輯功能,找到現有的
[Rule]。將目標 DOMAIN-SUFFIX 規則加入該區段,不要再建立另一個同名區段;規則列請使用英文逗號。 -
檢查預設規則
檢查整個規則區段的排列順序,將
FINAL,DIRECT放在末尾。若要嚴格做到「只有列出的網域走代理」,也要檢查原有的 GEOIP、IP-CIDR、規則集引用及其他代理規則,避免代理範圍因此擴大。 -
選取設定檔
儲存後回到 Config,確認選取的是剛才修改的檔案,而不是名稱相似的遠端檔案。檔案已儲存和檔案已選用是兩件事,請分別確認。
-
啟用 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
網站不等於單一網域。主頁、登入介面、圖片、字型或影片可能來自不同主機。若只加入對應頁面網址的主網域,可能會出現文字正常但圖片無法顯示,或頁面能開啟卻無法登入的情況。遇到這類問題,請查看失敗請求的實際主機名稱,再決定是否加入名單;不要直接把所有流量改成走代理,以掩蓋規則缺漏。
- 同一主網域的子網域:
cdn.example.com已涵蓋在DOMAIN-SUFFIX,example.com,PROXY中,不必再新增相同策略。 - 獨立的資源網域:如果頁面需要載入
static.example.net,可以先用DOMAIN,static.example.net,PROXY精確處理,再依實際需求決定是否擴大至整個網域後綴。 - 直接連線至 IP:單靠 DOMAIN-SUFFIX 不一定能命中。IP-CIDR 比對 IP 位址範圍,GEOIP 依位址所屬地區判斷,兩者都不能取代網域後綴比對。
- URL 路徑:
example.com/account和example.com/news的主機名稱相同;此處的網域規則無法只將其中一個路徑交由代理處理。
新增 IP-CIDR 規則時,也要留意共用 IP 位址:同一個位址可能對應多個網域,依 IP 位址設定代理會影響網域名單以外的其他請求。因此,若要做到「只有指定網站走代理」,應優先從實際主機名稱著手;只有在充分了解位址範圍及影響後,才新增 IP 規則。
五、確認規則命中,不要只看網頁能否開啟
網頁能開啟,只代表某條存取路徑可用,不能證明使用了 PROXY;網頁無法開啟,也不能直接證明規則寫錯。驗證時,請在 Shadowrocket 的連線紀錄或日誌中核對目標主機、命中規則及最終策略,觀察新建立的連線,而不是只查看伺服器延遲測試。
- 先選一個名單內的實際網站,以及一個名單外、目前網路可直接存取的網站,並記下兩者的完整主機名稱。範例網域僅用於說明語法,不能取代實際測試目標。
- 以 Config 模式連線後,重新造訪名單內的網站。應確認目標命中相應的 DOMAIN-SUFFIX 或 DOMAIN 規則,策略為 PROXY;接著核對實際使用的代理出口。
- 造訪名單外的網站,檢查其請求是否由 FINAL 接手,以及策略是否為 DIRECT。如果命中其他規則,請回到 Config 檢查原有規則。
- 分別查看主頁和失敗資源的紀錄。同一頁面同時出現 PROXY 和 DIRECT 不一定有問題,重點是各主機的處理結果是否符合名單設定。
- 每次只修改一項,重新建立連線後再重複同一組測試。記錄修改前後的目標、規則及結果,才能確認是哪一項變更造成影響。
網域解析失敗時,後續連線可能尚未建立;應用程式內建的加密 DNS,或直接使用 IP 的請求,也可能影響可取得的網域資訊。不要為了修正網域規則而同時更換多項 DNS 設定。請先保留目前設定並確認解析結果,再另外處理解析問題;若連線已建立很久,請重新連線後再查看新紀錄。
六、依據現象區分規則問題與連線問題
遇到異常時,先檢查兩個層面:第一,請求是否命中預期規則;第二,選定的連線出口是否能完成連線。以下兩則是網路連線中可能出現的原始錯誤訊息,不代表每次都會以完全相同的形式顯示在同一個介面;請搭配紀錄中的目標位址及連線出口判斷。
錯誤:Connection timed out
原因:連線未能在等待期限內完成,可能發生於連線至代理伺服器或目標網站的階段;不能只憑這段訊息判定 DOMAIN-SUFFIX 無效。
處理方式:先確認命中的策略;若確實為 PROXY,再測試自己已有伺服器的連線狀態及相同目標的存取情況,以判斷問題出在代理連線出口還是目標網站無法連線。
錯誤:Connection refused
原因:遠端拒絕連線,常見原因包括目標連接埠沒有服務監聽,或伺服器位址、連接埠與實際服務不符。
處理方式:先確認錯誤發生在代理伺服器還是網站,再向自己的服務供應商確認現有設定中的位址和連接埠;不要直接把網站的 HTTPS 連接埠 443 當成代理伺服器連接埠填入。
- 所有網站都走代理:先確認 Global Routing 是否仍設定為 Proxy,再檢查設定中是否有涵蓋範圍更大的代理規則,或末尾是否仍是
FINAL,PROXY。 - 名單內網站仍然直連:檢查目前是否使用了其他設定檔、前面是否有 DIRECT 規則,以及網域參數是否誤加協定前綴或路徑。
- 只有部分內容載入失敗:核對實際載入失敗的資源網域;若已正確命中 PROXY,接著檢查代理連線,不要反覆新增相同的主網域規則。
- 重新整理後修改內容消失:確認更新的是遠端 Config 還是伺服器訂閱。兩者維護的內容不同,請在本機副本中保留自訂規則,並於更新後核對差異。
結論:根據命中紀錄決定下一步
若命中錯誤,修正規則及排列順序;若命中正確但連線失敗,則排查對應的連線出口。分開處理這兩類問題,才能維持「名單內走代理、其他流量直連」的設定範圍。
最後保留一份已驗證的本機設定,以及一組固定的名單內外測試目標。日後新增網站、調整訂閱或更新遠端設定後,請重複相同的驗證步驟。Shadowrocket 用戶端購買與連線服務分別處理;本文假設使用者已擁有自己的服務供應商及設定。