翻墙过程 回首页 1.买了一个翻墙的ssh的帐号. 2.linux增加一个专用登陆SSH的用户,限制远程权限:仅给tcp转发权限,无shell权限. useradd -s /bin/false <username> passwd <username> (对已有帐号: usermod -s /bin/false <username>) 3.建立Tunnel: ssh -D 7070 -qTfnN <username>@<hostname> 输入密码即可使用(也可以用key认证) 让内网所有机器都搭上云梯: ssh -qTfnN -D 0.0.0.0:7070 <username>@<hostname> # netstat -anp| grep 7070 tcp 0 0 0.0.0.0:7070 0.0.0.0:* LISTEN 1444/ssh 参数详解: -D 7070 建立动态Tunnel,监听在本地7070端口. -q 安静模式. -f ssh在后台运行,即认证之后,ssh退居后台. -n 将stdio重定向到/dev/null,与-f配合使用. -N 不运行远程程序. 即通知sshd不运行设定的shell. 4.windows机器上设置代理 /* * 编写一个代理规则文件 stand_alone.pac */ function withPrefix(str, prefix) { return (str.indexOf(prefix) == 0); } function withSuffix(str, suffix) { var n = str.lastIndexOf(suffix); return (n >= 0 && n + suffix.length == str.length); } function contains(str, tok) { return (str.indexOf(tok) > 0); } function myHost(host) { return ( (host.indexOf("192.168") == 0) || (host.indexOf("10.10") == 0) ); } function myIpAddress(ip) { return ( (ip.indexOf("192.168") == 0) || (ip.indexOf("10.10") == 0) ); } function regExpMatch(url, pattern) { try { return new RegExp(pattern).test(url); } catch(ex) { return false; } } function isInNet(theHost) { var i = 0; var pos=0; hostList01 = new Array( "www.sina.com.cn.de", ".baidu.com", "12.34.56.78", "12.34.56.79", ".sohu.com", "12.34.56.77", "www.douban.com" ); while (i < hostList01.length) { if (withSuffix(theHost, hostList01[i])) return 1; i++; } return 0; } function FindProxyForURL(url, host) { // var PROXY = "PROXY 192.168.10.22:8080"; // var PROXY = "SOCKS5 220.181.126.77:19310"; // var PROXY = "PROXY 192.168.10.22:8118"; var PROXY = "SOCKS5 192.168.10.22:7070"; // var HOMEPROXY = "PROXY aaa.test.org:63128"; var HOMEPROXY = "PROXY 192.168.10.22:3128"; var DEFAULT = "DIRECT"; var ClientAddr = myIpAddress(); if ( shExpMatch(url,"localhost") || shExpMatch(url,"127.0.0.1") ) { return "DIRECT"; } if (isInNet(ClientAddr, "12.34.56.1", "12.34.56.2")) { return "DIRECT"; } if (myHost(ClientAddr)) { return "DIRECT"; } else { /* return "SOCKS5 127.0.0.1:7070"; */ return PROXY; } if (shExpMatch(url, '*://*.ak.fbcdn.net/*')) return PROXY; if (shExpMatch(url, '*://*.test2.com/*')) return HOMEPROXY; if (shExpMatch(url, '*://*.test1.com/*')) return HOMEPROXY; if (shExpMatch(url, '*://*.google.*/*')) return PROXY; if (shExpMatch(url, '*://*.twimg.com/*')) return PROXY; //-- 被墙的网站! if(/^[\w\-]+:\/+(?!\/)(?:[^\/]+\.)?taitung\-house\.gov\.tw/i.test(url)) return DEFAULT; if(/^[\w\-]+:\/+(?!\/)(?:[^\/]+\.)?cromotc\.nat\.gov\.tw/i.test(url)) return DEFAULT; if(/^[\w\-]+:\/+(?!\/)(?:[^\/]+\.)?nici\.nat\.gov\.tw/i.test(url)) return DEFAULT; //-- END RULES return DEFAULT; } 5.补充socks转http代理方式 使用Privoxy: 打开"Options"--->"Edit main Configuration", 搜索forward-socks4, 大约在1500多行左右找到. 填加"forward-socks4a / 127.0.0.1:7070 ." 或者"forward-socks5 / 127.0.0.1:7070 .". 这两句用一个就可以了, 作用是forward本地的7070端口Socks代理, (forward-socks5我没有成功) 再找到"listen-address 127.0.0.1:8118", 这一句的作用是在本地8118端口开一个HTTP代理, IE或其他浏览器中代理设置成127.0.0.1:8118就可以使用了. forward-socks4和forward-socks4a的区别: Socks4a的域名解析是有服务器端, 而Socks4的域名解析是在客户端. 如果某些IP比如192.168.*.* 127.*.*.*不想用代理, 只需在文件中填加"forward 192.168.*.*/ ."和"forward 127.*.*.*/ ."即可. 6.参考: http://autoproxy2pac.appspot.com/ http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt