在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
错误信息大概意思是默认路由添加失败.
以命令查看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
打开浏览器看看ip哈哈,已经变成电信ip

ip地址验证
再开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脚本
完成!
从而实现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 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
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
图解在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

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

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

注意!!!!下面说一下在 windows 7 里面使用OpenVPN客户端的注意事项:
1.以管理员身份打开安装文件进行安装
2.以管理员身份运行OpenVPN GUI
3.确保配置文件里的"redirect-gateway"更改为"redirect-gateway def1".
请确保你进行了这三个操作,否则重定向网关可能出现问题!!


