|
0
发表于: 2010-02-08 11:58
如何避免使用国外VPN访问国内地址通常情况下在openvpn连接之后, 如果openvpn的服务端或者客户端设置了redirect gateay选项, 那么openvpn的网关将取代原有的网关成为默认网关. 也就是说在这以后互联网上所有的信息都是通过vpn的网路获取的. 对于只访问国外网站的朋友来说, 这样的结果是可以接受的. 然而对于像我这样的国内国外网站都经常访问的人来说就显得不那么合适了.
那么有没有什么办法能做到访问国外的网站的时候用vpn, 而国内的网站则是直接用本地网关进行访问呢? 答案是有的. 只要设置一下本机的路由表, 让国外的ip路由到vpn网关, 而国内ip则路由到本地的网关就可以了. 这在配置上有两种方式:
对于方式1, 它的优点是设置简单, 只需要在配置文件上加入 "route ip mask" 这样的语句就可以, 而且它们会在vpn连接断开之后自动清空. 但缺点也很明显, 默认情况下openvpn只能支持20条route项目, 而且一些网站的ip范围变化很大, 需要不断测试才能获取它们完整的范围. 对于方式2, 则没有这个问题. 通过http://ftp.apnic.net/apnic/dbase/data/country-ipv4.lst 我们可以获取到整个亚洲地区的ip分布表, 也就是说我们能利用这个文件得到完整的中国ip的范围. 而openvpn是支持在连接时和断开后调用脚本的. 这样, 我们只需要在openvpn设置redirect gateway选项, 然后连接的时候调用一个路由脚本指定中国的ip走本地的gateway就可以了. 为了避免一些不可预知的问题, 在vpn断开之后调用一个删除这些路由也时有必要的. 以下我分别写了三个脚本分别针对Linux,Mac OSX, Windows三个系统, 它们就是用于生成上文所说的设置/删除 国内ip路由的脚本. 使用方法(for Linux & Mac):
对于windows用户, 因为route命令运行比linux这些系统慢很多, 所以如果利用openvpn的up选项去调用vpnup.bat脚本将容易出现执行超时而导致openvpn连接失败, 所以我建议在连接openvpn之前手动执行vpnup.bat, 然后再进行连接. 另外可能大部分的windows用户都不会安装python的运行环境, 为了省却麻烦, 我这里已经生成了一个批处理文件 vpnup.bat, 下载之后改名为vpnup.bat就可以了, 因为ip范围的变化不是很大, 也没必要实时生成. 最后, 这些脚本执行是可能失败的, 因为有些时候机器会因为某些问题而没有了default gateway的信息. 这需要先把问题修正之后再进行vpn连接. |
|
|---|---|





