1. SSH 隧道(SSH Tunneling):
-
广义概念:SSH 隧道是一种通过 SSH 协议在本地和远程服务器之间创建的加密通信通道,可以在此通道中转发任意的网络流量。SSH 隧道可以包括多种类型的端口转发方式。
-
类型:SSH 隧道包括三种主要的端口转发方式:
- 本地端口转发(Local Port Forwarding):使用
ssh -L
命令创建。 - 远程端口转发(Remote Port Forwarding):使用
ssh -R
命令创建,允许远程主机通过隧道访问本地主机的某个端口。 - 动态端口转发(Dynamic Port Forwarding):使用
ssh -D
命令创建,SSH 客户端在本地创建一个 SOCKS 代理,可以动态地转发流量到不同的远程端口。
- 本地端口转发(Local Port Forwarding):使用
2. ssh -L(本地端口转发,Local Port Forwarding):
- 具体实现:
ssh -L
是创建 SSH 隧道的一种方式,用于将本地的某个端口转发到远程服务器上的另一个主机的端口。通过这个隧道,本地流量被加密并通过 SSH 连接发送到远程服务器,远程服务器再将流量解密并转发到内部主机。 - 典型用途:非公网本地客户端 可以访问 远程内部主机 的服务,而无需直接在公网上暴露内部主机的端口,暴露的是远程公网服务器的ssh服务。此时目标服务器地址已知,远程公网服务器(正向代理服务器)代理客户端发送请求。
- 语法:
bash ssh -L [local_port]:[internal_ip]:[internal_port] -p [port_number] user@remote.example.com
假设内部主机是一台家里的windows,它的 IP 地址是 192.168.1.100
,并且你希望将非公网电脑的端口 8080
转发到该内部主机的RDP 3389
端口,同时远程服务器的SSH 监听端口 通过家里的路由器暴露2222
端口(家里的windows起ssh 或 家里的另一台linux起ssh),那么在本地运行的完整命令如下:
ssh -L 8080:192.168.1.100:3389 -p 2222 user@remote.example.com
这样,你可以在工位电脑通过访问 localhost:8080
来通过 SSH 隧道访问家里的内部主机 192.168.1.100
的 3389
端口。
3. ssh -R(远程端口转发 或 反向隧道,Remote Port Forwarding):
- 具体实现: ssh -R 是创建 SSH 隧道的另一种方式,用于将远程服务器上的某个端口转发到本地的某个端口。通过这个隧道,远程服务器上的流量被加密并通过 SSH 连接发送到本地,本地再将流量解密并转发到指定的本地端口。
- 典型用途: 远程公网服务器 不能访问 非公网本地,但是远程服务器开了端口可以被本地访问。那么就可以在本地进行
ssh -R
命令行操作,允许远程服务器访问本地。此时远程服务器作为访问者,只知道远程公网服务器(反向代理服务器)的地址,客户端把请求发给代理后,不知道会转发给哪个目标服务器。 - 语法:
bash ssh -R [remote_port]:localhost:[local_port] -p [port_number] user@remote.example.com
假设远程公网服务器的9000端口监听 SSH 服务,此时可以将远程服务器上的端口 9001(为防止转发和服务冲突不能是9000)转发到本地某台电脑的 22端口,那么在本地运行的完整命令如下:
ssh -R 9001:192.168.1.XXX:22 -p 9000 user@remote.example.com
这样,你可以通过在远程公网服务器上访问localhost:9001
来访问非公网本地某台电脑的22
端口。
一、正向代理
正向代理: 顺着请求的方向进行的代理,即代理服务器它是由你配置为你服务,去请求目标服务器地址。
举例一:
如我们现在想要访问谷歌,但是由于某些原因,无法直接访问到谷歌,我们可以通过连接一台代理服务器,代理服务将我们的请求提交到谷歌,然后再将谷歌的响应反馈给我们,对于谷歌而言,它只知道有一个请求过来,但是它并不会知道我们是无法直接访问它的。
正向代理的作用:
访问原来无法访问的资源,如google
可以做缓存,加速访问资源
对客户端访问授权,上网进行认证
代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
二、反向代理
反向代理: 跟正向代理相反,它是为目标服务器进行服务的,但是请求的流程还是: clieng -> proxy -> server。
举例: 比如我们访问百度网站,百度的代理服务器对外的域名为 https://www.baidu.com
。具体内部的服务器节点我们不知道。现实中我们通过访问百度的代理服务器后,代理服务器给我们转发请求到他们N多的服务器节点中的一个给我们进行搜索后将结果返回,此时,代理服务器对我们客户端来说就充当了提供响应的服务器,但是对于目标服务器来说,它只是进行了一个请求和转发的功能。
反向代理的作用:
保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
负载均衡,通过反向代理服务器来优化网站的负载。
三、两者的区别与联系
正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端.
联系:1、正向代理中,proxy和client同属一个LAN,对server透明;
2、反向代理中,proxy和server同属一个LAN,对client透明。
四、总结
事实上,正向代理和反向代理的作用都是进行请求和转发,但是为了区别正向代理,所以后出现的就成为反向代理。生活中最常见的例子:
1、正向代理: 卖票的黄牛
2、反向代理: 出租房的二手东