跳转到内容

本地转发 -L

本地转发是 NetShuttle 最常见的使用方式。应用与 NetShuttle 都运行在你当前设备上,NetShuttle 通过远端 SSH 服务器访问 SSH 服务器网络中的目标。

本机应用 → 127.0.0.1:本地端口 → SSH 服务器 → 远程目标 host:port
  • 监听方:你的 Mac、iPhone 或 iPad。
  • 目标连接发起方:远端 SSH 服务器。
  • 目标是否固定:固定。
  • 适合:数据库、管理页、只对内网开放的 API。
Terminal window
ssh -L 5432:db.internal:5432 user@ssh.example.com

含义:

部分含义
5432本机监听端口
db.internal只有 SSH 服务器能访问的目标主机
5432目标主机端口
user@ssh.example.comSSH 连接入口

更安全的显式绑定写法:

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

把监听地址限制在 127.0.0.1,可以避免同一局域网中的其他设备连接这个转发端口。

假设:

  • PostgreSQL 地址:db.internal:5432
  • 数据库只允许开发服务器访问。
  • 本机数据库客户端无法直接访问 db.internal。
Terminal window
ssh -N -L 127.0.0.1:15432:db.internal:5432 user@ssh.example.com

连接测试:

Terminal window
psql -h 127.0.0.1 -p 15432 -U app_user app_db
  1. 创建或选择 ssh.example.com 的 SSH 服务器。
  2. 新建隧道,并关联该服务器。
  3. 添加规则,模式选择 本地转发 -L。
  4. 本地地址填写 127.0.0.1,本地端口填写 15432。
  5. 远端地址填写 db.internal,远端端口填写 5432。
  6. 启用隧道,再使用 127.0.0.1:15432 连接数据库。

目标 Web 服务只在 SSH 服务器的 127.0.0.1:8080 监听:

Terminal window
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 user@ssh.example.com

浏览器打开:

http://127.0.0.1:18080

这里的目标地址写 127.0.0.1,表示“从 SSH 服务器自己的视角连接 127.0.0.1”,不是从你的电脑视角连接。

macOS 检查:

Terminal window
lsof -nP -iTCP:15432 -sTCP:LISTEN

Linux 检查:

Terminal window
ss -lntp | grep 15432

更换本地端口即可。

确认:

  • 远端地址是否从 SSH 服务器视角解析。
  • 目标服务是否真的在监听。
  • 远端防火墙是否允许 SSH 服务器访问目标。
  • 目标端口是否写对。

在 SSH 服务器上测试:

Terminal window
nc -vz db.internal 5432

有些数据库客户端不会连接 0.0.0.0。NetShuttle 规则中应填写 127.0.0.1,应用也连接 127.0.0.1。

  • 默认绑定 127.0.0.1,不要无必要绑定 0.0.0.0。
  • 不要把数据库转发端口暴露给公共 Wi-Fi。
  • 使用最小权限数据库账号。
  • 用完及时停用规则。
  • 不要把私钥口令和 OTP 保存到第三方密码管理器之外的明文位置。
  • 目标只有一个固定 host/port:用 -L。
  • 目标是多个内网域名:用 -D。
  • 需要让远端访问你本机:用 -R。