隧道

開關管的是系統介面,不是某一條記錄。

主介面頂部的開關啟動的是 iOS 的 Network Extension:裝置出站流量被送進 Shadowrocket 的虛擬網卡。記錄、規則、Data 都在這個介面之後才發生。平臺限制見 系統

  1. 01第一次開啟開關
  2. 02「已連線」只說明隧道在
  3. 03Config · Proxy · Direct
  4. 04一條連線進隧道之後
  5. 05系統裡同時只能有一條個人 VPN

01

第一次開啟開關

系統會請求新增 VPN 配置。允許之後,在「設定」的 VPN 列表裡會出現 Shadowrocket。這是作業系統對個人 VPN 的授權,不是節點提供方的登入,也不是本應用的帳號——應用沒有帳號系統。

拒絕則虛擬網卡不會建立,開關沒有可作用的對象。以後若在系統設定裡刪掉這條配置,或螢幕使用時間 / MDM 禁止 VPN,開關會再次失效,需要重新授權。重灌應用有時會丟掉這條系統配置,看起來像「突然不能連了」,其實是授權沒了,不是記錄過期。

授權對象是本機延伸。流量之後去哪,仍由你選中的記錄和目前策略決定。商店許可只覆蓋到這一層:允許應用去申請系統 VPN。它不包含任何出口。

02

「已連線」只說明隧道在

Shadowrocket 主介面:未連線的開關,以及 Global Routing 目前為 Config
主介面頂部的開關管隧道。Global Routing 裡選 Config / Proxy / Direct。截自 App Store,以你裝置上的版本為準。

狀態列出現 VPN 圖示、開關停在接通,表示延伸正在執行。此時一條連線仍可能被判成 DIRECT,從行動網路或 Wi-Fi 原路徑離開,完全不經過你選中的那條記錄。

因此不能用「已經連上了」當作「所有請求都進了節點」。要看位元組有沒有進記錄,用 Data 的兩條累加器;要看規則有沒有把主機留給直連,用 規則

開關閃爍、反覆彈回,表示延伸沒能穩定跑起來。常見原因是目前記錄握手失敗(類型、傳輸層、證書、UUID 與遠端不一致),或系統裡根本沒有可用的 VPN 配置。換記錄之前,先確認策略不是 Direct——Direct 下隧道可以亮著,但不會去握手遠端,彈回和「節點壞了」是兩件事。

沒有高亮行時開啟開關,結果取決於版本。不要依賴「未選中也能連」。列表裡必須有一條可被當作出口的記錄,見 物件

03

Config · Proxy · Direct

這三項覆蓋整份目前配置,比改一條規則更優先被看到。它們回答的是:流量進隧道之後,還要不要問規則。

策略與記錄是分開選的。換一條記錄不會自動改 Config / Proxy / Direct;改策略也不會換高亮行。兩者都選錯時,螢幕上仍可能顯示已連線。

對照必須按 Direct → Proxy → Config 的順序做,一次只動策略,見 Data。在 Config 下反覆改 FINAL、同時換記錄,等於沒有對照。

04

一條連線進隧道之後

延伸收下出站之後,大致按這個順序處理,細節以目前版本為準:

  1. 若策略為 Direct:送回系統原路徑,不問規則,不握手目前記錄。
  2. 若策略為 Proxy:不問規則,發往目前高亮記錄。記錄握手失敗,這一步就停。
  3. 若策略為 Config:用目前配置裡的名單自上而下匹配,得到 DIRECT / PROXY / REJECT。
  4. DIRECT 的連接回到原路徑;REJECT 丟掉;PROXY 的連線發往目前記錄。
  5. 若啟用了改寫,在請求已經被看見之後再改 URL 或頭,見 改寫。它不回頭改寫分流結果。

UDP 與 TCP 都會進隧道,但不是所有記錄類型都同等轉發 UDP。某一應用只在 UDP 上失敗(遊戲、部分通話),先看這條記錄是否宣告支援,再看規則有沒有按埠把它 REJECT 掉。

解析發生在匹配前後的哪一步,會影響規則看見的是名字還是地址,見 DNS

05

系統裡同時只能有一條個人 VPN

另一款 VPN 應用處於連線狀態時,iOS 通常不會把流量再交給 Shadowrocket。此時本應用開關即使亮著,位元組也可能從未進入本延伸。對照故障時,先看系統 VPN 列表裡目前生效的是哪一條。

飛航模式、Wi-Fi 與行動網路切換、低電量、系統回收背景,都會拆掉隧道。這是框架行為,不是記錄突然「過期」。門戶認證網路要先讓裝置自己完成登入頁,再開開關。這些邊界的展開見 系統