早上咨询了 @lixiaohong 同学,我的ssh -D经常被重置的一个可能原因是硬件防火墙关闭不活跃链接。解决方法是在/etc/ssh_config下面加上一个配置:
ServerAliveInterval 10
这样10秒钟会发送一次keepalive请求。防火墙就不会以为是死连接了。还有一个重新打开ssh -D的脚本:
kill $(ps auwx | grep qTfnNC | grep -v grep | awk '{ print $2 }') && ssh -qTfnNC -D 7777 user@yourdomain.com
Tag: proxy
在Mac下使用脚本重载proxy自动配置脚本(pac)
Mac下对网络设备使用proxy自动配置脚本可以透明使用代理穿墙(可以配合ssh tunnel和tor)。但是我一直不知道如何用脚本让系统重新载入pac文件(在更新了pac的规则时我们需要重载配置)。昨天一位叫做Dylan的网友留言告诉了我如何做,我在此记录一下。在命令行下面:
networksetup listallnetworkservices
然后会会返回一个网络连接服务的列表:
An asterisk (*) denotes that a network service is disabled.
Bluetooth DUN
ADSL
Ethernet
FireWire
AirPort
Bluetooth PAN
我一般需要配置pac文件的是Ethernet和AirPort,那么相应的重载命令是:
sudo networksetup -setautoproxystate 'AirPort' off
sudo networksetup -setautoproxyurl 'AirPort' 'file://localhost/Users/tin/pac/tin.pac'
sudo networksetup -setautoproxystate 'AirPort' on
sudo networksetup -setautoproxystate 'Ethernet' off
sudo networksetup -setautoproxyurl 'Ethernet' 'file://localhost/Users/tin/pac/tin.pac'
sudo networksetup -setautoproxystate 'Ethernet' on
然后pac文件就已经被重载完毕啦!在此感谢Dylan。
顺便共享一下我在bash下的alias:
alias px='ssh -qTfnNC -D 7777 tin@zztin.com'
alias rpx="sudo networksetup -setautoproxystate 'AirPort' off;sudo networksetup -setautoproxyurl 'AirPort' 'file://localhost/Users/tin/pac/tin .pac';sudo networksetup -setautoproxystate 'AirPort' on;sudo networksetup -setautoproxystate 'Ethernet' off;sudo networksetup -setautoproxyurl 'Ethernet' 'file://localhost/Users/tin/pac/tin.pac';sudo networksetup -setautoproxystate 'Ethernet' on"
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 "}"
运行一下
打开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'
就可以了。