2010年7月13日星期二

搞定Android 1.5的OpenVPN

什么事情都是经过一次次的失败过来的。我在Android 1.5的ROM上折腾OpenVPN已经失败了n次,一直拖到昨天才解决一是因为自己懒惰,二是手机是LP在用,不过终于解决了OpenVPN的问题,也就让我彻底放弃了刷2.1 ROM的想法。

事情是这样的,我买的是华为的U8220,具体是荷兰版的T-Mobile Pulse,因为当时贪其性价比高就买了。买的时候没有考虑到ROM有那么难找,这一点,让我一直郁闷到现在。我一直用的是Modaco的8230精简版的ROM,也一直没做App2SD,这也是基于稳定性的考虑。不过正是因为这个ROM,让我在搞定OpenVPN的过程中省了很多心。

在1.5的ROM上折腾OpenVPN通常需要具备如下几个前提:
  1. 已经root过;
  2. 装了busybox;
  3. 有tun.ko模块;
  4. 电脑上装了Android SDK。
而刷完Modaco的ROM已经把这三样东西都准备好了。接下来就是准备OpenVPN的二进制文件。现在已经有静态编译的OpenVPN二进制文件下载,只需要往机器里推送一个文件就可以了,不需要推依赖库了。 下面说明步骤:

1. 下载OpenVPN的二进制文件:这里。请务必下载openvpn-static.bz2这个文件。最新的openvpn-static-2.1.1.bz2是不行的;

2. 打开终端,切换到Android SDK的tools目录下执行:

./adb remount
./adb push /path/to/openvpn-static /system/xbin/openvpn

3. 运行:adb shell;开始对Android的手机文件系统操作:

cd /system/xbin
chmod +x openvpn
mkdir bb
for file in `ls`;do
  if [ -f $file ]; then
    ln -s /system/xbin/$file bb/$file
  fi
done

上面的命令是让openvpn具有可执行权限;并且在/system/xbin/目录下,创建bb目录,并且把xbin里的所有文件都链接到bb下。

4. 到Android市场下载TunnelDroid或OpenVPN Setting,安装

5. 拷贝你的OpenVPN证书,ovpn等文件到SD卡上,放到/sdcard/openvpn/目录下。

6.打开OpenVPN Setting,选择对应的OpenVPN链接服务器即可。

好吧,看起来这些步骤都很简单。我的几次折腾主要失败在了两个地方:

- 没有/system/xbin/bb目录。
这个问题最初导致OpenVPN一直认证成功就直接断开。查看了TunnelDroid的日志之后,发现它寻找的路径是/system/xbin/bb/ifconfig而不是/system/xbin/ifconfig。

- OpenVPN二进制包的问题。
经过查文档,换到OpenVPN Settings客户端等步骤之后,我已经确信可执行文件都能找到了,但是用OpenVPN Settings连接,能够成功,但是机器的IP依然没有改变。我都要崩溃致死了。在消停了一段时间之后,我又一次打开了TunnelDroid,连接了一次,看到了完整的日志,发现是这样的一个错误:
unable to redirect default gateway -- VPN gateway parameter (--route-
gateway or --ifconfig) is missing
但是我无论是在Android用超级终端还是用adb连接,ifconfig和route都能够成功执行的啊。不死心,终于搜索到了问题的关键。原始讨论在这里。关键的答案在17楼。

昨天一试之下终于成功,真是踏破铁鞋啊。而问题的症结居然是OpenVPN自己!!!

说说我参考的一些文档吧:
  1. virushuo的关于OpenVPN的设置文章已经有点老了,不过可以阅读一下,了解背景只是;
  2. 伊格的关于VPN的文章基本上没什么问题,除了那个OpenVPN的二进制文件对我不适用;
  3. 看文章的时候也顺带看看评论;
  4. Android OpenVPN Installer的issue帖子设计了我遇到的问题的关键;
  5. 不要用Android市场里的OpenVPN Installer安装OpenVPN,除非你没有tun.ko;
  6. TunnelDroid有日志查看功能,OpenVPN Settings没有;虽然后者使用更方便;
最后是致谢,虽然不是什么惊天动地的大事,但是我还是想感谢大家的热情帮助。

特别感谢小小粒(@chocli),非常热情的给了我OpenVPN帐号;虽然我当时在推特求助的时候只是想能够借一个可以短时间测试的帐号,但是小小粒慷慨的让我一直使用。正是因为小小粒给的帐号,才让我有机会一次次的测试OpenVPN,最终成功。

感谢令狐虫(@ch_linghu)在技术上给予了我很多指导;还推荐了很多软件给我测试。

感谢所有在Blog介绍OpenVPN的设置的朋友,因为有了你们普及的知识,我才能成功安装OpenVPN。

没有评论:

发表评论