江右东流

关于

PAC + SSH翻墙

[ ssh  tunnel  socks  GFW  MT  随笔涂鸦  ]

06 Jul 2008

话说最近GFW又连续封了SourceForgeFacebook, 虽然我朝答应在奥运的时候给外国友人们一个开放的internet,但估计到时也是一个适当开放的internet罢了。

说起GFW,这个GreatWall的虚拟版本虽然如它的实体一样声名远扬,不过却是相当狼藉。对于我来说,GFW最操蛋的有以下两点:

  1. flickr上08年前(大致上是这个时间)的图片都被GFW了,可怜我07年初还买了pro帐号
  2. My Opera以及Blogspot(最近刚刚解封)、Wordpress的BSP托管或者国外的个人博客上大量的博文无法观看,当然这个可以通过Google Reader等订阅观看,但是这样会把我的订阅列表搞的相当不整洁

当然,现在又要至少加上一点了:SourceForge。

为了解决这些问题,最初的时候到处找代理,可是稳定的代理相当罕见,后来就开始戴Tor。不过这玩意的速度相当的慢,后面也放弃了。再后来开始用Hotspot Shield这个免费的VPN, 不过每次拨号之类的也颇费时间,偶尔还使使小性子掉掉线。

所以后来买了MTDedicated-Virtual后,便开始用SSH + PAC代理配置文件翻墙。MT的服务稳定且优质,速度也很不错,所以后面我开始不仅仅使用它翻墙,还用它来加速对国外一些站点的访问。

PAC是Proxy Auto-Config的缩写,它其实是一段Javascript脚本,实现了一个FindProxyForUrl的函数,使用正则表达式来查找匹配URL的Proxy。下面举一个例子:

 function FindProxyForUrl(url, host) {
         if (shExpMatch(url, "*.sourceforge.net/*")) {return "SOCKS 127.0.0.1:7070";}
         if (shExpMatch(url, "*.apple.com/*")) {return "SOCKS 127.0.0.1:7070";}
         return "DIRECT";
 }

DIRECT的意思是不使用代理直接连接。Mac OS X可以直接针对某个网络连接使用PAC文件(还是Mac好,嘿嘿),而主流的浏览器也都提供了PAC文件的支持。

上面代码中的本地7070端口的SOCKS代理就是使用SSH来创建的,你可以在*nix的系统终端里运行:

 ssh -qTfnN -D 7070 username@host.com

这样就可以在本地打开一个SOCKS代理,随意冲浪,享受出墙的快感。:p


后记:

在厦门的日舞里,小娘安静的坐在我的对面猛击iPhone,又或不时叉起一条烤鱼在柠檬上蹭点汁送到偶的嘴边,曾经缥缈流连的美梦里也不过如此,足矣。