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