博客
「已连接」三个字管不到规则。
主界面顶部的开关启动的是 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 或头,见 改写。它不回头改写分流结果。解析发生在匹配前后的哪一步,会影响规则看见的是名字还是地址,见 解析。
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,而不是再导入一份规则。