利用来自APNIC的数据生成路由命令脚本,让VPN客户端在连接时自动执行。通过这些路由脚本,可以让用户在使用VPN作为默认网关时,不使用VPN访问**国内IP,从而减轻VPN负担,并提高访问国内网站的速度。
在使用这些脚本之前,请确保你在自己的电脑上已经成功配置好一个VPN(PPTP或OpenVPN),并且让之以默认网关的方式运行(通常是默认配置),即VPN连接之后所有网络流量都通过VPN。
- 因为这些IP数据不是固定不变的,建议每隔一个月更新一次;
- 使用此法之后,可能导致Google Music等服务无法访问,因为连上VPN之后,使用的DNS也是国外的,因此google.cn解析出的是国外的IP。
-
$ sudo python chnroutes.py -o /etc/openvpn
-
编辑 OpenVPN配置文件
script-security 2 up vpn-up.sh down vpn-down.sh
-
重新连接VPN,观察日志测试。
- 执行
python chnroutes.py -p old
, 这将生成routes.txt
文本文件; - 将该文件内容加在OpenVPN配置文件的尾部;
- 重新连接VPN,观察日志测试。
- 在终端中执行
python chnroutes.py -p mac
,这将生成ip-up
和ip-down
两个文件; - 将这两个文件移入
/etc/ppp/
; - 重新连接VPN,观察测试。
- 在本地计算机终端或者命令提示符中执行
python chnroutes.py -p routeros
,这将生成chnroutes.rsc
文件; - 你可以用ftp,或者Web管理页面,或者Winbox将该文件上传至你的RouterOS;
- 在RouterOS终端输入
/import chnroutes.rsc
; - 假设你的本地网关是192.168.1.1,在RouterOS终端输入
/ip route add disable=no distance=1 dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=chnroutes
;
- 执行
python chnroutes.py -p linux
,这将生成ip-pre-up
和ip-down
两个文件; - 将
ip-pre-up
移入/etc/ppp/
,ip-down
移入/etc/ppp/ip-down.d/
; - 重新连接VPN,观察测试。
- 在命令提示符中执行
python chnroutes.py -p win
,这将生成vpnup.bat
和vpndown.bat
两个文件; - 在拨号前手动执行
vpnup.bat
文件设置路由表;在断开VPN后,可运行vpndown.bat
清理路由表。
添加本地的地址 (Linux)
# /etc/chnroutes
1.0.1.0|255.255.255.0|24
70.33.217.1|255.255.255|32
定期更新ip地址 (Linux)
$ sudo vim /etc/cron.weekly/chnroutes
#!/bin/bash
/usr/bin/chnroutes -o /etc/openvpn
$ sudo chmod +x /etc/cron.weekly/chnroutes
- python 2.7.3
- ipruotes2 (Linux)
Archlinux: pacaur -S chnroutes-git
(来自AUR)
一些基于Linux系统的第三方路由器系统如OpenWRT、DD-WRT、Tomato都带有VPN(PPTP/OpenVPN)客户端的,也就是说,我们只需要在路由器进行VPN拨号,并利用本项目提供的路由表脚本就可以把VPN针对性翻墙扩展到整个局域网。当然,使用这个方式也是会带来副作用,即局域网的任何机器都不适合使用Emule或者BT等P2P下载软件。但对于那些不使用P2P,希望在路由器上设置针对性翻墙的用户,这方法十分有用,因为只需要一个VPN帐号,局域网内的所有机器,包括使用Wi-Fi的手机都能自动翻墙。详细配置方式请参考Autoddvpn项目。
本项目的脚本都是在使用路由器进行拨号的情况下测试通过的,如果在其它拨号方式下,脚本不能运作,请添加新的Issue。另外,在配合OpenVPN使用的时候,可能会出现因为网络质量不好,OpenVPN非主动断开,这时候vpn-down.sh
脚本也会被自动调用,但重新连上之后,可能会找不到默认路由而添加失败,这时候你可以通过停止OpenVPN,并手动设置好原来的默认路由再重新进行OpenVPN拨号。
- freedom-routes: 另一个用Go语言写的chnroutes.