ssh隧道代理的几种模式、正向代理、反向代理、socks5动态转发

简介

ssh命令除了登陆之外,其实还有三种代理的功能,那就是正向代理、反向代理、socks5代理,在你没有其他可以

选择的时候,这个可以算是一个兜底的代理方案吧。今天一次把这几种ssh代理演示清楚,顺便做个笔记分享给新手朋友

 

 

事前准备

演示所需要

主机A:家里的电脑

主机B:美国23.159.160.201

主机C:虚拟机debian11系统

主机D:美国154.64.224.132

还有一些详细的ssh使用的参数,可以在这里查阅SSH参数说明

 

主机B开启ssh的转发功能,编辑sshd_config文件

vi /etc/ssh/sshd_config

把这一条的#号去掉,修改成yes

GatewayPorts yes

重启一下ssh

service ssh restart

 

代理模式

我们知道ssh基本上都是用来登陆服务器用来连接的,但是它的代理功能也还不错,下面说一下这三种代理功能

  • 正向代理(-L):相当于 iptable 的 port forwarding转发端口
  • 反向代理(-R):相当于 frp 或者 ngrok内网穿透
  • socks5 代理(-D):相当于 ss/ssr 这不用我说大家都懂

 

ssh本身就提供了端口转发的功能,简单来讲ssh是两台机器之间的通信数据的通道,这样的通道就是ssh的隧道,

ssh端口转发自然是需要ssh连接,而ssh连接是有方向的。从 SSH Client 到 SSH Server,那么我们的请求也是有方向

的,一般是客户端向服务器端发出请求,一旦这2个方向相同,我们称为ssh的本地转发(-L),不同则为远端转发(-R)。

 

不管是本地转发还是远端转发,都需要一个具体的应用服务器的地址和端口号,要想访问其他机器的内容就得绑定

很多条的转发命令, 那么这时候就需要通过动态转发就能省去这一个应用服务器的信息。

 

正向代理

正向代理最典型的例子,比如你家里的一台电脑我们叫它主机A,主机A没法直接访问主机D上面的网站页面服务,

但是你有另外一台处在公网环境下的美国主机B,他可以访问主机D,这样我们可以不用直接去访问主机C上的网站服务

,可以主机A直接访问主机B获得服务。就像相当于主机B是我的跳板转发我得请求到主机D的网站服务,那么我们操作就

要在主机A上使用以下命令

ssh -L 9999:154.64.224.132:80 root@23.159.160.201

主机D的网站服务

现在我们用本机的127.0.0.1:9999就可以直接透过主机B来访问主机D的网站服务

 

反向代理

反正代理的原理和正向代理差不多,都是利用ssh进行数据传输,但是反向代理的作用是把内网主机中的主机C给暴

露出来,让所有的主机都可以通过主机B来访问C的服务。对于客户端来说,反向代理中的代理服务器主机B它就是原始服

务器,客户端也根本不知道谁是原始服务器,所以反向代理更多的是为了保护原始服务器主机C,对于主机C来说主机B等

于是它的负载均衡的服务器。

比如说我这里举例,我得一台主机C是虚拟机的debian11,我在上面搭建了一个网站,但是主机C又没有公网地址

,那么从外部别人如何来访问我这个网站呢。

在主机C上运行如下命令,远程端口是主机B的8888,来访问本机127.0.0.1的80服务,也就是网站

ssh -R 8888:127.0.0.1:80 root@23.159.160.201

我们来看一下外部访问的效果,这里我输入主机B:8888端口,就可以正确的访问到主机C上提供的网站服务

 

socks5 代理/动态转发

动态转发有点像正向代理,但是区别还是有的,比如我们在国内访问google,但是因为某种原因我们必须经过代理

才能访问,之前的正向代理仅是代理到某台主机的一个端口上,但是我们要对整个浏览器的请求做代理,这就要使用动态

转发了。我们只需要配置主机C的一个端口,之后将浏览器代理到主机C(127.0.0.1)的这个端口,当前前提是你的主机B必

须能访问google。我们在主机C上执行这个命令

ssh -D 33989 root@23.159.160.201

完成后我们去火狐浏览器上进行设置

配置socks5代理到浏览器当中

测试已经可以正常访问google

THE END