跳转到内容

端口转发实战案例

这篇文档用完整场景把 -L、-R、-D 串起来。每个案例都包含目标、拓扑、命令、NetShuttle 配置和验证方式。

  • 你在公司 Wi-Fi 下。
  • PostgreSQL db.internal:5432 只允许开发服务器 dev.example.com 访问。
  • 你不想在本地安装 SSH 隧道脚本。

使用 -L,因为目标固定且由远端服务器发起连接。

Terminal window
ssh -N -L 127.0.0.1:15432:db.internal:5432 user@dev.example.com
  • 模式:本地转发 -L
  • 本地:127.0.0.1:15432
  • 远端:db.internal:5432
  • SSH:dev.example.com
Terminal window
psql -h 127.0.0.1 -p 15432 -U app_user app_db

案例二:打开只监听在远端 localhost 的 Grafana

Section titled “案例二:打开只监听在远端 localhost 的 Grafana”

Grafana 只在开发服务器本机监听:

127.0.0.1:3000
Terminal window
ssh -N -L 127.0.0.1:13000:127.0.0.1:3000 user@dev.example.com
http://127.0.0.1:13000

关键点:远程目标也写 127.0.0.1,因为连接是从远端服务器发出的。

案例三:把本地 Next.js 开发服务提供给测试服务器

Section titled “案例三:把本地 Next.js 开发服务提供给测试服务器”
  • 本地服务:127.0.0.1:3000
  • 测试服务器:test.example.com
  • 测试服务器中的脚本需要请求你的本地服务。

使用 -R,因为监听发生在远端,目标在你的电脑。

Terminal window
ssh -N -R 127.0.0.1:18080:127.0.0.1:3000 user@test.example.com
Terminal window
curl http://127.0.0.1:18080

如果只绑定远端 127.0.0.1,只有测试服务器自己可以访问,这是最安全的默认方式。

第三方测试系统只能请求 test.example.com 网络中的地址。你的本地 Webhook 监听 127.0.0.1:9000。

Terminal window
ssh -N -R 127.0.0.1:19000:127.0.0.1:9000 user@test.example.com

然后让第三方系统请求:

http://test.example.com:19000/webhook

如果测试服务器 18080 只监听 localhost,需要同时配置 GatewayPorts 和远程防火墙。

案例五:通过 SOCKS5 访问多个内网服务

Section titled “案例五:通过 SOCKS5 访问多个内网服务”

你需要在浏览器里访问:

grafana.internal:3000
wiki.internal:8080
api.internal:443
Terminal window
ssh -N -D 127.0.0.1:1080 user@dev.example.com
Terminal window
curl --socks5-hostname 127.0.0.1:1080 http://grafana.internal:3000
curl --socks5-hostname 127.0.0.1:1080 http://wiki.internal:8080

可以,但每次新增目标都要增加规则。SOCKS5 更适合“目标列表可变”的浏览和调试场景。

案例六:ProxyJump 与端口转发的区别

Section titled “案例六:ProxyJump 与端口转发的区别”
Terminal window
ssh -J user@jump.example.com user@target.internal

它解决的是“怎样通过跳板机建立到目标主机的 SSH 连接”。

Terminal window
ssh -L 127.0.0.1:15432:db.internal:5432 user@jump.example.com

它解决的是“让本机某个端口通过 SSH 服务器访问另一个 TCP 目标”。

如果目标本身是 SSH 主机,优先考虑 ProxyJump。

如果目标是数据库、HTTP 或其他 TCP 服务,端口转发更直接。

NetShuttle 中两者可以同时存在:先配置 proxyJumpID 连接目标服务器,再基于该连接创建端口转发。

问题选择
本机访问一个固定远端目标-L
远端访问一个固定本机目标-R
本机访问多个远端目标-D
只是通过跳板机 SSH 到另一台机器ProxyJump
浏览器必须使用 SOCKS5-D
只暴露一次本地预览-R,用完即关
  1. SSH 连接本身是否已建立。
  2. 监听端是否出现端口。
  3. 监听地址是 127.0.0.1 还是 0.0.0.0。
  4. 目标服务是否从正确一侧可达。
  5. 防火墙和安全组是否放行。
  6. DNS 是由本机解析还是由远端解析。
  7. 停止隧道后端口是否释放。