在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
