隧道
开关管的是系统接口,不是某一条记录。
主界面顶部的开关启动的是 iOS 的 Network Extension:设备出站流量被送进 Shadowrocket 的虚拟网卡。记录、规则、Data 都在这个接口之后才发生。平台限制见 系统。
01
第一次打开开关
系统会请求添加 VPN 配置。允许之后,在「设置」的 VPN 列表里会出现 Shadowrocket。这是操作系统对个人 VPN 的授权,不是节点提供方的登录,也不是本应用的账号——应用没有账号系统。
拒绝则虚拟网卡不会建立,开关没有可作用的对象。以后若在系统设置里删掉这条配置,或屏幕时间 / MDM 禁止 VPN,开关会再次失效,需要重新授权。重装应用有时会丢掉这条系统配置,看起来像「突然不能连了」,其实是授权没了,不是记录过期。
授权对象是本机扩展。流量之后去哪,仍由你选中的记录和当前策略决定。商店许可只覆盖到这一层:允许应用去申请系统 VPN。它不包含任何出口。
02
「已连接」只说明隧道在
状态栏出现 VPN 图标、开关停在接通,表示扩展正在运行。此时一条连接仍可能被判成 DIRECT,从蜂窝或 Wi-Fi 原路径离开,完全不经过你选中的那条记录。
因此不能用「已经连上了」当作「所有请求都进了节点」。要看字节有没有进记录,用 Data 的两条累加器;要看规则有没有把主机留给直连,用 规则。
开关闪烁、反复弹回,表示扩展没能稳定跑起来。常见原因是当前记录握手失败(类型、传输层、证书、UUID 与远端不一致),或系统里根本没有可用的 VPN 配置。换记录之前,先确认策略不是 Direct——Direct 下隧道可以亮着,但不会去握手远端,弹回和「节点坏了」是两件事。
没有高亮行时打开开关,结果取决于版本。不要依赖「未选中也能连」。列表里必须有一条可被当作出口的记录,见 对象。
03
Config · Proxy · Direct
这三项覆盖整份当前配置,比改一条规则更优先被看到。它们回答的是:流量进隧道之后,还要不要问规则。
-
Config
每条连接交给当前规则文件。域名、IP、GEOIP 在这里才被计算。日常分流依赖这一项。规则怎么写,见规则页。
-
Proxy
规则不参与。出站一律送往当前高亮的记录。用来切开「是规则写错了」还是「这条记录本身握手或转发失败」。Proxy 能打开、Config 不能,去查规则;两种都不能,去查记录或对端。
-
Direct
规则不参与。出站一律走系统原路径。VPN 图标可以仍亮。用来切开「去掉转发之后,这台设备自己有没有网」。Captive Portal、网银、本机局域网,常常要先落到 Direct 才能完成。
策略与记录是分开选的。换一条记录不会自动改 Config / Proxy / Direct;改策略也不会换高亮行。两者都选错时,屏幕上仍可能显示已连接。
对照必须按 Direct → Proxy → Config 的顺序做,一次只动策略,见 读数。在 Config 下反复改 FINAL、同时换记录,等于没有对照。
04
一条连接进隧道之后
扩展收下出站之后,大致按这个顺序处理,细节以当前版本为准:
- 若策略为 Direct:送回系统原路径,不问规则,不握手当前记录。
- 若策略为 Proxy:不问规则,发往当前高亮记录。记录握手失败,这一步就停。
- 若策略为 Config:用当前配置里的名单自上而下匹配,得到 DIRECT / PROXY / REJECT。
- DIRECT 的连接回到原路径;REJECT 丢掉;PROXY 的连接发往当前记录。
- 若启用了改写,在请求已经被看见之后再改 URL 或头,见 改写。它不回头改写分流结果。
UDP 与 TCP 都会进隧道,但不是所有记录类型都同等转发 UDP。某一应用只在 UDP 上失败(游戏、部分通话),先看这条记录是否声明支持,再看规则有没有按端口把它 REJECT 掉。
解析发生在匹配前后的哪一步,会影响规则看见的是名字还是地址,见 解析。
05
系统里同时只能有一条个人 VPN
另一款 VPN 应用处于连接状态时,iOS 通常不会把流量再交给 Shadowrocket。此时本应用开关即使亮着,字节也可能从未进入本扩展。对照故障时,先看系统 VPN 列表里当前生效的是哪一条。
飞行模式、Wi-Fi 与蜂窝切换、低电量、系统回收后台,都会拆掉隧道。这是框架行为,不是记录突然「过期」。门户认证网络要先让设备自己完成登录页,再开开关。这些边界的展开见 系统。