2

我有一个 VPN 服务,使用 ParcelFileDescriptor 和一个构建器来设置网络参数。像这样的代码:

private Builder builder = new Builder().setSession("myService")
                                       .addAddress(...)
                                       .addDnsServer(...)
                                       .establish()

现在,我想在连接时更新网络参数(例如 DNS 服务器)。

文档中的相关部分是这样的:

为避免冲突,同一时间只能有一个活动 VPN 接口。通常网络参数在 VPN 连接的生命周期内永远不会改变。应用程序在关闭前一个文件描述符后创建新的文件描述符也很常见。但是,在执行无缝切换时很少有两个接口,但并非不可能。在这种情况下,新界面创建成功后,旧界面将被停用。两个文件描述符都是有效的,但现在传出的数据包将被路由到新接口。因此,在耗尽旧的文件描述符之后,应用程序必须关闭它并开始使用新的文件描述符。如果无法创建新接口,则现有接口及其文件描述符保持不变。

正如它所说 - “通常网络参数在 VPN 连接的生命周期内永远不会改变”,但我确实想改变它们。可能吗?

4

2 回答 2

0

我认为这是可能的。您是否仔细阅读了以下段落?

但是,在执行无缝切换时很少有两个接口,但并非不可能。在这种情况下,新界面创建成功后,旧界面将被停用。两个文件描述符都是有效的,但现在传出的数据包将被路由到新接口。

可以在现有FD的基础上新建一个FD,然后关闭旧FD,新的FD会继续处理之前的数据包。但是,如果从虚拟卡路由中删除某些连接或从非虚拟卡路由更改为虚拟卡路由,则可能会强制断开连接

我强烈建议您编写一个 vpn 演示来测试这种情况。如果你测试了,不管结果如何,希望你能告知我,谢谢!

于 2021-05-19T07:23:34.490 回答
0

对于那些正在阅读这个老问题的人——当时它在 Chromebook 上被破坏了,我向谷歌提交了一份错误报告,他们确认了这个错误,并在一段时间后修复了它。

于 2021-05-19T12:08:45.893 回答