当你有多个设备在家时,要让每个设备都翻墙往往是很麻烦的。 电脑上有ssh、vpn等多种方案, 而Android上常用goagent, iPhone不越狱的话则只能依赖vpn或APN Proxy。而且这些方案往往在稳定性、流量控制、 速度上各有各的问题。 于是就有聪明人发明了从路由器级别搞定翻墙的办法。 对所有设备透明,稳定,流量耗用小。
当然,我不是那个发明人。 只是前些日子家中拉了一条20M的宽带, 顿时觉得有必要充分利用,这才亲身实践了一次,历经磨难, 查了N多资料才搞定。发觉网上没有一个真正完整的教程指导, 于是索性在此写一篇。欢迎有志之士参考实践,或提出修改意见。
基本原理:让路由器刷上开源固件dd-wrt, 再配置路由器自动连接openvpn, 最后利用autoddvpn, 自动让被墙ip段的请求添通过vpn发送。
路由器的选择
首先,dd-wrt有这么一个页面[http://www. dd-wrt.com/wiki/index.php/ Supported_Devices]列出了所有支持的路由器。 也就是说,路由器必须被列在这个页面中才可以刷dd-wrt。
其次,能刷dd-wrt并不意味着就能拨openvpn。 openvpn支持需要路由器最好拥有8MB Flash或更多,RAM最好32MB以上。按照这个标准, 你又可以过滤掉一大片选择。最后,如果你不想太折腾的话, 注意表格最后一列Notes,最好上面不要有奇怪的说明。
我推荐Buffalo家的路由器。便宜( 相对Linksys来说),稳定,外观带感,配置不坑爹, 最关键的是,Buffalo官方就有dd-wrt的固件支持—— 每个路由器都会提供两种固件,其中一种就是dd-wrt。当然, 刷dd-wrt网站的固件自然也没问题。
注意,不要买Buffalo的WHR系列, 没有OpenVPN支持。
我目前用的是Buffalo WZR-HP-G300NH2,如果你有米, 也可以考虑Linksys E4200之类。
dd-wrt的版本选择
像Buffalo这样的厂商虽然会发布直接用于对应路由器的固件 ,但功能也未必和dd-wrt官方相同。所以推荐用dd- wrt官方固件。
最靠谱的查找对应路由器的dd-wrt固件的办法就是, 去这个ftp[ftp://ftp.dd-wrt.com/ others/eko/BrainSlayer-V24- preSP2/2012/],进入最新的build文件夹, 按照找你的路由器名字的文件夹,里面就是固件了。
但在刷dd-wrt之前,请前往此处[http://www. dd-wrt.com/wiki/index.php/ Installation#Hardware-specific ]查看关于你的路由器品牌或型号的说明。
只要按照说明操作,基本上你不会需要去了解一些终极治疗术。( 当你的路由器完全死翘翘的时候你会需要,诶嘿
因为后续要支持autoddvpn, 所以你需要一个支持jffs的版本, 也就是说至少是V24preSP2级别的版本。 V24SP1和V24都因为组件兼容性问题移除了jffs。 上面我给的ftp地址就是V24preSP2的所以不用担心。( 有资料提到很老的版本也有jffs但那真的太老了。。
你可能还看到有资料中提到什么mega版本啊vpn版本啊min i版本啊, 不过因为刷这些版本都需要用到tftp这样的麻烦工具, 所以最好不要去尝试,乖乖用std就好了。
OpenVPN的配置方式
刷好dd-wrt后,先让他能正常访问网络/ 然后我们就要开始在这上面配置OpenVPN了。
选择有两个:
- 通过dd-wrt的web界面中的“服务”->“
OpenVPN”页面来直接配置。 - 通过telnet进路由器后,在命令行下手动上传配置文件+
脚本的方式来配置。
第一中方案看似简单,但其实配置选项很多很专业, 而我们往往从VPN商家拿到的都是直接的配置文件, 要亲自读懂配置文件再去修改web页面的每一项,其实非常难。 而且,这种方案下,要加上autoddvpn的支持还稍嫌麻烦。 最坑爹的是这种方案调试极其无力。
所以我选择的是第二种方案。第二种方案下, 配置OpenVPN可以直接参照autoddvpn的这份文档[ http://code.google.com/p/ autoddvpn/wiki/ OpenVPNManualStartUP], 并且请密切注意文档下放的“注意”部分, 并记住我们是要用graceMode, 以及配置文件结尾一定要加上 script-security 3 system。文档结尾的设置openvpncl_ enable=0的部分一定不要忘记。 并且一定要测试连接是否成功。
但是:在你上传前,需要先打开dd-wrt的jffs支持。 参考这份文档[http://code.google.com/ p/autoddvpn/wiki/jffs]中的《如何打� jffs支持》这一小段。注意,只需要参考这一小段即可, 下面的部分都不需要看,也不需要操作。后续自然会讲到。
另外如果你的OpenVPN连接遇到问题,可以加上reneg- sec 0这一句试试。以及配置文件中不要加auth-nocache, 否则很可能会每小时openvpn客户端就错误退出。
autoddvpn
这个项目的地址在此:http://code.google. com/p/autoddvpn/ , 不过他的文档写的真的很乱。你可以完全不管不看。
刚才如果你按照上一步中的autoddvpn的文档已经写好了O penVPN配置文件, 那里面就包含了在VPN连接和断开后对autoddvpn脚本的 调用命令。所以我们只需要做一步, 把autoddvpn的文件搞到对应位置即可。 具体操作按照这份文档[http://code.google. com/p/autoddvpn/wiki/graceMode ],直接看《�置方式(以OpenVPN�例)》部分, 包括设置DNSMasq和SSH进入路由器后执行的几行命令。 当然,不用ssh,用telnet也可以。
如果你会使用到基于bonjour的服务, 比如iPhone的Wi-Fi同步,那么在“服务”->“服务” 的DNSMasq中建议不要启用 本地DNS。
在这份文档中还讲到了通过创建vpnup_ custom文件来增加一些没有被包含在自动翻墙列表中的ip段 。可以参考使用。
调试
确保你的文件都乖乖放在/jffs/openvpn/下了, 并且没有吃饱了去修改名字。 确保你的路由器的DNS设置是按照上文说的那样做。 然后就是那么几条命令方便你自己调试:
在当前终端连接openvpn并显示连接日志:openvpn --config /jffs/openvpn/openvpn.conf
连接openvpn并且放在后台:openvpn --config /jffs/openvpn/openvpn.conf --daemon
结束所有openvpn进程:killall openvpn
显示当前运行的所有进程:ps
查看当前autoddvpn的log:tail -f /tmp/autoddvpn.log
守护脚本
OpenVPN再稳定都有意外挂掉的情况。 这种时候我们就需要通过系统的cron来设置每隔2分钟, 就运行一个脚本检查一次OpenVPN进程当前是否在运行, 不在的话就再运行一个OpenVPN。
脚本文件内容如下:
#!/bin/sh ISRUN=`ps|grep "openvpn"|wc -l` if [[ $ISRUN -lt 4 ]] then echo "Not running, start!" openvpn --config /jffs/openvpn/openvpn.conf --daemon else echo "Openvpn is already running." exit fi
假定保存到/jffs/openvpn/ openvpnDaemon.sh位置,那么我们就在dd- wrt的web界面的“管理”->“管理”下启用Cron, 并且在附加任务中输入:
*/2 * * * * /jffs/openvpn/openvpnDaemon.sh
于是就大功告成。
注意,如果你不是保存在/jffs/openvpn/ openvpnDaemon.sh位置,那么相应的, 要在上面的脚本文件内容中,把 -lt 后面的数字进行修改, 这取决于你最后保存的位置的字符串中有几个“openvpn”。 如果有n个,那么那个数字就改称n+2。
好了。写完了。有什么问题尽管提。
© Sid 晓 for Life Journal, 2012. | 文章原始地址
--
Posted By GFW BLOG 功夫网与翻墙 to GFW BLOG(功夫网与翻墙) at 5/14/2012 05:05:00 PM --
1、翻墙利器赛风3下载地址: http://dld.bz/caonima326 ,http://dld.bz/caonima745/
2、我们的订阅地址:http://feeds2.
3、停止订阅,请发邮件到
gfw-blog+unsubscribe@
翻越防火长城,你可以到达世界上的每一个角落。(Across the Great Firewall, you can reach every corner in the world.)
from 中国互联网研究 http://chinanetblog.blogspot.