部落格
「已連線」三個字管不到規則。
主介面頂部的開關啟動的是 iOS 的 Network Extension:裝置出站被送進一條虛擬網卡。記錄、規則、Data 都在這個介面之後才發生。狀態列出現 VPN 圖示,只表示這一層在。
授權
第一次開啟開關
系統會請求新增 VPN 配置。允許之後,在「設定」的 VPN 列表裡會出現 Shadowrocket。這是作業系統對個人 VPN 的授權,不是節點提供方的登入,也不是本應用的帳號——應用沒有帳號系統。拒絕則虛擬網卡不會建立,開關沒有可作用的對象。以後若在系統設定裡刪掉這條配置,或螢幕使用時間 / MDM 禁止 VPN,開關會再次失效,需要重新授權。重灌應用有時會丟掉這條系統配置,看起來像「突然不能連了」,其實是授權沒了,不是記錄過期。
授權對象是本機延伸。流量之後去哪,仍由你選中的記錄和目前策略決定。商店許可只覆蓋到這一層:允許應用去申請系統 VPN。它不包含任何出口。核對開發者與買斷範圍,見 商店。沒有高亮行時開啟開關,結果取決於版本。不要依賴「未選中也能連」。列表裡必須有一條可被當作出口的記錄,見 物件。
已連線
只說明隧道在
狀態列出現 VPN 圖示、開關停在接通,表示延伸正在執行。此時一條連線仍可能被判成 DIRECT,從行動網路或 Wi-Fi 原路徑離開,完全不經過你選中的那條記錄。因此不能用「已經連上了」當作「所有請求都進了節點」。要看位元組有沒有進記錄,用 Data 的兩條累加器;要看規則有沒有把主機留給直連,用 規則。
開關閃爍、反覆彈回,表示延伸沒能穩定跑起來。常見原因是目前記錄握手失敗(類型、傳輸層、證書、UUID 與遠端不一致),或系統裡根本沒有可用的 VPN 配置。換記錄之前,先確認策略不是 Direct——Direct 下隧道可以亮著,但不會去握手遠端,彈回和「節點壞了」是兩件事。策略與記錄是分開選的。換一條記錄不會自動改 Config / Proxy / Direct;改策略也不會換高亮行。兩者都選錯時,螢幕上仍可能顯示已連線。
策略
進隧道之後還要不要問規則
Config / Proxy / Direct 覆蓋整份目前配置,比改一條規則更優先被看到。Config:每條連線交給目前規則檔案,域名、IP、GEOIP 在這裡才被計算,日常分流依賴這一項。Proxy:規則不參與,出站一律送往目前高亮的記錄,用來切開「是規則寫錯了」還是「這條記錄本身握手或轉發失敗」。Proxy 能開啟、Config 不能,去查規則;兩種都不能,去查記錄或對端。Direct:規則不參與,出站一律走系統原路徑,圖示可以仍亮,用來切開「去掉轉發之後,這臺裝置自己有沒有網」。Captive Portal、網銀、本機區域網,常常要先落到 Direct 才能完成。
一條連線進隧道之後,大致按這個順序處理。若策略為 Direct:送回系統原路徑,不問規則,不握手目前記錄。若策略為 Proxy:不問規則,發往目前高亮記錄,記錄握手失敗,這一步就停。若策略為 Config:用目前配置裡的名單自上而下匹配,得到 DIRECT / PROXY / REJECT。DIRECT 的連接回到原路徑,REJECT 丟掉,PROXY 的連線發往目前記錄。若啟用了改寫,在請求已經被看見之後再改 URL 或頭,見 改寫。它不回頭改寫分流結果。解析發生在匹配前後的哪一步,會影響規則看見的是名字還是地址,見 DNS。
UDP 與 TCP 都會進隧道,但不是所有記錄類型都同等轉發 UDP。某一應用只在 UDP 上失敗,先看這條記錄是否宣告支援,再看規則有沒有按埠把它 REJECT 掉。對照必須按 Direct → Proxy → Config 的順序做,一次只動策略。在 Config 下反覆改 FINAL、同時換記錄,等於沒有對照。展開見手冊 隧道 章。
「已連線」這三個字還常常和列表探測綁在一起讀。探測通了,人會以為「整條路都通」;探測紅了,人會以為「整臺裝置沒網」。兩者都不對。探測只問這一跳,Direct 策略下網頁仍可走原路徑開啟,探測紅著也沒關係。Config 下某主機走 DIRECT,探測紅著、那個網站卻能開,也是正常。要把「隧道在不在」和「這一跳探不探得通」和「這一次訪問走了哪一側」分成三句話來說。第一句看開關,第二句看毫秒數,第三句看 Data。規則只在第三句裡、並且只在策略為 Config 時才進入畫面。若第三句裡 Proxy 在漲而網頁仍失敗,問題已經離開隧道這一層,去對端、解析或那個 App 自己的策略裡找;若第三句只有 Direct 在漲,再回頭看策略是不是 Direct、規則是不是先寫成了 DIRECT。開關本身回答不了這兩問。
另一款 VPN 應用處於連線狀態時,iOS 通常不會把流量再交給 Shadowrocket。此時本應用開關即使亮著,位元組也可能從未進入本延伸。對照故障時,先看系統 VPN 列表裡目前生效的是哪一條。飛航模式、網路切換、低電量也會拆掉隧道,這是框架行為,不是記錄突然過期。門戶認證頁沒完成時,裝置自己還沒有出站,Direct 下就應當先能開啟登入頁;這時開開關、刷容器、改規則,都是在沒有網的前提上操作。授權被拒或配置被刪,開關同樣沒有可作用的對象,需要重新允許系統 VPN,而不是再匯入一份規則。