翻墙过程 回首页
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