以下内容过时, 请参看chnroutes项目的wiki, 增加对pptp vpn的支持.
------------------------------
那么有没有什么办法能做到访问国外的网站的时候用vpn, 而国内的网站则是直接用本地网关进行访问呢? 答案是有的. 只要设置一下本机的路由表, 让国外的ip路由到vpn网关, 而国内ip则路由到本地的网关就可以了. 这在配置上有两种方式:
- 在openvpn连接之后, 不更改网关, 但在配置文件中加入route选项指定一些经常访问的国外网站的ip(范围)使用vpn路由
- 在openvpn连接后, 把openvpn设置为默认网关, 然后利用脚本修改国内ip的路由, 把他们route到原来的网关去
对 于方式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断开之后调用一个删除这些路由也时有必要的.
使用方法(for Linux & Mac):
- 文件下载之后, 修改个易记点的名字, 比如chnroutes
- 然后输入 python chnroutes 这将生成两个文件 vpnup 和 vpndown (windows 上只有一个 vpnup.bat)
- 用命令 chmod a+x vpnup 和 chmod a+x vpndown 修改这两个新生成的脚本的可执行属性
- 把vpnup, vpndown两个文件copy到openvpn配置文件所在目录, 修改openvpn配置, 在末尾加入两行: up vpnup 和 down vpndown
- 然 后重新连接openvpn就可以了, 输入命令 netstat -nr 如果能看到一大堆的输出, 说明route已经设置成功. 不过, 需要注意的是, 如果openvpn服务端没设置redirect gateway, 那么也请在客户端的配置里加入一句: redirect-gateway
最后, 这些脚本执行是可能失败的, 因为有些时候机器会因为某些问题而没有了default gateway的信息. 这需要先把问题修正之后再进行vpn连接.
没有评论:
发表评论