正向代理、反向代理与SSH端口转发
代理类型
-
正向代理 (Forward Proxy)
- 工作方式: 客户端 主动配置 代理服务器地址。客户端的请求先发送给代理,代理再转发给目标服务器。
- 目的: 主要为了 访问 客户端原本无法直接访问的资源(如突破网络限制),或隐藏客户端身份。客户端清楚代理的存在。
-
反向代理 (Reverse Proxy)
- 工作方式: 客户端 直接访问 代理服务器(以为它就是目标服务器),无需配置。代理服务器将请求转发给后端的真实服务器。
- 目的: 主要为了 保护和管理 后端服务器,如实现负载均衡、安全防护(隐藏真实IP)、SSL卸载等。客户端不感知真实服务器的存在。
-
透明代理 (Transparent Proxy)
- 工作方式: 在网络层(如网关)自动拦截并处理流量,客户端无需任何配置 且通常不感知其存在。
- 目的: 常用于网络内容过滤、访问控制或强制执行网络策略。
SSH 端口转发 (SSH Tunneling)
利用 SSH 安全连接创建端口转发通道,实现类似代理的功能。命令通常在 SSH 客户端机器上执行。
-
本地转发 (-L)
- 命令:
ssh -L <本地端口>:<目标主机>:<目标端口> <SSH服务器>
- 作用: 将发往 本机指定端口 的请求,通过
<SSH服务器>
转发到<目标主机>
的<目标端口>
。 - 场景: 从本地访问远程网络(SSH服务器可访问的网络)中的服务。
- 命令:
-
远程转发 (-R)
- 命令:
ssh -R <远程端口>:<目标主机>:<目标端口> <SSH服务器>
- 作用: 将发往
<SSH服务器>
上指定<远程端口>
的请求,通过 SSH 隧道转发回 执行ssh -R
命令的机器 可访问的<目标主机>
的<目标端口>
(<目标主机>
常为127.0.0.1
,指执行命令的机器自身)。 - 场景: 将本地网络的服务暴露给远程网络访问。
- 命令:
-
动态转发 (-D)
- 命令:
ssh -D <本地端口> <SSH服务器>
- 作用: 在 本机指定端口 创建一个 SOCKS 代理。所有通过此 SOCKS 代理的流量都将通过
<SSH服务器>
转发。 - 场景: 提供通用的代理服务,如在不安全网络下加密浏览流量(注意:仅加密 客户端 <-> SSH服务器 段)。可配合 Polipo 等工具将 SOCKS 代理转为 HTTP/HTTPS 代理。
- 命令: