/VPNCyko

基于Tomato的Cisco IPSec VPN科学上网方案。

Primary LanguageShell

本项目记录了我在自己家里的路由器上设置科学上网的全过程,供有类似需求的朋友参考。与之前用了两年的autoddvpn gracemode + OpenVPN方案相比,速度、稳定性都有所提升,而且避免了gracemode要经常添加维护被墙IP的麻烦(之前也做了个脚本自动检测添加路由和dnsmasq,但还是麻烦啊)。

本项目基于以下配置:

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

##参考文档

##本项目实现了

  • 开机自动连接Cisco IPSec服务器,效率比常见的OpenVPN确实高很多
  • 使用@Paveo修改后的vpncwatch,每30秒ping一次twitter.com,3次失败后自动重新连接vpnc
  • 抄袭[BLT]FQX的Blog中的双路由表设置,家里的下载专用机(192.168.1.33)不走VPN(避免耗费VPN流量和带来封账号风险)
  • 使用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中的内容拷贝到路由器访问管理界面的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管理界面的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,放到 /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项目,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(从nslu2的ipkg源里面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中下载修改过的vpncwatch,放到 /opt/sbin/ 目录下(也需要可执行权限)。由于@Paveo没有给出修改后的源代码,所以项目中就不提供直接下载了。对于有其他考虑的读者,可以使用原始开源版本的vpncwatch

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

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

##最后的准备 下载本项目中的vpnup.shrt_tables,放到 /jffs/vpnc/ 目录下。 在路由器脚本管理界面的WAN Up中加入

/jffs/vpnc/vpnup.sh;

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

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

具体设置很简单:将本项目中的dnsmasq中的内容粘贴到路由器DHCP/DNS管理界面里面Dnsmasq Custom configuration中,勾选Use internal DNS和Prevent DNS-rebind attacks,保存设置即可。