jejer@wordpress Anything Worth Doing is Worth Doing Well

20Dec/09Off

在Android上用TunnelDroid(OpenVPN)实现cmwap完美穿越

因为Android平台的限制,用cmwap接入点接入网络时只有内置浏览器会经过代理10.0.0.172:80,其他程序无法使用互联网.

之前我一直使用@biaji开发的cmwrap让其他程序上网,cmwrap使用iptable重定向数据流,结合hosts文件做域名解析,所以你向让其他程序穿过cmwap时需要手动修改hosts文件添加ip-domain记录.

今天在twitter上听见某位推油提到TunnelDroid,我想到尝试用它做cmwap穿越.TunnelDroid的SourceForge地址是:http://sourceforge.net/projects/tunneldroid/files/

本方法需要一个可以连接的OpenVPN服务器.用Linksys路由器架设OpenVPN的方法参见:http://www.jejer.net/?p=3931

我按照README顺利联通了架在路由器上的OpenVPN服务器,但不幸的是网络无法访问.

查看TunnelDroid发现了一些有趣的信息:

TunnelDroid Log

TunnelDroid Log

错误信息大概意思是默认路由添加失败.

以命令查看tap0虚拟网卡发现tap0没有ip信息,我不知道这是不是TunnelDroid的BUG.
同样以命令修复之:busybox ifconfig tap0 192.168.10.140 netmask 255.255.255.0
然后添加路由项:busybox route add –net 192.168.10.0 netmask 255.255.255.0 dev tap0
busybox route add default gw 192.168.10.1 dev tap0

如此操作之后我发现已经可以ping到路由器的ip了,但是DNS解析还是不行.这好像是Android的BUG,因为busybox ping就可以通.
又在网上一顿搜索,找到了制定DNS的命令:setprop net.dns1 192.168.10.1

OK这些命令过后终于可以上网了.

fix ip gateway dns

fix ip gateway dns

打开浏览器看看ip哈哈,已经变成电信ip

ip地址验证

ip地址验证

再开Twidroid看看,完全没有问题:

Twidroid验证穿越

Twidroid验证穿越

为了方便连接,我把上面的命令写成一个sh脚本放在sd卡下

#!/system/bin/sh
busybox ifconfig tap0 192.168.10.140 netmask 255.255.255.0
busybox route add –net 192.168.10.0 netmask 255.255.255.0 dev tap0
busybox route add default gw 192.168.10.1 dev tap0
setprop net.dns1 192.168.10.1
busybox route

每次TunnelDroid连接完成后去运行一下这个脚本就可以上网了:

sh脚本

sh脚本

完成!

从而实现cmwap完美穿越,不必再更改hosts文件,DNS解析正常.与cmnet无异.

参考:

SmartQ 5 在 Android 1101固件系統下使用華為 E180 USB Modem 成功上網

#fuckgfw

---------------------------------完美的分割线-------------------------------------

20091225更新:

使用tun代替tap,可指定ip地址
使用route-up "cmd"替代sh脚本设置DNS,省去连接后运行脚本的麻烦

server.ovpn

daemon
ifconfig 10.8.0.1 10.8.0.2
proto tcp-server
port 443
dev tun21
cipher BF-CBC
comp-lzo yes
keepalive 15 60
verb 3
secret static.key
status-version 2
status status
在路由器上配置iptables
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
client.ovpn
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key
proto tcp-client
remote jejer.3322.org 443   #xxxx为你申请的的3322.org动态网址
keepalive 10 60
resolv-retry infinite
nobind
persist-key
persist-tun
cipher BF-CBC
comp-lzo
verb 3
float
http-proxy-retry                  #要通过cmwap网关的话要加上这句和下一句
http-proxy 10.0.0.172 80
route-gateway 10.8.0.1
redirect-gateway def1
dhcp-option DNS 10.8.0.1
#G1需要下面两句来设置DNS,在电脑上不需要,注销掉即可
script-security 2 system
route-up "setprop net.dns1 10.8.0.1"

TunnelDroid连接完成之后即可.不必再执行修正脚本.
#fuckgfw

13Nov/09Off

图解在linksys路由器上架设基于Tomato固件的OpenVPN(静态KEY)

一.准备工作:
1.windows的OpenVPN客户端:请在官方网站下载最新版
2.linksys路由器用的包含OpenVPN插件的Tomato固件:这里我们选用外国高手MOD的版本,网站[需要翻墙].
3.一个3322.org的DDNS账号
二.客户端配置:
1.生成静态加密KEY:找到开始--OpenVPN--Generate a static OpenVPN key点击一下就会在
C:\Program Files\OpenVPN\config下面生成一个key.txt

2.在C:\Program Files\OpenVPN\config下面创建一个myvpn.ovpn的文本文档并编辑成下面的样子:
dev tap
secret key.txt
proto tcp-client
remote xxxxxx.3322.org 443   #xxxx为你申请的的3322.org动态网址
keepalive 10 60
resolv-retry infinite
nobind
persist-key
persist-tun
cipher BF-CBC
comp-lzo
verb 3
float
http-proxy-retry                  #要通过cmwap网关的话要加上这句和下一句
http-proxy 10.0.0.172 80
route-gateway 192.168.10.1  #这个网关需要配合你路由器上的网关设置
redirect-gateway def1
三.路由器配置:
1.配置路由器的IP地址为
192.168.10.1
2.配置路由器的DDNS为3322.org

3.如图配置VPN隧道:

这个KEY就把电脑上生成的KEY.TXT里面的内容全部复制到这里

这个时候就可以点start now运行OpenVPN了!
运行之后看到按钮变成stop now就好了,这时候在status页面是还看不到信息的!
然后试着打开电脑上的客户端连接路由器如果连接成功,status页面才会变成下面这样:

注意!!!!下面说一下在 windows 7 里面使用OpenVPN客户端的注意事项:
1.以管理员身份打开安装文件进行安装
2.以管理员身份运行OpenVPN GUI
3.确保配置文件里的"redirect-gateway"更改为"redirect-gateway def1".

请确保你进行了这三个操作,否则重定向网关可能出现问题!!