手上有个Android vpn开发的需求,对这一块也没什么经验,网上找资料发现很有限,整理出来结论如下:
1【知乎】https://www.zhihu.com/question/22675356/answer/22219771
根据 http://stackoverflow.com/questions/10444757/how-to-configure-vpn-programatically
的说法,需要用反射调用一些私有api完成这个工作,还是比较复杂的…
https://code.google.com/p/android/issues/detail?id=8915 这里提到了一些方案…
这个行为似乎是谷歌所不允许的,所以要么你直接获取root权限完成,要么最好还是换一个吧…这个课题似乎有些……难以完成…
2 【EOE】上面这个贴说的比较详尽:目前网上的方案就是两个:1、XinkVPN——限Android2.3以下版本;2、OpenVpn,需要root。http://www.eoeandroid.com/thread-560442-1-1.html?_dsign=74c4cd5a
----------------------------------------------------------
我的客户需求,需要有一个自己的App能够和自己的VPN服务器建立VPN连接,而不是走系统VPN设置.
我先说几点吧:
1.无论是安卓2.3版本还是4.0+版本的系统设置源代码我都已经看过了,基本逻辑为,接收用户输入,模式选择,生成对应的VPNProfile,这是一个基类,根据不同的协议可以进行扩展,例如L2TP/IPSec PSK,亦或是PPTP,亦或是L2TP/IPSec AuthX,之后通过AIDL调用IConnectivityManager中定义的接口完成.
2.VPNProfile,IConectivityManager这些实现设置中VPN功能的核心组件,均在com.android.internal.net包中,我想说道这里就很清楚了,不同于android.net包,前者是谷歌的内部接口,是不对外开放的黑盒组件,安卓2.3上面,有一位大神剥离了部分internal包中的VPN组件,做成了自己的VPN软件可以满足各位的需求,这个东西叫做xinkVPN,但是很抱歉,因为是黑盒,所以4.0之后安卓封闭了许多VPN接口,导致这个开源项目已经不可能用了。
3. 4.0之后,安卓提供VPNService供大家实现自己的VPN应用,这句话我是从DEVELOPER网站上面翻译过来的,意思是什么,意思就是,我只帮你建立最最基础的TUN,后面的工作你自己完成,说道这里大家可能不太清楚,我建议大家去仔细地看一看VPN Protocol到底是什么意思,何为TUN Protocol (PPTP/L2TP/IKEV2),何为加密算法(IPSec/HSSL)
4. 这里说一下楼主你的思路,其实你完全想错了,就像在第三点中我说的那样,PPTP只是一个隧道协议,而这一部分正好是安卓提供给你的,至于为什么你不行,原因是,VPNService使用的TUN技术是不同于安卓设置应用中的那些什么PPTP/L2TP协议的(这些协议的TUN建立,实在linux内核中做的)
----------------------------------------------------------
说了这么多,最后和你说一下解决方案:
1.强行自己在DatagramTunnel中建立协议,不好意思,这个我真不知道,可以说,直到目前,网上没有任何相关资料,无论是google AOSP论坛,statckoverflow,亦或是github上都是一片哀嚎
2.如果你的server是走L2TP.PPTP.CICSO.IKEV2协议的,那么你可以引导用户进入设置界面自行设置
3.OpenVPN,这是目前唯一一个采用了VPNService框架做出来的VPN应用,并且是开源的,如果你的服务器支持OpenVPN协议,那么无疑这是最佳选择
-----------------------------------------------
可能有人会问,为什么OpenVPN可以在VPNService的特殊网络接口中传输加密数据,那是因为OpenVPN协议本身的特殊性(使用TCP/UDP进行封装),TUN协议不是在linux内核中建立而是在应用层建立的。