2010年10月4日星期一

Motorola Milestone安装openvpn全攻略

自从入手了里程碑后,就一直在研究这个android手机,使用wifi联网速度非常的不错,可是郁闷的是无法使用Facebook 和twitter. 在摸索手机的时候,在网络设置里面有 “虚拟专用网”一项,里面有添加“pptp”以及“L2TP”这几项。  看来有戏了。。。  Facebook, twitter  ,youtube   我来了。。。

pptp VPN  的尝试

因为手机的网络设置里面本身自带了pptp VPN 的这一项,所以我就直接先尝试这个了。 如何获得pptp VPN 每个的方法都不一样。 网上有各种免费的VPN ,大家可以找一找。 自己因为是打算长期使用,所以花钱买的VPS,来搭建的VPN。

VPS搭建 pptp VPN

我购买的是buyvm的openVZ 的vps , 因为buyvm 使用的是最新的技术,所以让以前只有XEN VPS 才能实现的 pptp VPN 现在在 openVZ 上也可以实现。 我买的是 256M 的这一款,配置如下

Memory:256 MB     Burst:512 MB     Disk Space:30 GB    Bandwidth: 1024 GB

关于bumvm 的VPS 安装pptp VPN 的全过程,参照的是 主机迷 的教程http://www.zhujimi.com/903.html
很多小盆友呢,趁着Buyvm最近的促销热潮入手了几个VPS,但是放着这些个VPS做什么用呢?难道像主机迷拿来观察用啊,肯定不行的啦,Buyvm既然是在HE,那就拿来建VPN吧…………

1、检查VPS是否有必要的支持。如果检查结果没有这些支持的话,是无法安装pptp的。

当然Buyvm的用户可以直接跳过。

modprobe ppp-compress-18 && echo ok

如果显示“ok”表明通过。不过接下来还需要做另一个检查:

cat /dev/net/tun

显示结果为下面的文本,表明通过:

cat: /dev/net/tun: File descriptor in bad state

上述两条只需一条通过,即可安装pptp。如果还有其它问题,或者请你的服务商来解决这个问题。

2、安装ppp和iptables。

yum install -y ppp iptables

3、安装pptp。

rpm -ivh http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm (32位系统使用)

rpm -ivh http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm (64位系统使用)

有些小盆友喜欢先wget再执行rpm,没必要多此一举。

4、配置pptp。首先我们要编辑/etc/pptpd.conf文件:

vim /etc/pptpd.conf

把下面字段前面的#去掉即可:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245


接下来再编辑/etc/ppp/options.pptpd:

vim /etc/ppp/options.pptpd

去掉ms-dns前面的#,并修改成如下字段:

ms-dns 8.8.8.8
ms-dns 8.8.4.4


5、设置pptp VPN账号密码。我们需要编辑/etc/ppp/chap-secrets这个文件:

vim /etc/ppp/chap-secrets

直接输入如下字段,zhujimi可以换成其他字段:

zhujimi pptpd zhujimi *

6、修改内核设置,使其支持转发。编辑/etc/sysctl.conf文件:

vim /etc/sysctl.conf

将“net.ipv4.ip_forward”改为1:

net.ipv4.ip_forward=1

同时在“net.ipv4.tcp_syncookies = 1”前面加# :

# net.ipv4.tcp_syncookies = 1

保存退出,并执行下面的命令来生效它:

sysctl -p

7、添加iptables转发规则。
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 12.34.56.78
(OpenVZ,12.34.56.78为你的VPS的公网IP地址)


 

#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
(XEN)

保存iptables转发规则:


/etc/init.d/iptables save

重启iptables:

/etc/init.d/iptables restart

8、重启pptp服务。

/etc/init.d/pptpd restart

9、设置开机自动运行服务。

chkconfig pptpd on
chkconfig iptables on


如果出现错误619则输入命令

mknod /dev/ppp c 108 0

然后重启VPS

如果出现错误800则修改/etc/ppp/options.pptpd文件,在require-mppe-128字段前面加#即可。。。

以上关于BUYvm VPS 搭建 pptp VPN  的内容摘自 主机迷

因为pptp VPN的服务器端如果搭建好了,则客户端就相对的简单了,在手机的网络设置里面里面添加虚拟专用网, 名称,IP,dns搜寻 这一项可以设置成GOOGLE的 DNS  8.8.8.8

我最开始就是测试的PPTP  VPN ,服务器端的搭建都没有问题,可是在电脑上连接 VPN,发现有些网站无法访问,比如 twitter  youtube 等,手机上就更不行了,显示VPN已经连接,可是就是上不去网,我也搞不明白到底是因为buyvm 的VPN 并非XEN ,还是我的搭建 PPTP VPN的时候有什么不对的地方。 最终 , 无奈只好抛弃PPTP vpn  转投openVPN.

 

服务器端 OPEN VPN 的搭建。

我还是采用的BUYVM 的256M 的openvz 的VPS , 安装的是 CentOS 5 32bit 版本的系统。

首先openvz 的服务器要安装 OPEN vpn 需要开启 TUN支持,可以用这个命令检测:cat /dev/net/tun   如果返回信息为:cat: /dev/net/tun: File descriptor in bad state 说明正常,否则发个ticket给VPS公司让他们帮忙开。还需要iptables_nat模块支持,用这个命令检测:iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE    返回信息为:iptables: Unknown error 4294967295 说明正常,否则同样需要发个ticket让VPS公司帮忙开通

 

53端口:

输入:

service named stop以使53端口
不被DNS占用。 (这里使用53端口,主要是为了测试是否能够突破CMZZ和CHINANET的验证而免费上网)

 

默认情况下centos的yum源没有OpenVPN的,先安装EPEL这个东西,使用命令:rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
成功后yum源里面就有OpenVPN了  , 我在尝试的时候,发现已经是5.4版本了,所以需要改为  rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

接下来就可以直接用yum 安装了,使用命令yum -y install openvpn

我们来找一下安装到哪去了,使用命令:locate easy-rsa
原来在这里:/usr/share/openvpn/easy-rsa 大家应该都是一样的。
我们把easy-rsa这个文件夹移出来,用命令:cp -R /usr/share/openvpn/easy-rsa /etc/openvpn/
然后cd /etc/openvpn/easy-rsa/2.0进入,生成OpenVPN需要的证书。

用vi vars来编辑环境变量,把最后几行根据实际情况修改:

[root@vps 2.0]# vi vars

然后,我们用vi打开了vars文件,首先输入I  使之成为insert模式

然后操作方向键,调到文件末尾,按照实际修改

export KEY_COUNTRY=”CN”

export KEY_PROVINCE=”GD”

export KEY_CITY=”GZ”

export KEY_ORG=”Lolita Ltd.”

export KEY_EMAIL=”loli@lolis.info”

修改完毕后,按下esc返回查看模式,输入:   并在:后输入wq   回车。

使设置生效:输入. Vars

Shell:

[root@vps 2.0]# . vars

接下来运行  ./clean-all 命令。。

./build-ca创建证书颁发机构

首先创建CA证书

./build-ca

接着创建服务器证书:

./build-key-server server

一路回车,直到Sign the certificate? [y/n]:   输入y  回车

1 out of 1 certificate requests certified, commit?  输入y  回车

建立客户端证书: (

理论上每个OpenVPN用户都有独立的证书,我们先来生成一个试试。
输入命令:./build-key client1,这里的client1是客户端名称,如果第二个就是client2了。

)在这里我使用的是 ./build-key user

 

运行 ./build-key user

过程同服务器,也是直到

Sign the certificate? [y/n]:   输入y  回车

1 out of 1 certificate requests certified, commit?  输入y  回车

最后生成Diffie Hellman参数:./build-dh,这个需要一点时间的。
完成上面的过程后,运行winSCP(请自行下载),把/etc/openvpn/2.0/keys里面的东西下载回来。

cd/etc/openvpn/   返回到OpenVPN文件夹,输入vi server.conf
创建配置文件。输入i到可写模式,将编写好的配置文件写入。以下是我的配置文件,请按需修改。

port 53
proto udp
dev tun

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3

 

到这里为止OpenVPN就配置好了,接下来我们设置外网访问。

输入vi /etc/sysctl.conf开始编辑,找到net.ipv4.ip_forward = 0改成net.ipv4.ip_forward = 1保存。

输入iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT - -to-source 1.2.3.4添加规则,注意最后1.2.3.4改成你的VPS的IP地址。

执行:

/etc/init.d/iptables save

/etc/init.d/iptables restart

把OpenVPN添加到开机启动,用vi /etc/rc.local进入编辑,在后面加入/usr/sbin/openvpn --config /etc/openvpn/server.conf &这一行。
需要在服务器上完成的操作到这里就结束了,输入openvpn --config /etc/openvpn/server.conf &启动。

 

 

接下来的是在客户端上的配置,这里先介绍一下在电脑上OPEN vpn客户端的设置

客户端配置:

安装OpenVPN,win安装很简单,不再累述。

首先回头看看下载回来的KEY文件夹,挑出ca.crt,user.key,user.crt

找到C:\Program
Files\OpenVPN\config(如果默认的话)

把以上3个文件放进去,并创建user.ovpn 文本文件。 (如果之前创建客户端证书的时候你使用的是 ./build-key user  那么就是创建user.ovpn   ,如果用的是 :./build-key client1 那么就创建                  client1.ovpn)

client

dev tun

proto udp

remote “SERVER-IP” 53

resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
verb 3
把第四行的SERVER-IP换成VPS的IP地址 ,并把53改为你要设置的端口(同前),然后保存。

(备忘,可以使用vi /etc/rc.local进入编辑。加入 /sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source 1.2.3.4)

 

下面我说一下在Milestone 里程碑上OPEN VPN客户端的安装和设置。 下面全文引用自

http://www.techotaku.net/post/53       Milestone配置OpenVPN教程(Android2.1)【图解】
 

由于众所周知的原因,我们需要使用VPN(虚拟专用网)进行“科学上网”。而OpenVPN作为更安全的VPN解决方案受到更广泛的欢迎。这里图解一下Motorola Milestone的OpenVPN上网配置方法。
(理论上适用于其他任何android 2.1机型)
(有些图是我自己配置的时候截取的,有些是后来补截的,所以图片中电量等细节可能不大一致)
(其实在里程碑上不用PPTP还有个原因……因为经常不能用:电脑上好好的,手机上死活用不了;刷机前好好的,刷完就不行了,再刷回去也不行;或者从1.6、2.01换到2.1也不能用,替换pptpd什么的文件也不行,调整服务器不使用mppe128加密照样不行。)

在开始配置之前,你需要准备以下东西:
0、你的手机需要是root过的,并且有一个Root Explorer和Terminal Emulator。一般刷过自定义ROM的都已经root和附带RE,Terminal Emulator(终端命令行工具)可以从市场下载。
1、一套在电脑上可以使用的OpenVPN服务器的配置文件,通常包括一个ovpn文件以及相关证书。
2、手机上需要有busybox命令。通常刷过自定义ROM的都会带这个命令。判断是否有busybox的方法见后文。可以从本文附带的压缩包中获得(busybox)。
3、OpenVPN For Android 的Binary库。可以从本文附带的压缩包中获得(openvpn)。
4、TunnelDroid 0.8.3 。不要使用市场的最新版,在milestone上大部分机友报告无法使用。可以从本文附带的压缩包中获得(net.sourceforge.tunneldroid.apk)。
5、Tun 驱动。据说有的Android版本自带这玩意。可以从本文附带的压缩包中获得(tun.ko)。

href="http://techotaku.net/wp-content/uploads/2010/08/milestoneOpenVPN.zip">点击此处下载Milestone配置OpenVPN工具包

okay,准备工作完成,开始配置OpenVPN。
首先安装OpenVPN库。确认/system是可写的,然后用Root Explorer把压缩包中的openvpn复制到/system/xbin下,然后勾选对应的权限:用户可读、可写、可执行,群组可读、可写、可执行,其他可读、可执行,如下图左一所示(点击图片查看大图)。

MileStone配置OpenVPN教程图解-图2

MileStone配置OpenVPN教程图解-图1

然后打开Terminal Emulator,运行以下命令确定busybox已经安装:
su
busybox which busybox

如果出现了如下图所示的类似/system/bin/busybox的结果,表示busybox已经安装。
继续输入以下命令:
busybox mkdir /system/xbin/bb
ln -s /system/bin/busybox /system/xbin/bb/ifconfig
ln -s /system/bin/busybox /system/xbin/bb/route

命令如下图所示(点击图片查看大图)。执行结果见上图中、右(点击图片查看大图)。

MileStone配置OpenVPN教程图解-图2

MileStone配置OpenVPN教程图解-图2

接下来安装本文附带的压缩包中的TunnleDroid 0.8.3。
安装完成之后,在SD卡根目录下新建openvpn文件夹,把你的OpenVPN的服务器配置文件放进去(TunnleDroid可以识别的配置文件为ovpn格式),把本文附带的压缩包内的tun.ko也一并拷入。

打开TunnleDroid,这个时候主界面中应该已经显示出了你拷入的配置文件,不过先别急着点,还需要做一些配置。
按出菜单,选择“Preferences”,选择“Set DNS after connect”,填入一个可靠的、未被污染的DNS服务器IP地址,确定。(我设置的是谷歌的DNS服务器8.8.8.8,你也可以设置成OpenDNS的地址)
然后选择“Set tun driver path”,填入“/sdcard/openvpn/tun.ko”,确定。
返回TunnleDroid主界面,你可以在配置文件名上长按打开菜单,选择“Edit”编辑检查一下配置文件的内容。

MileStone配置OpenVPN教程图解-图3

MileStone配置OpenVPN教程图解-图3(配置TunnelDroid)

“remote”语句指定服务器的地址和端口。
如果你的OpenVPN也需要用户名和密码的话,配置文件中就应该有“auth-user-pass”语句。如果你不想每次登录都手动输入密码(用户名 TunnleDroid能够记住),就可以在openvpn文件夹下建立一个文本文件,第一行写上用户名,第二行写上密码,然后把这个文本文件的名字放在 “auth-user-pass”后面作为参数(文件名与语句之间有一个空格),详见下图(点击图片查看大图)。
OpenVPN的配置到此已经完成,点击TunnelDroid主界面中的配置文件名,就可以连接OpenVPN网络了。(WiFi和EDGE均可连接,3G网络因为没有条件所以没有测试,不过想来也不会有问题)
经过“AUTH”、“GET_CONFIG”、“ASSIGN_IP”等步骤,成功连接之后会提示“VPN Connection Established”,配置文件名右侧的绿灯亮起,并在通知栏提示“Connected to XXXX”。

MileStone配置OpenVPN教程图解-图4

MileStone配置OpenVPN教程图解-图4(修改OpenVPN配置文件、连接VPN)

连接成功之后你不能够直接(按返回键)退出,必须先断开连接。如果需要进行其他任务,可以按Home键返回主屏。
拉下通知栏,里面会显示目前通过OpenVPN网络收发数据的速率。
连接成功之后再次点击配置文件名,即可断开连接。

MileStone配置OpenVPN教程图解-图5

MileStone配置OpenVPN教程图解-图5

呼,发两张我用Seesmic上推的截图。

 

 

所有的记录到此,有什么问题会后续补充,感谢Google  和主机迷 还有 技术宅。

8 条评论:

  1. 不知道什么时候开始摩托罗拉就变成二线了

    回复删除
  2. 楼主写的很不错,没有多余的修饰,文章也显得容易理解。总体感觉很有可读性。顶你一个

    回复删除
  3. milestone是可以用pptpd的连接方式,条件是在修改/etc/ppp/pptpd-options
    将require-mppe-128这个微软的加密协议去掉,因为android是不支持window的128加密协议

    回复删除
  4. 还有你所说的有些网站上不去,因为linux跟window的mtu大少不一样,你要在iptables规则上设成1356,然后就可以穿墙于无形了,话说今天我的buyvm足足抽了一个下午,抽完后sysctl这个命令竟然用不了

    回复删除
  5. [...] openvpn  服务器端的安装,  centos 版本可以见我之前的一篇博文, http://www.83g.org/220.html  里面有基于 centos 的 pptpvpn 和 openvpn [...]

    回复删除