【问题标题】:VpnService - update network parametersVpnService - 更新网络参数
【发布时间】:2019-12-02 16:24:44
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 连接@Roee84后为什么要更改网络参数
  • 为什么不能尝试断开连接再连接,而不是更改同一个对象的参数。可能你必须这样做。
  • 这就是我正在做的事情,但由于某种原因,此代码在 Chromebook (ChromeOS) 上中断,因此我正在尝试寻找解决方法。

标签: android android-vpn-service


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2019-05-06
      • 2018-08-12
      • 1970-01-01
      • 2016-09-14
      相关资源
      最近更新 更多