SSH tunnel + pac穿越

就是穿越我们的墙。以前写过一个我的pac的post,不过那个pac在很多环境不work,那就老实写那个笨的,可是太麻烦了。所以写了个rb脚本生成那个pac。

如下:

#!/usr/bin/env ruby
proxy = 'SOCKS 127.0.0.1:7777'
gfucked_sites = [
  'youtube.com',
  'ytimg.com',
  'googlevideo.com',
  'tinyurl.com',
  'bit.ly',
  'blogspot.com',
  'twitter.com',
  'plurk.com',
  'torproject.org',
  'wikipedia.org',
  'tumblr.com',
  'soup.io',
  'pandora.com',
  'adobe.com',
  'last.fm',
  'photoshop.com',
  'google.com',
  'googlecode.com',
  'appspot.com',
  'acer.com',
  'demonoid.com',
  'alexa.com',
  'wikimedia.org',
  'yahoo.com',
  'zend.com',
  'aptana.com',
  'uncyclopedia.tw',
  'uncyc.org',
  'webarchive.org',
  'pornhub.com',
  'yourporn.com',
  'facebook.com',
  'mail-archive.com',
  'versionapp.com',
  'friendfeed.com',
  'ff.im',
  'chinagfw.org',
  'bullogger.com',
  'mulhollanddrive.com',
  'iphone-dev.org',
  'plurk.com',
  'imageshack.us',
  'zendesk.com',
  'pbwiki.com',
  'chromium.org',
  'typepad.com',
  'ff.im',
  'friendfeed.com',
  'tornadoweb.org',
  'bullogger.com',
  'blogspot.com',
  'zendesk.com'
]
puts "function FindProxyForURL(url, host) {"
gfucked_sites.each do |site|
  puts "  if (shExpMatch(url, \"*://*.#{site}/*\")) { return \"#{proxy}\"; }"
  puts "  if (shExpMatch(url, \"*://#{site}/*\")) { return \"#{proxy}\"; }"
end
puts "  return \"DIRECT\""
puts "}"

运行一下./gen_pac.rb > tin.pac就会生成tin.pac,我在.profile里面加入这一行并在开机默认启动Terminal就可以每次都更新pac文件了。但是还缺一个apple script告诉网络连接刷新一下pac文件,下次有空研究一下怎么做。

打开ssh tunnel我没有使用自动的方式,我设置了这个alias:

alias px='ssh -qTfnNC -D 7777 user@yourdomain.com'

然后每次用ssh-tunnel的时候只需要去Terminal执行一下px就好了。

在Mac里面我可以给每一块网卡指定系统级别的自动代理脚本pac文件:Air port图标-> Open Network preference->解锁->选择你的网络连接-> Advance …->Proxies->Automatice Proxy Configuration,让它指向你的pac文件。然后整个系统都回使用它作为代理了,如此Tweetie就可以非常爽的工作了。此法对于使用Tor的用户一样有效,修改一下pac生成脚本里面的proxy = 'SOCKS 127.0.0.1:7777'proxy = 'HTTP 127.0.0.1:tor_port'就可以了。

4 thoughts on “SSH tunnel + pac穿越”

  1. 通过pac的话,用IE会有DNS泄露。比如IE8的socks代理下的DNS查询还是本地进行的,而不是在SSH服务器端进行。

    即便手动设置本地DNS服务器为OpenDNS,还是会被GFW过滤到敏感域名的查询,敏感域名包括youtube、twitter等。

    所以用SSH+PAC的方法,在IE下是不能访问youtube、twitter的。用FireFox(需设置)和Safari才可以。

  2. osx下reload网络的pac设定(假设你的device是AirPort):
    networksetup -setautoproxystate ‘AirPort’ off
    networksetup -setautoproxyurl ‘AirPort’ ‘file://pacfile’
    networksetup -setautoproxystate ‘AirPort’ on

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.