一篇让你彻底分清「动态 / 本地 / 远程」三种转发的文章

先记住一句话:
SSH 端口转发 = 用一条安全的水管(SSH 隧道)把本来不通的水流(TCP 数据)引到你想去的地方

我们先把所有术语翻译成“水管工语言”,再用三个生活小故事逐个演示。读完你就能自己画出水流图,再也不用死记。


一、角色对照表

SSH 术语 水管工语言 备注
本地主机 host1 你家的水龙头 你坐在这台电脑前
远程主机 host2 远处的消防栓 真正想访问的服务
跳板机 host3 中间的那根长水管 必须能同时连 host1 和 host2
本地端口转发 -L 把自家水龙头接到长水管上 数据方向:host1 → host3 → host2
远程端口转发 -R 把消防栓接到长水管送回你家 数据方向:host2 → host3 → host1
动态端口转发 -D 在自家装一台“万能分水器” SOCKS 代理,能流向任意多个消防栓

二、故事 1:本地端口转发(固定水管)

场景
你想用笔记本(host1)连公司内网的 Git 仓库(host2:22),但公司防火墙只让跳板机(host3)访问 Git 仓库。

水管图

[host1:笔记本] ←→ [host3:跳板机] ←→ [host2:Git 仓库]
  无法直达  |      可以直达

修水管命令

ssh -L 9000:host2:22  user@host3
参数拆解 含义
-L Local(本地)转发
9000 你笔记本上的“临时水龙头”端口
host2:22 远端真正的 Git 仓库地址
user@host3 先 SSH 到跳板机

使用方法
之后在本机执行 git clone ssh://localhost:9000/project.git
数据流:
git 命令 → 本地 9000 → 跳板机 → Git 仓库 22


三、故事 2:远程端口转发(反向水管)

场景
你在公司内网有一台测试服务器(host2:8080),想让出差在外的同事(host1)访问,但公司 NAT 不给你开端口。

水管图

[host1:同事电脑] ←← [host3:云服务器] ←← [host2:测试服务器]
  只能收水       |      两边都能连

修水管命令(在 host2 上执行):

ssh -R 9000:localhost:8080  user@host3
参数拆解 含义
-R Remote(远程)转发
9000 host3(云服务器)上的监听端口
localhost:8080 host2 自己的 8080
user@host3 把水管插到云服务器

使用方法
同事访问 http://host3:9000,请求就反向穿过 NAT 到达 host2:8080。


四、故事 3:动态端口转发(万能分水器)

场景
你在咖啡厅,只能访问跳板机(host3),想同时刷 GitHub、拉 Docker、连 Redis,端口各不相同。你不想为每个服务都修一条固定水管。

修水管命令

ssh -D 1080  user@host3
  • -D 1080 在本地开一个 SOCKS5 代理(万能分水器)。
  • 浏览器、Git、Docker CLI 只要设置 SOCKS5=127.0.0.1:1080,就能自动把任何目标端口的水流都引到 host3,再让它转发出去。

五、一张图总结三种模式

本地转发 -L
┌--------┐        ┌--------┐        ┌--------┐
│ host1  │ 9000 → │ host3  │ → 22   │ host2  │
└--------┘        └--------┘        └--------┘

远程转发 -R
┌--------┐        ┌--------┐        ┌--------┐
│ host1  │ 9000 ← │ host3  │ ← 8080 │ host2  │
└--------┘        └--------┘        └--------┘

动态转发 -D
┌--------┐        ┌--------┐      ┌----------------┐
│ host1  │1080 → │ host3  │ → ?  │ host2:any_port │
└--------┘        └--------┘      └----------------┘

六、常见疑问速答

  1. “本地”和“远程”是谁的视角?
    命令里带 -L / -R 的那台主机就是“本地”。
    -L 表示本地监听端口,-R 表示远端监听端口。

  2. -D 和 -L 区别?
    -L 是一对一固定通道;-D 是 SOCKS 代理,可一对多。

  3. 需要 root 吗?
    不需要,只要能用 ssh 登录跳板机即可。


七、实战口诀

  • 想“从家里连公司内网” → 用 -L
  • 想“让外网访问我家内网服务” → 用 -R
  • 想“一把梭所有端口” → 用 -D

把这三句口诀贴在显示器边,下次遇到任何转发需求,先问自己:“水要从哪流到哪?”然后对号入座即可。

本文由mdnice多平台发布

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容