
SSH 本身就具备强大的隧道功能,无需额外软件。通过 SSH 隧道,你可以安全地将本地端口、远程端口或动态端口转发到其他机器。根据不同的需求,主要有三种类型:
1. 本地端口转发 (Local Port Forwarding)
用途: 将本地端口的流量转发到远程机器的某个端口。这最常用于访问防火墙后的服务。
场景: 假设你的本地机器(A)想访问远程服务器(B)上运行在 localhost:8080 的一个 Web 服务,但防火墙阻止了直接访问。
命令:
Bash
ssh -L 9090:localhost:8080 user@remote_server_ip
ssh: 启动 SSH 客户端。
-L: 指定本地端口转发。
9090: 本地机器上的端口。
localhost:8080: 远程服务器上的目标 IP 和端口。
user@remote_server_ip: 远程服务器的登录信息。
效果: 运行这条命令后,你可以直接在本地浏览器访问 http://localhost:9090,它会自动通过 SSH 隧道将请求转发到远程服务器的 8080 端口。
2. 远程端口转发 (Remote Port Forwarding)
用途: 将远程机器的某个端口流量转发到本地机器的端口。这可以用来实现简单的内网穿透。
场景: 你的本地机器(A)在内网,想让公网服务器(B)的用户能够访问你本地运行在 localhost:8000 的服务。
命令:
Bash
ssh -R 8000:localhost:8000 user@remote_server_ip
ssh: 启动 SSH 客户端。
-R: 指定远程端口转发。
8000: 远程服务器上绑定的端口。
localhost:8000: 本地机器上的目标 IP 和端口。
user@remote_server_ip: 远程服务器的登录信息。
效果: 运行这条命令后,远程服务器上的用户可以访问 remote_server_ip:8000,请求会通过 SSH 隧道转发到你本地的 8000 端口。
3. 动态端口转发 (Dynamic Port Forwarding)
用途: 将本地机器变成一个 SOCKS5 代理服务器,所有流量都通过 SSH 隧道转发。这可以用来突破网络限制。
场景: 你想让本地所有网络请求都通过远程服务器转发,以访问被限制的网站。
命令:
Bash
ssh -D 1080 user@remote_server_ip
ssh: 启动 SSH 客户端。
-D: 指定动态端口转发。
1080: 本地 SOCKS 代理服务器的端口。
user@remote_server_ip: 远程服务器的登录信息。
效果: 运行后,你需要将本地应用的代理设置指向 localhost:1080,所有流量都会通过远程服务器进行转发。这比本地端口转发更灵活,因为它不限于特定的应用或端口。
总的来说,SSH 隧道本身就是一个强大的工具,能满足大部分端口转发和代理需求。如果你需要更复杂的内网穿透,例如多用户管理、Web 管理界面等,那么 FRP、NPS 等专用工具会更适合。
评论(没有评论)