桌面 VPN 会在两处影响 Genymotion,而修好一处并不能证明另一处也没问题。第一处是桌面应用用来控制虚拟设备的连接;第二处是虚拟 Android 应用通往私有服务的路径。在动适配器之前,先确定你实际改的是哪一个,然后记录 Genymotion Desktop 版本、主机操作系统和虚拟化平台,因为为 VirtualBox 仅主机适配器写的说明,并不适用于 QEMU 设备,也不适用于托管在云端的会话。

一台机器上的两条路径

控制路径从 Genymotion 桌面应用通向虚拟设备,通常经过仅主机网络。应用路径则从 Android 内部向外,通向应用所对话的对象。主机 VPN 可以承载后者,却切断前者,所以 桌面上浏览器能上网几乎证明不了什么。一条隧道可以同时服务两条路径,也可以只服务一条,这种安排是决定,不是偶然。

写清楚你在排查哪条路径。这一领域浪费的多数时间,来自设备根本没起来就去改私有应用的 DNS,或者应用只是用错了域名解析器,却去放宽主机 VPN。

让控制连接保持存活

Genymotion 自己的 Desktop 支持说明记录了一个 VirtualBox 案例:主机 VPN 一旦启用,Desktop 就看不到虚拟设备,真正关键的例外是 VirtualBox 网络管理器中列出的真实仅主机适配器。请把这些适配器列出来,而不是猜一个网段:

VBoxManage list hostonlyifs

文档里印着的默认网段,不是在所有机器上一概绕过私有网络的借口。只添加覆盖在用适配器的最小例外,并让 VPN 管理员批准它,因为受管客户端可能故意封锁本地网络。把例外连同适配器名称和批准日期一起记下来。半年之后,那条记录是唯一能解释这条规则为何存在的东西。

同一份说明还指出,QEMU 组合没有在 VPN 下测试过。请把它当作兼容性限制,而不是“换成桥接网络就能修好”的暗示;换适配器只是改变了故障形态,并没有解决未测试的组合。

方案一:让主机承载流量

选这条路时,客户机的数据包必须到达 VPN 既允许又加密的接口。这是路由问题,不是状态灯问题:客户机的数据包要到达 VPN 会加密的接口,回程也要能找到路。

主机上的浏览器只能证明主机的路径,完全说明不了虚拟设备来源是否被接受。有些 VPN 客户端对转发或转换过的流量与本地产生的流量区别对待,所以在下结论说隧道可用之前,要从 Android 内部测试。Android 的解析器也不是主机的解析器。如果桌面上域名能解析、应用里却失败,先读客户机的解析器配置,再去动 VPN 配置文件。

方案二:在 Android 内部运行受支持的客户端

这时客户机持有自己的配置、凭据、路由和解析器策略。常规 Android VPN 接口不需要超级用户权限,因此标准客户端可以装在虚拟设备里并连接。批准是常被跳过的一环。组织必须允许该客户端和该虚拟设备环境,而干净的导入本身并不满足设备注册或合规状态检查。在围绕它搭建流程之前,先去问。

两种选择还可以叠加:Android 内部的隧道可以通过主机上已在运行的隧道到达服务器。这种安排需要可达的端点和你真正放行的转发,而不是两盏碰巧同时亮起的绿灯。

从应用中验证,并把安排写下来

每次测试都用同一个 Android 应用,并读取它的报告:地址是否有响应、私有域名能否解析、应用返回了什么。三项观察可以把路由故障、解析器故障和策略拒绝区分开。

设备起不来,或 Desktop 丢失设备时,把它当作控制路径故障,而不是 DNS 故障。这个症状属于第一条路径,修复点在主机上,不在 Android 里。最后记录四个事实:Genymotion Desktop 版本、虚拟化平台、隧道由哪一侧持有,以及如果加了例外,那条仅主机例外的确切内容。选择网络所有者支持的、有文档的安排;当私有服务依赖企业 VPN 或合规检查时,不要把关掉 VPN 或削弱检查当成中立的排障手段。

相关文章