如何以编程方式配置VPN?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (127)

我需要实现一个android应用程序,它允许用户配置VPN连接而不必访问android设备的本机菜单。有了这个我有两个问题:

  1. 在android 4.0 +(api level 14及以上版本)中,我发现有一个名为VpnService的新组件,它提供了一个用于创建虚拟网络接口,配置它并截取/转发小包到VPN服务器的钩子,但没有内置vpn协议,如PPTP或IPSec,只有实现它们的可能性。我的问题是,是否有任何现成的PPTP和IPSec与VpnService协同工作的解决方案?
  2. 在早期版本的android中,从我迄今为止发现的情况来看,似乎使用VPN的唯一方法是通过在Android中包装(使用反射)一些隐藏的apis来访问和配置内置的vpn解决方案,但这是因为设备需要扎根,所以隐藏的api实现可能因设备而异,从操作系统版本到操作系统版本也有所不同。有没有更好的方式来编程配置底层linux操作系统的内置VPN?
提问于
用户回答回答于

1)我不知道Android 4.x ICS VpnService的任何开源PPTP或IPSec实现。VpnService旨在创建自定义协议VPN应用程序(理论上可以是pptp或IPSec)。我发现唯一的开源实现是利用这个新的API是OpenVPN的:

http://code.google.com/p/ics-openvpn/

这提供了一个完全可以控制的潜在VPN解决方案(服务器也是开源的),但它不是PPTP或IPSec。如果你了解PPTP协议,应该可以将其用作实现此类VPN客户端的模型。

2)唯一的方法是通过私有API。事实上,即使你想在后来的版本中使用内置的VPN支持(例如内置PPTP或IPSec支持)来实现它,你也必须利用这些隐藏的API。有可能使用底层的linux内核在较低级别上做到这一点,但这需要根植操作系统并绕过Android应用范例。这不一定是使用私有API的更好选择。

扫码关注云+社区

领取腾讯云代金券