为Mac OS设置国内外地址不同的访问路由

环境越来越恶化,这两天到处都是Gmail彻底被墙的消息。我等屁民只有迎难而上,把vpn,ssh给用好。

原先一直都是在用Chrome+SwitchySharp+ssh的方式,但这个方式不爽的是只支持http/https,很多时候git或brew更新时都会出问题,到时就只有祭起VPN大棋,但VPN的问题呢又在于走的是全局路由,包括国内的站点也都走了VPN,既慢又费流量。以前偶尔用用,一直懒得折腾,今天研究了一下,可以根据国内外地址设置不同的访问路由。这真是一个折腾的时代。

在mac下需要的几个工具:修改路由的chnroutes和开源的OpenVPN客户端Tunnelblick,原理就是:

利用来自APNIC的数据生成路由命令脚本,让VPN客户端在连接时自动执行。通过这些路由脚本,可以让用户在使用VPN作为默认网关时,不使用VPN访问中国国内IP,从而减轻VPN负担,并提高访问国内网站的速度。

如果你VPN服务使用PPTP,mac下很简单,参照chnroutes说明即可,可惜我的VPN提供商PPTP,L2TP,Cisco IPSecVPN几种连接方式相继被GFW干扰,目前只有采用OpenVPN的连接方式,参见Mac OS X通过Viscosity连接OpenVPN,不过Viscosity不是免费的,我就找个开源的Tunnelblick替代。

说明一下过程和注意事项:

  • 下载chnroutes
  • 在目录下执行python chnroutes.py -p mac ,生成 ip-up 与 ip-down 两个文件。
  • Tunnelblick中导入你的vpn服务提供商提供的配置文件。
  • 修改Tunnelblick的连接配置文件,增加

up {your directory}/ip-up
down {your directory}/ip-down
networksetup -setdnsservers "Ethernet" 8.8.8.8 8.8.4.4
networksetup -setdnsservers "Wi-Fi" 8.8.8.8 8.8.4.4
  • Tunnelblick中的设置里Set DNS/WINS为“Do not setnameserver”,由前面的配置文件来指定。
  • Tunnelblick连接VPN,连接成功后,可以访问ip138.comip.cn,前者为访问国内站点的ip地址,后者为访问国外站点的地址,两者应该不同。

– 12月30日更新:
发现连上VPN后,公司内网无法访问,参考如何在连接国外 VPN 翻墙的同时,访问公司内网服务 - Alsotang’s blog在ip-up/ip-down中增加公司的域名以及内网地址即可。对于Chrome来说可能需要清除缓存,否则总指向到该死的189so。

参考的文章有: