本地转发 -L
本地转发是 NetShuttle 最常见的使用方式。应用与 NetShuttle 都运行在你当前设备上,NetShuttle 通过远端 SSH 服务器访问 SSH 服务器网络中的目标。
30 秒结论
Section titled “30 秒结论”本机应用 → 127.0.0.1:本地端口 → SSH 服务器 → 远程目标 host:port- 监听方:你的 Mac、iPhone 或 iPad。
- 目标连接发起方:远端 SSH 服务器。
- 目标是否固定:固定。
- 适合:数据库、管理页、只对内网开放的 API。
ssh -L 5432:db.internal:5432 user@ssh.example.com含义:
| 部分 | 含义 |
|---|---|
5432 | 本机监听端口 |
db.internal | 只有 SSH 服务器能访问的目标主机 |
5432 | 目标主机端口 |
user@ssh.example.com | SSH 连接入口 |
更安全的显式绑定写法:
ssh -L 127.0.0.1:5432:db.internal:5432 user@ssh.example.com把监听地址限制在 127.0.0.1,可以避免同一局域网中的其他设备连接这个转发端口。
案例一:访问远端 PostgreSQL
Section titled “案例一:访问远端 PostgreSQL”假设:
- PostgreSQL 地址:
db.internal:5432 - 数据库只允许开发服务器访问。
- 本机数据库客户端无法直接访问
db.internal。
ssh -N -L 127.0.0.1:15432:db.internal:5432 user@ssh.example.com连接测试:
psql -h 127.0.0.1 -p 15432 -U app_user app_dbNetShuttle 配置
Section titled “NetShuttle 配置”- 创建或选择
ssh.example.com的 SSH 服务器。 - 新建隧道,并关联该服务器。
- 添加规则,模式选择
本地转发 -L。 - 本地地址填写
127.0.0.1,本地端口填写15432。 - 远端地址填写
db.internal,远端端口填写5432。 - 启用隧道,再使用
127.0.0.1:15432连接数据库。
案例二:访问远端管理页面
Section titled “案例二:访问远端管理页面”目标 Web 服务只在 SSH 服务器的 127.0.0.1:8080 监听:
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”,不是从你的电脑视角连接。
本地转发如何排错
Section titled “本地转发如何排错”本地端口已经被占用
Section titled “本地端口已经被占用”macOS 检查:
lsof -nP -iTCP:15432 -sTCP:LISTENLinux 检查:
ss -lntp | grep 15432更换本地端口即可。
隧道已建立,但目标连接失败
Section titled “隧道已建立,但目标连接失败”确认:
- 远端地址是否从 SSH 服务器视角解析。
- 目标服务是否真的在监听。
- 远端防火墙是否允许 SSH 服务器访问目标。
- 目标端口是否写对。
在 SSH 服务器上测试:
nc -vz db.internal 5432本机应用只能连接 localhost
Section titled “本机应用只能连接 localhost”有些数据库客户端不会连接 0.0.0.0。NetShuttle 规则中应填写 127.0.0.1,应用也连接 127.0.0.1。
- 默认绑定
127.0.0.1,不要无必要绑定0.0.0.0。 - 不要把数据库转发端口暴露给公共 Wi-Fi。
- 使用最小权限数据库账号。
- 用完及时停用规则。
- 不要把私钥口令和 OTP 保存到第三方密码管理器之外的明文位置。
与其他模式比较
Section titled “与其他模式比较”- 目标只有一个固定 host/port:用
-L。 - 目标是多个内网域名:用
-D。 - 需要让远端访问你本机:用
-R。