OpenVPN For Android实现手机刷Twitter

笔者有时候也会刷刷Twitter,或者上Facebook吹吹牛逼,目前的Android对于VPN支持实在是渣渣,用了很多免费的VPN方案都让人欲哭无泪。于是有了自己弄一套VPN的想法,以实现笔者刷刷Twitter,吹吹牛逼的梦想!

基本配置:

1、服务器一台(位于美帝的洛杉矶),CentOS5 64bit,编译安装OpenVPN Server v2.3.4

2、Android手机一部(酷派,android4.2,VPN在Android4.0以上,依赖Google提供的VPNService服务,无需root),安装Ics-OpenVPN(OpenVPN的Android版本)

基本网络拓扑图:

Server配置:

#Set OpenVPN major mode. By default, OpenVPN runs in point-to-point mode ("p2p"). OpenVPN 2.0 introduces a new mode ("server") which impl#ements a multi-client server capability.
#mode server
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
duplicate-cn

#listen on IPv4
local 0.0.0.0

#we use a non-default port
port 11194

#UDP protocol chosen for better protection against DoS attacks and port scanning
proto tcp

#using routed IP tunnel
dev tun

#relative paths to keys and certificates
ca /usr/local/openvpn/easy-rsa/keys/ca.crt
cert /usr/local/openvpn/easy-rsa/keys/server.crt
key /usr/local/openvpn/easy-rsa/keys/server.key
dh /usr/local/openvpn/easy-rsa/keys/dh1024.pem

#set OpenVPN subnet
server 10.6.0.0 255.255.0.0
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

#for route stunnel from gateway directly
push "route your server IP 255.255.255.255 net_gateway"

#maintain a record of client-to-virtual-IP-address
ifconfig-pool-persist ipp.txt

#ping every 10 seconds, assume that remote peer is down if no ping received during 60
keepalive 10 60

#cryptographic cipher, must be the same (copied) on the client config file as well
cipher AES-256-CBC

#enable compression on VPN link
comp-lzo

max-clients 500

#try to preserve some state across restarts
persist-key
persist-tun

#status log file
status /usr/local/openvpn/conf/openvpn-status.log

#log file
#log-append /usr/local/openvpn/conf/openvpn.log

#log file verbosity
verb 3

Client配置:

client
dev tun
proto tcp
remote your vpn server IP 11194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3

#tun-mtu 1500
#tun-mtu-extra 32
#fragment 1450
#mssfix 

<ca>
-----BEGIN CERTIFICATE-----
CA
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
CERTIFICATE
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
PRIVATE KEY
-----END PRIVATE KEY-----
</key>

关于Openvpn的安装,以及CA等证书的生成操作可参考网络相关资料,不再赘述。

这里重点说明一点,服务端配置要加上:

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

push "redirect-gateway  def1"将修改Android路由,重定向所有web流量至vpn,默认只定向vpn私网段的流量,这里是10.6.0.0/16。

后面两条配置是修改客户端dns为google public dns,切记!

好了,我们连上vpn后,打开浏览器浏览看看,貌似和我们想的不太一样,还是不能愉快的刷facebook,经常断?经常连不上?于是乎,又开始了漫长的Google之旅,大致找到原因,因为GFW~~~,据说采用了新的DPI牛逼技术,可以探测OpenVPN的连接握手过程,并采用终极大招,将连接重置,于是乎就悲剧了,还是不能愉快的玩耍!

好吧,继续下一招,采用stunnel来封装openvpn tunnel,说白了就是再加上一层保险,让Openvpn的流量看起来更像普通的SSL连接,以不那么容易被识别。

笔者采用的stunnel客户端版本为stunnel 5.06 on arm-unknown-linux-androideabi platform。

Stunnel服务端配置:

sslVersion = all
options = -NO_SSLv2
options = -NO_SSLv3
cert = /etc/stunnel/server.pem
pid = /var/run/stunnel.pid
output = /var/log/stunnel
;debug = 7
;foreground = yes
[openvpn]
client = no
accept=993
connect=11194

Stunnel客户端配置:

debug = 7
foreground = yes
[openvpn]
client = yes
accept = 127.0.0.1:1194
connect = your vpn server IP:993

好了,大功告成,终于可以愉快的玩耍了!另外,针对OpenVPN对于Http URL级别的过滤机制不完善(也很正常,毕竟VPN是个IP层面的东西,都是IP,没有什么URL),笔者也做了测试,可以通过Squid透明代理来在服务端实现基于URL的过滤机制,毕竟咱捣鼓这玩意只是自己玩玩,被用来上那些什么非法网站就不好了。

另外,服务端的iptables需要做NAT,附上:

-A PREROUTING -i tun0 -p tcp -m tcp --dport 80 -j DNAT --to-destination your server IP:8080
-A POSTROUTING -s 10.6.0.0/255.255.0.0 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.6.0.0/255.255.0.0 -j SNAT --to-source your server IP 

好了,开始愉快的玩耍了

申明:本文仅限于技术研究之目的,请勿用于其他目的,转载请注明来源!

时间: 2024-11-08 11:10:51

OpenVPN For Android实现手机刷Twitter的相关文章

Android 解决手机unauthorized错误

转自:http://blog.csdn.net/quicksand201/article/details/19190821 手机开发者选项中USB调试已经打开,在电脑命令行下输入adb devices,显示手机未认证 D:\develop\androidroot\adt-bundle-windows-x86-20131030\sdk\platform-tools>adb devices* daemon not running. starting it now on port 5037 ** da

HTC A510C电信手机刷机过程

HTC A510C电信手机刷机过程记录 Writed by Peter Hu(2014.6.7) ON WIN7_64 刷机需要的步骤: 1)  将S-ON加密保护式去掉,改成S-OFF模式,这样才能刷机,这一步是最难的. 2)  刷入RECOVERY 包(俗称RC) 3)  刷入ROM包 S-ON状态置为S-OFF状态 将S-ON改为S-OFF的办法是想办法做出一个GOLDCARD.IMG文件来,然后用HEX工具将其写到SD卡的BOOT区中.成功的方式是:从网上下载了一个APK程序(金卡镜像一

Linux下使用Fastboot给手机刷机

前言 一直在刷机.失败.刷机.失败中,还好今天有个任务可以使用fastboot刷机,好开心,终于不用切换系统了.(话说好久没有写代码了,身为一个互联网程序员,不写代码我容易紧张). 开发环境 Ubuntu13.10,配置好Android的开发环境即可.具体配置可参考:http://blog.csdn.net/wzy_1988/article/details/37737255 Fastboot模式刷机 使用fastboot刷机主要是刷boot.img.system.img和userdata.img

分享:关于之前锤子手机刷MIUI之后,现在有事跌宕起伏的刷回了Smartisan OS!

 序言: 距离上次把锤子手机刷成MIUI之后已经一个半月了,我是一个刷机党,一个半月足够让我适应一个系统,了解一个系统.刷机有风险,不过我愿意冒这个风险,因为兴趣,没别的.刷机之后,肯定是有问题的,没有一个rom包在适配自己系统或者不适配其他系统的情况下一点问题没有,下面我想讲一下刷机前后遇到的问题,以及重新刷回锤子遇到的一个大问题和解决方法.  正文: 大家可以看我前一篇博客,是讲我从锤子刷到MIUI的艰苦历程,文章. 这里分享一下关于锤子刷到MIUI之后的体验: MIUI和锤子是两个完全不一

android L nexus5 刷机

前置条件: 1 android nexue 5 手机一部2 android L最新rom包android L rom下载地址https://developers.google.com/fit/preview#flash_your_nexus_5_or_nexus_7 过程: 下载完成后解压缩,这个包需要使用 fastboot工具,不是原来的zip卡刷包,好在里面的脚本文件都已经写好了,如下图: 连接好手机和电脑,笔者是在ubuntu下的进行刷机,以下是刷机过程 nexus 5 手机需要进入到fa

android 控制手机音量的大小 切换声音的模式

(1)程序说明 在android API的AudioManager中,提供了调节手机音量的办法. audioMa.adjustVolume(AudioManager.ADJUST_LOWER, 0); audioMa.adjustVolume(AudioManager.ADJUST_RAISE, 0); 也可以调节手机声音的模式为震动或者静音 audioMa.setRingerMode(AudioManager.RINGER_MODE_NORMAL); audioMa.setRingerMode

Android获取手机联系人的姓名和电话

Android获取手机联系人的姓名和电话 主要是用到了跳入手机联系人的intent和获取手机联系人信息的内容提供者,直接上代码 注:此贴是借鉴别人的帖子加了一些自己的东西写出的,原帖地址明日附上: / 首先 我们需要跳入手机通讯录 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, 0); // 之后,我们需要重写

android 获取手机的所有程序和widget的包名和启动类名

获取 widget可以 AppWidgetManager 来获取 List<AppWidgetProviderInfo> widget=AppWidgetManager.getInstance(Context(上下文)).getInstalledProviders(); 得到所有AppWidgetProviderInfo for (int i = 0; i < widget.size(); i++) {        AppWidgetProviderInfo info=widget.g

Android之手机向导以及设置中心模块的开发

当我们使用的新的软件的时候,我们首先需要教用户如何使用我们的软件,当用户学习完使用教程,下次再登录的时候,我们应该直接跳到我们的功能界面,下面我来展示一下我学习视频做的效果图:手机防盗这个功能模块就是绑定SIM卡,然后通过检测SIM卡开机的时候是否变更,来保护用户的手机是否处于安全状态,如果发现SIM卡变化,这样就需要我们的第二步,设置一个安全号码,当发现SIM卡已经变化,这个时候手机会自动的发送报警短信提示用户的手机已经处于不安全的状态.当我们看完教程仍不知如何操作我们的软件的时候,这个时候就