ssh建立socks代理原理浅析

来源:互联网 发布:oracle 查看数据库ip 编辑:程序博客网 时间:2024/06/06 18:55

直入正题,先来一条命令:

ssh -N -D 9000 -f root@host.com

属性解释一下:

-D


这个属性很神奇,关键的那句话是“and the application protocol is then used to determine where to connect to from the remote machine”,翻译为”接下来应用程序协议就会决定去连哪”,应用程序协议指的是TCP/UDP。

它不仅仅是简单端口转发,当数据到达服务器端的这个端口后,ssh会尝试解析这个请求,并进行TCP或者UDP请求(当然也就包括http请求),将得来的结果从这个端口再回发到客户端。

9000

代表指定本地的socks代理端口。

root@host.com

这是ssh标准常用命令~ 指定socks服务器在哪,但这不代表监听就一定开在服务器,这取决于这条命令在哪执行。

-N


这是个辅助属性,一般ssh连好以后就进入shell,可以让你打命令了,我只要做端口转发,所以我不需要执行命令。

-f


这同样是个辅助属性,如果没有它,只有-D和-N,那么这个进程会在前台运行,阻塞后续操作,现象就是一个光标不停地在闪。用了它当前ssh进程就进后台运行了。

总结:

如果在服务器上执行这条命令,譬如 ssh -N -D 9000 -f root@localhost,那么服务器就开好socks监听端口了。

那么这个端口转发可以被其他机器使用么?比如通过其他客户端来直接连接 服务器 的 9000 端口?答案是不行的,在主流 SSH 实现中,本地端口转发绑定的是 lookback 接口,这意味着只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。好在 SSH 同时提供了 GatewayPorts 关键字,我们可以通过指定它与其他机器共享这个本地端口转发。

ssh-g  -N -D 9000 -f root@host.com

如果在客户机上执行,远程连root@remotehost,那么相当于在本地开了一个socks代理监听,socks服务器就是本机,但通过remotehost来处理请求。

网上有很多翻墙教程说要一个myentunnel通过ssh实现本地socks代理,其实如果你自己有ssh的vps,执行命令的权限,直接在远程主机上执行就开好socks代理了,那么这软件也不用运行了。

原创粉丝点击