SSH 端口转发三兄弟 -L、-R、-D 一次讲清:内网穿透其实可以零部署

折腾内网穿透,很多人的第一反应是装 frp、…

折腾内网穿透,很多人的第一反应是装 frp、Cloudflare Tunnel,或者干脆上 WireGuard。工具当然是好的,但很多时候你只是想临时把某个端口“借”出去用一下,装一整套东西反而显得重。其实 OpenSSH 自带的端口转发(Port Forwarding)三个参数,就能解决九成场景——零部署、零依赖,系统里现成就有。

三个方向,记住三句话

  • -L 本地转发:把远程的东西“搬”到本地来访问;
  • -R 远程转发:把本地的东西“推”到远程,让别人访问;
  • -D 动态转发:本地开一个 SOCKS 代理,流量借道远程出去。

本地转发 -L:把远程服务搬到眼前

假设你有一台 VPS,它的内网里跑着一个 Web 服务,只能通过 192.168.1.10:80 访问,而你人在外面。用下面这条命令,把它“搬”到自己电脑的 8080 端口:

ssh -L 8080:192.168.1.10:80 user@vps_ip

命令跑起来后,本地浏览器打开 http://127.0.0.1:8080,就等于访问了远程那台内网机器的 80 端口。语法是 -L 本地端口:目标地址:目标端口,这里的目标地址是从 VPS 的视角去解析的——这一点新手最容易搞混。

远程转发 -R:把本地服务暴露出去

-R 正好反过来。比如你在公司电脑上跑了个开发服务器 localhost:3000,想让 VPS 那边(或借道 VPS 的同事)访问。在你自己电脑上执行:

ssh -R 9000:127.0.0.1:3000 user@vps_ip

这样 VPS 上的 127.0.0.1:9000 就指向了你本地的 3000。注意,默认只绑定 VPS 的 127.0.0.1,想让公网也能访问,得在 VPS 的 /etc/ssh/sshd_config 里加一行 GatewayPorts yes 再重启 sshd——这行改之前想清楚,等于把你的服务直接开到了公网。

动态转发 -D:轻量 SOCKS 代理

-D 是拿来当代理用的。出门在外连了不靠谱的 Wi-Fi,想借 VPS 出口上网,一条命令开个 SOCKS5 代理:

ssh -D 1080 user@vps_ip

然后在浏览器或系统里把 SOCKS5 代理指向 127.0.0.1:1080,所有流量就借道 VPS 出去了,比装 VPN 客户端轻得多。

后台常驻:加几个参数就够

这些命令终端一关就断了,所以一般加上组合参数让它后台常驻:

ssh -fNTL 8080:192.168.1.10:80 user@vps_ip

其中 -f 后台运行、-N 不执行远程命令、-T 不分配伪终端,-C 还能压缩传输。想更稳一点,用 autossh 自动重连:

autossh -M 0 -fNTL 8080:192.168.1.10:80 user@vps_ip

端口转发是 SSH 里最被低估的功能之一,临时救急、日常调试、轻量穿透都够用。但记住一点:-R 和 -D 本质上都是在开放入口,用完记得 ps aux | grep ssh 查一下进程再 kill 掉,别让一个忘了关的隧道变成别人进你内网的后门。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注