带有 scramble 行的配置会被官方客户端导入,然后在握手阶段失败,或者该行被悄悄丢弃后导入并连接到空处。该指令属于打过补丁的 OpenVPN 构建,而不是上游的功能集,因此不带该补丁的客户端无法使用由此产生的协议。向普通配置添加这一行并不会添加实现。在文件有任何意义之前,两端都必须具备兼容性。

先把它当作协议问题,其次再当作应用商店问题。

该选项是线缆格式,不是偏好设置

scramble 补丁改变隧道数据包在线缆上的样子,通常是用共享值对载荷做 XOR。这会改变双方必须生成和接受的字节,因此它是一种格式约定,而不是本地设置。一方应用变换而另一方不应用,得到的会话虽然通过认证,却无法承载任何可用内容。只有当两端运行相同的补丁行为时,该设置才有意义。

两个产品都可以宣称支持混淆,却实现互不兼容的变换。菜单里的名字不是规范;运营方的实际构建才是规范。

导入文件并不等于兼容

客户端对未知指令的处理方式各不相同。有些直接拒绝配置,有些发出警告并继续,还有些丢弃该行并以普通握手连接。最后一种最危险,因为隧道可能与同时接受两种方式的服务器建立,然后只在流量上失败。因此导入成功只能证明解析器容忍了这一行,不能证明连接会正常工作。

用部署真正需要的客户端和构建,去对运营方真正运行的服务器进行测试。

APK 是供应链决策

打过补丁的 Android 构建之所以存在,是因为有人编译了它,而它的存在并不能说明现在由谁维护。在批准某个构建之前,部署负责人应审查它的源码版本、补丁的应用方式、签名身份和更新路径。VPN 应用要处理凭据和所有受保护的流量,因此一个无关的下载页面不是可接受的发布方。

向服务运营方询问受支持的客户端组合及其当前安装渠道。如果该渠道已不存在,部署就有一个旧二进制文件解决不了的维护问题。

混淆既不是加密,也不是隐蔽

改变数据包可见的格式并不能替代加密,也不保证网络无法对连接进行分类。时序、端点声誉和周边流量仍然携带信息。保留配置所依赖的服务器身份检查,例如 按预期名称验证证书,即使额外一层的目的是改变外观。

不要用 tls-crypt 或代理设置来替代该补丁并称之为等效。两者改变的是连接的不同部分。

要求维护中的成对方案

值得争取的结果是两个都得到维护且明确兼容的端点,并且每一端都有成文的更新路径。如果不存在这样的一对,就评估受支持的服务器传输方式或不同的访问设计,而不是让一个有特权的旧应用继续存活。这个决定属于服务所有者,而不是找到 APK 的人。

客户端上可用的 scramble 复选框只是本地能力观察。在真实会话承载流量之前,它对服务器一无所知。

相关文章