在CM7/9上使用OpenVPN
最近把Defy+从CM9刷回了CM7,由于CM9实在是太吃内存了。另外一个原因就是ICS对VPN的支持实在太差(见https://code.google.com/p/android/issues/detail?id=23124),很多人都报告L2TP在ICS上无法正常连接。
CM7自带OpenVPN的客户端,CM9必须另外安装。CM9的客户端可以到这里下载:https://play.google.com/store/apps/details?id=de.blinkt.openvpn,只支持4.0+,不支持tap模式(服务端用这个很少,一般是tun)。这个客户端是目前Android上最好的第三方OpenVPN客户端,支持直接读入ovpn和证书文件,几乎100%的免配置。
OpenVPN for Android在ICS上唯一需要注意的是可能需要选择Fix permissions for /dev/tun
(需要root),至少在我的Defy+ CM9上面需要这样选择。据说三星的某些ROM根本没有这个文件,那么很遗憾无法使用OpenVPN。
CM7的话需要先生成p12文件(如果服务端使用的是客户端/服务器双证书认证),步骤如下:
准备好服务器CA证书(ca.crt),客户端证书(client.crt)和客户端密钥(client.key),在linux下运行
openssl pkcs12 -export -in client.crt -inkey client.key -certfile ca.crt -name magic -out client.p12
然后把这个文件拷到SD卡根目录,在Android上通过”设置”-“位置与安全”-“从SD卡安装”来安装证书。
如果是用户名/密码认证的话则只需要安装CA证书,直接把ca.crt拷到SD卡根目录即可安装。
然后在”无线与网络设置”-“虚拟专用网设置”-“添加虚拟专用网”里面选择OpenVPN,按照服务器提供的ovpn文件设置即可。如果是用户名/密码认证需要在”高级”-“额外参数”里面添加:
--ns-cert-type server --persist-tun --persist-key --nobind --resolv-retry infinite --tun-mtu 1500
如果服务器不是使用的默认AUTH算法(CM7客户端默认是SHA1)的话(在ovpn里面auth一行会定义),还需要加上
--auth algorithm
algorithm替换为所使用的算法。否则在服务器端log里会看到类似的条目:
WARNING: 'auth' is used inconsistently, local='auth alg', remote='auth SHA1'
本文参考:
http://lgallardo.com/en/2011/09/12/openvpn-en-android-cyangenmod/