VPNCyko
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:基于Tomato的Cisco IPSec VPN科学上网方案。
本项目记录了我在自己家里的路由器上设置科学上网的全过程,供有类似需求的朋友参考。与之前用了两年的autoddvpn gracemode + OpenVPN方案相比,速度、稳定性都有所提升,而且避免了gracemode要经常添加维护被墙IP的麻烦(之前也做了个脚本自动检测添加路由和dnsmasq,但还是麻烦啊)。

本项目基于以下配置:

* 路由器:[华硕RT-N16](http://www.asus.com/Networks/Wireless_Routers/RTN16/),一款性价比较高的路由器,配置不错,特别是拥有32MB Flash,所以也是很多固件开发者的开发用机,可用的ROM非常多
* 固件:[Tomato by Shibby](http://tomato.groov.pl/),目前使用的版本是[K26USB-1.28.RT-N5x-MIPSR2-095-AIO](http://tomato.groov.pl/download/K26RT-N/build5x-095-EN/)
* VPN:[IGVPN](https://www.igssh.com/)的[Pro Bundle](https://www.igssh.com/cart.php),45GB/月3台并发,支持几乎现在流行的所有设备的所有接入方式,服务器多、速度快、文档详尽,一年360元算是物有所值了。我是用的是香港的Cisco IPSec服务器。
* 宽带:我家用的是长城宽带…… 

##参考文档
* [\[BLT\]FQX的Blog](http://www.zhongguotese.net),本项目赤裸裸抄袭了[这篇文章](http://www.zhongguotese.net/2012/a-bridge-to-home-theater-2.html)和其中的代码
* [IGVPN](https://www.igssh.com/)的[配置文档](https://www.igssh.com/knowledgebase.php)
* [@Paveo的blog](http://w3.owind.com),作为一个Falcop用户,虽然买不起VIG,但是向你致敬
* [jimmyxu的chnroutes项目](https://github.com/jimmyxu/chnroutes)


##本项目实现了
* 开机自动连接Cisco IPSec服务器,效率比常见的OpenVPN确实高很多
* 使用[@Paveo修改后的vpncwatch](http://w3.owind.com/pub/page/4/),每30秒ping一次twitter.com,3次失败后自动重新连接vpnc
* 抄袭[\[BLT\]FQX的Blog](http://www.zhongguotese.net)中的双路由表设置,家里的下载专用机(192.168.1.33)不走VPN(避免耗费VPN流量和带来封账号风险)
* 使用[jimmyxu的chnroutes项目](https://github.com/jimmyxu/chnroutes)中的iproute2方案设置所有国内ip不走VPN,几秒搞定几千条
* 为提高性能,缺省使用OpenDNS解析,国内大站使用114.114.114.114解析,apple.com使用中华电信DNS解析

##通过ssh访问路由器
在Terminal中:

	ssh-keygen
	cat ~/.ssh/id_rsa.public
将id_rsa.public中的内容拷贝到[路由器访问管理界面](http://192.168.1.1/admin-access.asp)的Authorized Keys中,之后在Terminal中:

	ssh root@192.168.1.1

就可以登陆路由器了。或者直接通过Telnet访问也可以。

##通过ssh登陆,安装opkg
	mkdir /jffs/opt
	mount -o bind /jffs/opt /opt 
将这上面这一行`mount -o bind /jffs/opt /opt`加到[路由器JFFS管理界面](http://192.168.1.1/admin-jffs2.asp)的Execute When Mounted中,这样路由器每次mount jffs的时候都会自动加载*/opt*

	cd /opt
	wget http://wl500g-repo.googlecode.com/svn/ipkg/entware_install.sh
	chmod +x ./entware_install.sh
	./entware_install.sh

##安装并生成chnroutes脚本
如果路由器的Flash空间不够,可以跳过本步,直接下载[本项目中的vpn-up.sh](https://github.com/cykor/VPNCyko/blob/master/chnroutes/vpn-up.sh),放到 */opt/etc/vpnc/chnroutes/* 目录下。不过如果空间允许,还是建议安装,便于以后升级更新。

	opkg install git
	opkg install python
	mkdir /jffs/vpnc
	cd /jffs/vpnc
	git clone https://github.com/jimmyxu/chnroutes.git
	cd /jffs/vpnc/chnroutes
	./update.sh

chnroutes目录中的chnroutes.py来自[jimmyxu的chnroutes项目](https://github.com/jimmyxu/chnroutes),update.sh的作用是调用chnroutes.py生成vpn-up.sh并将vpn-up.sh中的`#!bash`改为`#!sh`,这样就可以直接运行了;另外将vpn-up.sh中获取直连网关的代码改为:`OLDGW=$(nvram get wan_gateway_get) `,我觉得这样更直接一些。

##安装VPNC
首先安装vpnc。用ipkg安装似乎存在依赖的问题,另外ipkg里面的vpnc版本要比opkg的老一个revision,所以用opkg安装:

	opkg install vpnc
	
但是通过opkg安装vpnc有个问题,就是没有vpnc-script。可以下载[本项目中的vpnc-script](https://github.com/cykor/VPNCyko/blob/master/vpnc-script)(从[nslu2的ipkg源](http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable/)里面vpnc_0.5.3-1_mipsel.ipk中提取的),将文件中所有的`/etc/resolv.conf`全部替换成`/tmp/resolv.conf.auto`,之后放到 */opt/etc/vpnc/* 目录下。请注意为vpnc-script加上可执行权限:

	chmod a+x vpnc-script

另外,在[@Paveo的blog](http://w3.owind.com/pub/page/4/)中下载修改过的vpncwatch,放到 */opt/sbin/* 目录下(也需要可执行权限)。由于@Paveo没有给出修改后的源代码,所以项目中就不提供直接下载了。对于有其他考虑的读者,可以使用[原始开源版本的vpncwatch](https://github.com/dcantrell/vpncwatch)。

##配置IPSec VPN账号
修改/opt/etc/vpnc/default.conf,或新建一个.conf,内容如下:

	IPSec gateway 服务器地址
	IPSec ID 服务商提供的组ID
	IPSec secret 服务商提供的组密码
	Xauth username 你的用户名
	Xauth password 你的密码

##最后的准备
下载本项目中的[vpnup.sh](https://github.com/cykor/VPNCyko/blob/master/vpnup.sh)和[rt_tables](https://github.com/cykor/VPNCyko/blob/master/rt_tables),放到 */jffs/vpnc/* 目录下。
在[路由器脚本管理界面](http://192.168.1.1/admin-scripts.asp)的WAN Up中加入

	/jffs/vpnc/vpnup.sh;

告诉路由器在外网链接建立后运行我们vpn脚本。
虽然并不必要,但是**现在重启路由器吧**!享受大功告成的感觉!

##附:dnsmasq的设置
设置dnsmasq主要目的是提高访问性能,缺省使用OpenDNS解析(我的VPN下Google DNS ping值过高),对于国内大站通过114DNS解析,apple相关域名通过中华电信DNS解析。另外我发现我家api.twitter.com被污染的机率很大,不知道如何处理,所以在dnsmasq中明确指向OpenDNS解析,不过应该没有什么实际意义……还望有经验的朋友赐教。

具体设置很简单:将本项目中的[dnsmasq](https://github.com/cykor/VPNCyko/blob/master/dnsmasq)中的内容粘贴到[路由器DHCP/DNS管理界面](http://192.168.1.1/advanced-dhcpdns.asp)里面Dnsmasq
Custom configuration中,勾选Use internal DNS和Prevent DNS-rebind attacks,保存设置即可。

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。