被围观了 730 次

之前用蓝灯,免费版不稳定,收费版太贵;后来搭建shadowsocks梯子,不错,但是好景不长,在今年的5月35日之前,马上被和谐了,被几个中国学者攻破了,能识别85%的ss通道,它们为此发表了一篇论文,无耻学者;再后来采用shadowsocksr做梯子,大概用了半年,国家70大寿之际又被断了;现在干脆走ssh隧道,用ssh建立起来的隧道是加密的,很难再识别什么特征码了,只能针对ip统计流量了,当同一ip的ssh流量达到一个阈值时开始干扰:降低速度、不定期断开、彻底封死,所以即使使用ssh,也建议定期更换服务器的ip地址。

1、原理

原理很简单,见下图:

 

就是在墙内的客户机上采用ssh工具(如Linux的ssh,windows上的putty.exe、plink.exe等)与墙外的机器上的ssh服务器建立动态连接,形成一个加密的通道(或称隧道),这个通道可以通过长城防火墙(防火墙只看到存在一个ssh连接,但不知道通道里的内容,ssh连接一般会放行),防火墙会统计从墙内到达墙外某个ip地址的加密流量,当在一段时间内,流量到达一个阈值,就会强行封掉这个ip,所以良好的习惯是定期更换墙外机器的ip地址。

前提是你必须在墙外有一台开启了ssh服务的机器,比如租用一台vps,然后安装Linux操作系统,再安装openssh-server就可以了。

2、在windows 上采用plink.exe工具建立隧道

把plink.exe下载到本地硬盘的一个目录下,比如C:\ssh,然后用记事本编辑一个批处理文件plink.bat,此文件也放在c:\ssh目录下,文件内容就是下面一行:

C:\ssh\plink.exe  -batch  -C  -N   -pw  Pass87654321  sunshine@38.84.133.187  -D  127.0.0.1:8070

其中38.84.133.187为墙外机器的ip地址,sunshine为用户名,Pass87654321为密码,8070为本地监听的端口,参数-N指明本链接不是用于交互,-C指明吃药压缩传输,-batch完全杜绝交互,参数-D很关键,开启了动态转发功能,即只要本地到达127.0.0.1:8070的数据包都通过隧道转发到墙外的机器,墙外机器收到数据包再访问互联网,回来的数据按原路返回。为了便于启动,建议在桌面上建立快捷方式,指到c:\ssh\plink.bat。

隧道建立之后,墙内电脑上会监听127.0.0.1:8070,socket5格式,当然具体的端口8070可以随便修改,最好大于1024。电脑上的浏览器设置为socket5的代理,同时DNS查询也走隧道,比如windows 10上的firefox浏览器设置如下(点击右上角的“三”图标,然后点击“Options",滚到屏幕到最后,点击Network Setting下的“Settings...”):

现在你应该可以用火狐浏览器畅真正的游互联网了,比如www.google.com、twitter.com、www.youtube.com什么的。强烈建议你把firefox设置成无痕模式,这样就不会记录任何浏览历史了:点击“三”、“选项”、“隐私和安全”、在历史下面选择“不记录历史”,然后重启浏览器就可以。另外建议在安装chrome浏览器,设置成不用代理上网,专门上国内的网站。

整个通讯过程可以这样描述:你在火狐浏览器里输入网址www.google.com并回车,浏览器回向127.0.0.1:8070发送DNS请求解析网址,plink.exe程序收到从8070端口发来的数据包,经过加密后发向墙外的机器38.84.133.187:22,数据包到达长城防火墙时被检查,发现是ssh通信包,但是不知道里面是什么东西,放行通过,墙外机器收到数据包后经过解密发现是DNS请求,于是向墙外的DNS服务器请求解析,DNS服务器返回www.google.com对应的ip地址,墙外机器把解析到的Ip地址打包加密后发向墙内的电脑,中途到达长城防火墙时又被检查,发现不了问题,于是放行通过,墙内电脑上的plink.exe程序收到数据包后经解密,然后发给浏览器,浏览器拿到谷歌网址的ip后正式向谷歌网站服务器发浏览网页的请求,请求包到达127.0.0.1:8070后被plink.exe程序收到,plink.exe经过加密后发向墙外的机器38.84.133.187:22,中途被长城防火墙检查后放行,墙外电脑收到数据包后解密发现是请求谷歌网站,于是向谷歌网站服务器发起浏览网站的请求,谷歌服务器返回网站内容,墙外电脑收到谷歌返回的数据后加密并发回墙内电脑,中途再次被长城防火墙检查后放行,然后墙内电脑上的plink.exe程序收到数据包,经解密后发给浏览器,浏览器于是显示谷歌网站,哦耶,终于看到了谷歌网站了!

也许有同学问,长城防火墙为什么不能解密ssh协议的数据包呢?告诉你,要破解经ssh协议加密过的数据包,目前的电脑要经过上百年的计算才行,除非用量子计算机!

3、在墙内Linux机器上采用ssh命令建立隧道

Linux操作系统上不用额外安装任何软件,直接采用ssh命令就可以了,命令格式如下:

ssh  -C   -nNT  sunshine@38.84.133.187  -D  127.0.0.1:8070

-C参数开启压缩功能,可以节省流量,-n参数让ssh后台运行,-N参数不执行远程命令,只转发端口,-T参数指示服务器不分配伪tty。

4、通过密钥方式验证身份

上面都是采用用户名加密码的方式登录墙外电脑的,密码很容易泄密,下面讲讲采用对称密钥登录,这是非常安全的了。

首先要在墙外电脑上产生对称密钥,公钥就放在墙外电脑中,而私钥放在墙内电脑中。用sunshine用户登录墙外电脑并执行下面的命令:

ssh-keygen -t rsa -b 4096                                     -----产生密钥对。后面一路回车,直到本命令结束

cat .ssh/id_rsa.pub >>.ssh/authorized_keys                              ----把公钥附加在.ssh/authorized_keys文件的后面

chmod 600 ~/.ssh/authorized_keys

 

把私钥(即文件.ssh/id_rsa)下载到墙内电脑中的C:\ssh目录下(对于windows系统)或~/.ssh目录下并改名为sunshine.key(对于Linux系统),然后在windows上要运行程序puttygen.exe转换私钥格式(Linux系统不要转换),操作如下图所示:

假设转换后的私钥文件名为C:\ssh\plink.ppk,那么在windows上的批处理文件内容改为:

C:\ssh\plink.exe  -batch  -C  -N  -i   C:\ssh\plink.ppk  sunshine@38.84.133.187  -D  127.0.0.1:8070

在Linux操作系统上,先要把~/.ssh/sunshine.key的权限改为600,以后运行下面的命令免密码登录:

ssh  -f  -N  -i  ~/.ssh/sunshine.key  sunshine@38.84.133.187  -D  127.0.0.1:8070

 


注意:如果上面的地址127.0.0.1更换成电脑网卡的ip地址,那么就开启了局域网全代理,其他电脑可以直接使用本机的代理。如果你有一台openwrt路由器,就可以在路由器上运行下述命令(假设局域网的网关是192.168.0.1):

ssh  -qTfnN  sunshine@38.84.133.187 -D  192.168.0.1:8070

这样局域网内的其他设备代理地址采用192.168.0.1,对于苹果手机和平板电脑,可以这样设置:在openwrt路由器的/www目录下放置一个文件proxy.pac,文件内容如下:

function FindProxyForURL(url, host)
{
           return "SOCKS 192.168.0.1:8070";
}

然后在手机的wifi连接上点击右侧的圆圈中一个i的图标,然后滚到屏幕最下面,点击“http代理”下方的“自动”,再输入URL网址:

http://192.168.0.1/proxy.pac

保存即可。


 

 

5、在andriod手机上实现ssh隧道

How to Unlock and Root the Google Pixel 2

 
目前有0条回应
Comment
Trackback
你目前的身份是游客,请输入昵称和电邮!

Verify Code   If you cannot see the CheckCode image,please refresh the page again!