第一代Milestone配置openvpn过程详解

作者: lesca 分类: Android,Tutorials,Ubuntu,VPN 发布时间: 2011-06-18 19:11
  • 环境:Milestone One(古董我也不怕), Android 2.1 英文原版(系统版本不是大问题)
  • 条件:具有root权限
  • 工具:busybox
  • 模块:tun.ko
  • 动态库:libcrypto.so, libssl.so, (liblzo.so)
  • 可执行文件:openvpn, (openssl)

说明

1.带括号的不是必须的,只有当客户端配置文件中有相对应的选项时才可能需要用到。
2.动态库、可执行文件这两块可以直接从market下载安装openvpn-installer自动安装,同时你可以安装openvpn-settings以方面今后使用。本文将以openvpn-installer为主,并且按照以上列出的工具的顺序进行逐步分解。
3.以上提到的工具可以到这里下载

我们开始了!

1.获得root身份

lesca强烈建议您使用adb shell进行操作!

$ su

2.重新挂载/system文件系统属性为RW

先看下/system的设备名称、文件系统等信息:

# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock6 /system yaffs2 ro 0 0
/dev/block/mtdblock8 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock7 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock5 /cdrom yaffs2 rw 0 0
tmpfs /tmp tmpfs rw,size=2048k 0 0
/dev/block/mtdblock0 /pds yaffs2 rw,nosuid,nodev 0 0
/dev/block/mmcblk0p2 /data/appsd ext2 rw,errors=continue 0 0
/dev/block//vold/179:1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

因此,执行该命令:

mount -o rw,remount -t yaffs2 /dev/block/mtdblock6 /system

3.安装busybox

方法一:去market下载busybox即可,这是lesca推荐的方法!
方法二:(如果你想知道原理的话看下去)
随本文也一同打包了busybox的可执行文件,因此可以直接复制到/system/bin目录下:

# cp busybox /system/bin/

但是,光有busybox而没有符号链接是很不方便的,这使其他很多工具不能使用。

建议

为了操作方便,您可以将安装包中的bash也一同复制到/system/bin下,然后在命令行下输入bash即可使用bash

4.安装ifconfig和route

这两个程序是busybox中的,只需要做个符号链接指向busybox即可。

# mkdir /system/xbin/bb
# ln -s /system/bin/busybox /system/xbin/bb/ifconfig
# ln -s /system/bin/busybox /system/xbin/bb/route

那么为什么不直接使用系统内置的(/system/bin目录下)的ipconfig和route程序呢?这是因为MS的这两个内置程序和openvpn不兼容。

5.安装tun.ko模块

这是本教程的关键部分!请务必小心谨慎,搞不好你系统要重刷。
(该模块已经在下载的包中提供,MS一代完美安装!)

# cp tun.ko /system/lib/modules/
# chown 0:0 /system/lib/modules/tun.ko
# chmod 0644 /system/lib/modules/tun.ko
# insmod tun.ko

注意

insmod命令重启后会失效。

我们希望有某种自动机制,每次系统启动或者进行连接的时候能系统够自动加载该模块。

  • 连接时加载
  • openvpn settings提供了每次连接自动加载的功能。该程序已经在下载的安装包中。
    打开该程序,在Advanced-TUN Module settings可以设置tun模块的加载方式,但是请务必把路径改成/system/lib/modules/tun.ko

  • 启动时加载模块
  • 对于第一代Milestone Android2.1的系统而言,我们可以通过修改/system/bin下的mot_boot_mode文件来达到开机加载模块的目的!如果你没有做过App2SD,那么可能没有这个文件,这时需要手动创建。请至少确保其中包含以下四行,否则您的系统可能无法正常启动。

    #!/system/bin/sh
    export PATH=/system/bin:$PATH
    mot_boot_mode.bin
    insmod /system/lib/modules/tun.ko
    

6.安装openvpn installer

这两个程序已经在下载的安装包中。您仍可到到菜市场去搜索下载最新版本。
软件打开后,点Install,然后叫你选择安装在哪,根据我们前面的描述我们已经可以做出选择:

  • openvpn – /system/bin
  • ifcinfg/route – /system/xbin/bb/

注意

我试过其他路径但是会出错,还是按照我的经验来吧,如果你全部做下来还连不上,可以根据错误日志再选其他的路径试试。

为了满足下lesca的完美主义情节,以下会稍微介绍下这些文件应该在手机文件系统什么地方,但是您完全可以跳过它们。

  • 动态库
  • # cp libcrypto.so /system/lib/
    # cp liblzo.so /system/lib/
    # cp libssl.so /system/lib/
    

    如果你没有liblzo.so也不必惊慌,这不影响我们连接,它主要用于数据压缩。

  • 可执行文件
  • #cp openssl /system/bin/
    #cp openvpn /system/bin/
    

7.复制你的证书和配置文件

可以使用Memory card access模式了,把你的证书相关文件、配置文件复制到/sdcard/openvpn目录下。
如果你熟悉adb的话,可以通过adb push命令直接发送文件。

8.进行连接

激动的时刻到了,您可以直接在安装好了的openvpn settings里进行连接,但是lesca建议您使用命令行,这样可以看到连接日志,以便能够检查出错误。

# cd /sdcard/openvpn/
# openvpn --config xxx.ovpn

接下来就看人品了,如果出现错误,欢迎交流。如果一次性成功了,那恭喜你!你可以退出shell,之后都可以交给settings来操作了。

References:
[1] Android G1 OpenVPN 系列教程之──OpenVPN的安装与使用
[2] Issue 64: tun.ko for Milestone
[3] OpenVPN on android

版权声明

本文出自 Lesca 技术宅,转载时请注明出处及相应链接。

本文永久链接: https://www.lesca.cn/archives/set-up-openvpn-on-milestone-one.html

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!