用SSH穿透GFW(转载)

主要是为了防止vblogspot不能访问的时候,自己能够容易找到,作者Wisi

SSH Tunnel之fuck GFW整体解决方案

在不能使用代理服务器或者tor绕开防火长城的场合(比如单位里面不可以使用非企业代理,比如日后tor被土共封锁),如果ssh 22端口没有被封锁,那就可以利用OpenSSH强大的tunnel功能来
实现高速安全的访问Internet任意开放网站的任意开放端口 。在这里简称挖地道

1准备条件:
1.1 某国外主机shell,这个需要你自己去找,买一个或找找一个免费的,需要上面的开启sshd
1.2 Firefox浏览器配合foxyproxy扩展,虽然用IE也方便,但是当大多数网站不需要挖地道访问只有个别网站需要挖地道访问自己又是懒人懒得每次访问blocked网站去切换浏览器的代理设置的情况下,用foxyproxy这个基于模版自动匹配代理的扩展还是很方便的。
1.3 国外代理服务器,任意一个高速匿名免费代理服务器

2原理:
2.1首先man ssh,注意ssh的manpage里面这也一个选项:

-L port:host:hostport
Specifies that the given port on the local (client) host is to be
forwarded to the given host and port on the remote side. This
works by allocating a socket to listen to port on the local side,
and whenever a connection is made to this port, the connection is
forwarded over the secure channel, and a connection is made to
host port hostport from the remote machine. Port forwardings can
also be specified in the configuration file. Only root can for-
ward privileged ports. IPv6 addresses can be specified with an
alternative syntax: port/host/hostport

2.2基本格式

ssh -l USER -L local_port:any_host_blocked_by_gfw:the_blocked_hosts_port ssh host_which_out_of_gfw

这样任何被屏蔽的主机(any_host_blocked_by_gfw)的任何端口(the_blocked_hosts_port),就可以在本机127.0.0.1的localport访问了

2.3解释,这里有好几个host不要搞错。
ssh -l USER是你用来登录目标ssh主机的用户名,ssh就加上一个-l选项
local_port:本机的某端口,最好大一些,保证没有被其他程序占用的,以后被屏蔽主机的某端口就被映射在本机的此端口
any_host_blocked_by_gfw:任何一个被gfw干了的主机,比如zh.wikipedia.org
the_blocked_hosts_port:前面提到的被干了的这个主机的某个端口,比如25 23 80
host_which_out_of_gfw:任何一台不在土共的GFW范围内的一台ssh host

2.4例子:
ssh -l fuckGFW 8088:zh.wikipedia.org:80 fuckgfw.free.com

我用fuckGFW帐号登录fuckgfw.free.com主机,并且把维基百科中文的80端口映射到本机的8088端口,这样下次用http://localhost:8088来访问维基百科

3应用:
每 次去挖这样一个坑麻烦了点,这时候就要动动脑筋想想别的办法了。普通的代理服务访问国外主机虽然会被土共的gfw盾,但是,如果把普通国外代理服务器加上 一个ssh的套套,那土共的GFW就煞笔了,而且即使土共把这个代理服务器本身干了也没用,因为我们的国外ssh host和国外的代理服务器都是在GFW之外的,那就是终极解决方案:
用ssh tunnel给国外代理服务器加套
例子:
ssh -l fuckGFW 3128:proxy.anywhere.com:8080 fuckgfw.free.com
这样就给国外的代理服务器proxy.anywhere.com加了套,然后在本地的浏览器设置代理为localhost:3128,那么只要你到fuckgfw.free.com的连接是22端口的ssh加密连接,土共就对你的内容无可奈何。
至于fuckgfw.free.com和proxy.anywhere.com之间是不是加密的会不会监听,目前看来似乎是不加密的(否则我在防火墙内我的本机开一个ssh再加上一个squid就可以访问任意国外主机了),所有这样做还是有风 险,千万不要用这样的方案访问你的paypal帐号gmail等等。但是用来绕开防火墙,正常使用google是足够了,访问blogspot wikipedia等等也没有问题。

4.To Do
通 常网上容易找到的代理服务器都是只支持http的,支持https的还没有找到,所以访问https的内容比如gmail还是没有好的解决方法,目前只能 设置一下foxyproxy直接访问https的内容(或者用tor),还有一个办法就是再挖一个通道,把gmail的pop服务器的端口和smtp直接 映射在本地的某端口,宁可暂时放弃一下gmail web的丰富feature,也要不受限制的访问google的服务。注意,在ssh到一台主机的时候,可以同时挖n条隧道的,也就是可以在ssh命令后 面加上n个-L 参数

5.补充
使用windows操作系统的也可以用此方法,putty对ssh的tunnel有完美的支持。