STACIO WIKI · 网络指南

Stacio 隧道指南

适用版本:Stacio 0.14.x
更新日期:2026-07-25
面向读者:需要通过 SSH 访问内网服务、建立 SOCKS5 代理或配置远端反向转发的用户

1. 隧道是什么

Stacio 的隧道功能通过现有 SSH 认证链路转发 TCP 流量。它支持三种类型:

类型 数据入口 数据出口 常见用途
Local,本地转发 当前 Mac 的监听地址和端口 从 SSH 主机可到达的目标主机和端口 访问内网数据库、Web 控制台或私有 API。
Remote,远端转发 SSH 服务器上的监听地址和端口 从当前 Mac 可到达的目标主机和端口 把本机开发服务临时提供给远端环境。
Dynamic,动态转发 当前 Mac 的 SOCKS5 监听地址和端口 由 SOCKS5 客户端逐请求指定 浏览或调试多个内网 HTTP/TCP 目标。

隧道不会创建新的远端账号权限,也不会绕过防火墙、SSH 服务端转发策略或组织审批。功能入口受 SSH 隧道 License 控制。

2. 使用前准备

启动隧道前确认:

  1. 已保存并验证一个 SSH、SFTP 或 SCP 会话,或当前已打开可用的 SSH/SCP 连接;
  2. SSH 账号和认证方式有效;
  3. 首次连接的主机密钥已通过可信渠道核对;
  4. 目标服务确实监听在预期地址和端口;
  5. Local/Dynamic 使用的本地端口未被其他进程占用;
  6. SSH 服务端允许所需的 TCP forwarding;
  7. 生产环境的访问、反向暴露和代理行为已获批准。

建议先建立普通 SSH 终端并完成最小只读验证,再创建隧道。这样可以先区分认证问题、SSH 问题和目标服务问题。

多数情况下,SSH 入口是 192.168.1.20:22192.168.1.20:2222 这样的 IP 端点;有稳定 DNS 时也可以是 gateway.example.com:22。隧道目标则可能是 SSH 主机可访问的另一个内网 IP 或域名,两者不要混为同一地址。

3. 打开隧道面板

  1. 选择视图 > 隧道,或点击工具栏隧道
  2. 检查器中会显示已保存的隧道配置。
  3. 表格包含类型、本地端点、远端端点、状态、详情和流量。
  4. 使用顶部的新增、编辑、删除按钮管理配置;每行的启动或停止按钮管理运行态。

若入口灰色并提示“该功能模块无有效授权,请升级授权”,请在帮助 > License检查授权。不要通过直接修改本地数据库绕过授权或审批。

4. 创建隧道

4.1 快速新增

点击新建隧道后可快速填写:

快速新增默认把本地监听地址设为 127.0.0.1,保存后会立即尝试启动。Local 和 Remote 的目标支持 host:port,IPv6 可写为 [address]:port

Remote 隧道的两端语义与 Local 相反,第一次配置 Remote 时建议保存后再进入完整编辑器核对全部字段。

4.2 完整编辑器

选中一条配置并点击编辑隧道,可设置:

字段 含义
SSH 会话端点 从已保存的 SSH/SFTP/SCP 会话中选择可用端点和认证上下文。
配置标识 本地唯一 ID,例如 tun_prod_db;不能与其他隧道重复。
类型 Local、Remote 或 Dynamic。
本地主机 Local/Dynamic 时是 Mac 的监听地址;Remote 时是 Mac 侧目标地址。
本地端口 Local/Dynamic 时是 Mac 的监听端口;Remote 时是 Mac 侧目标端口。
远端主机 Local 时是 SSH 侧目标地址;Remote 时是 SSH 服务器监听地址;Dynamic 不使用。
远端端口 Local 时是 SSH 侧目标端口;Remote 时是 SSH 服务器监听端口;Dynamic 不使用。

选择“SSH 会话端点”会把远端主机和端口填为该会话端点。随后手动修改远端主机或端口时,配置不再与所选端点匹配。若 SSH 传输端点与实际转发目标不同,先打开正确的 SSH 会话,让隧道使用当前连接上下文,再填写真实转发目标。

4.3 区分四类地址

配置隧道时至少要区分以下地址角色:

地址角色 示例 说明
SSH 连接端点 ops@192.168.1.20:22 Stacio 用它完成 SSH 认证和主机密钥校验。
Mac 本地监听 127.0.0.1:15432 Local/Dynamic 隧道在当前 Mac 上接受客户端连接。
SSH 侧目标 10.0.0.25:5432 Local 隧道由 SSH 主机继续访问的内网服务。也可使用 db.internal:5432
Remote 远端监听 127.0.0.1:19000 Remote 隧道在 SSH 服务器一侧接受连接。

快速新增的目标是一个合并的 host:port 输入;完整编辑器中的本地主机本地端口远端主机远端端口必须分栏填写。不要把 SSH 登录入口误填成数据库目标,也不要把 10.0.0.25:5432 整体填入完整编辑器的主机字段。

5. Local 本地转发

5.1 数据流

Mac 应用 -> 本地监听地址:端口 -> SSH 连接 -> 内网目标:端口

例如,通过 SSH 入口 ops@192.168.1.20:22 访问只能从该 SSH 主机到达的 PostgreSQL 10.0.0.25:5432

字段 示例
类型 Local
本地主机 127.0.0.1
本地端口 15432
远端主机 10.0.0.25
远端端口 5432

启动后,本机数据库客户端连接 127.0.0.1:15432。如果内网通过 DNS 管理数据库,也可把远端主机改为 db.internal,端口仍单独填写 5432。数据库看到的连接来源通常是 SSH 主机侧,而不是当前 Mac 的公网地址。

5.2 验证

在 Mac 本地终端进行只读检查:

lsof -nP -iTCP:15432 -sTCP:LISTEN
nc -vz 127.0.0.1 15432

端口可连接只证明 TCP 链路建立,不证明数据库账号、TLS 或业务查询正常。应再使用目标协议执行最小健康检查。

6. Remote 远端转发

6.1 数据流

远端客户端 -> SSH 服务器监听地址:端口 -> SSH 连接 -> Mac 侧目标:端口

例如,把 Mac 上 127.0.0.1:3000 的开发服务提供给 SSH 服务器本机的 127.0.0.1:19000

字段 示例
类型 Remote
本地主机 127.0.0.1
本地端口 3000
远端主机 127.0.0.1
远端端口 19000

在 SSH 服务器上可使用只读命令核对:

ss -lnt | grep ':19000'
curl --fail --max-time 5 http://127.0.0.1:19000/health

不要默认把 Remote 监听设为 0.0.0.0::。是否允许非回环监听还取决于 SSH 服务端的 GatewayPorts 等策略;对外暴露前必须确认认证、TLS、防火墙、访问范围和关闭时间。

7. Dynamic 动态转发

7.1 数据流

SOCKS5 客户端 -> Mac SOCKS5 监听地址:端口 -> SSH 连接 -> 客户端指定目标

推荐配置:

字段 示例
类型 Dynamic
本地主机 127.0.0.1
本地端口 1080

在支持 SOCKS5 的客户端中配置 127.0.0.1:1080。验证 HTTP 目标时可使用:

curl --socks5-hostname 127.0.0.1:1080 --fail --max-time 10 http://service.internal/health

--socks5-hostname让域名通过 SOCKS 侧解析,适合只有内网 DNS 能解析的主机;直接访问 IP 时不需要域名解析。代理不等于内容加密:从 SSH 出口到目标服务的链路仍取决于目标协议是否使用 TLS。

8. SSH 会话上下文

隧道启动时按以下顺序取得 SSH 上下文:

  1. 当前工作区中可用的 SSH 连接上下文;
  2. 隧道记录绑定的已保存 SSH/SFTP/SCP 会话;
  3. 若两者都不可用,返回“需要先打开一个 SSH 或 SCP 会话”。

绑定会话被删除、改为不支持的协议、端口无效或凭据缺失时,编辑隧道并重新选择会话。经 ProxyJump 打开的 SSH 上下文可把相同跳板配置用于隧道运行时,但目标和跳板主机仍分别执行主机密钥与认证流程。

9. 启动、监控与停止

9.1 启动

  1. 选中配置并再次核对类型和两端地址。
  2. 点击该行的启动按钮。
  3. 等待状态从“启动中”变为“运行中”。
  4. 使用本地或远端客户端完成专项验证。

Local 和 Dynamic 启动时会检查本地端口是否可用。Remote 的监听发生在 SSH 服务器上,本地端口检查规则不同。

9.2 运行状态

面板以不同状态颜色和文本显示:

运行中的隧道每秒轮询一次状态,并显示累计流量:

↑ 上传字节  ↓ 下载字节

流量只说明有字节经过,不代表请求成功、响应正确或业务事务完成。

9.3 复制等价 SSH 命令

右键隧道可选择复制SSH 隧道命令,得到对应的 ssh -Lssh -Rssh -D 形式。该操作只复制文本,不会执行命令;未绑定会话时目标可能显示为占位的 user@host,使用前必须补全并检查。

9.4 停止与退出

10. 自动重连

隧道运行时发现链路断开后,会按递增延迟尝试重新建立,当前最多自动重连 10 次。界面显示“重连中…(第 N 次)”。

重连恢复的是隧道连接,不保证经过隧道的数据库事务、HTTP 请求、文件传输或长连接可以从断点继续。

11. 监听安全

11.1 默认使用回环地址

Local 和 Dynamic 推荐使用:

127.0.0.1

这只允许当前 Mac 本机连接。使用 0.0.0.0:: 或局域网网卡地址会把服务或 SOCKS5 代理暴露给其他设备。动态隧道编辑器会对非 127.0.0.1 监听显示风险提示。

11.2 最小暴露原则

11.3 凭据与日志

隧道使用 Stacio 当前或保存会话的认证信息。复制的 SSH 命令、诊断和截图不应包含密码、Token、私钥内容或私钥口令。主机密钥变化必须停止并独立核验。

12. 排障 Runbook

12.1 无法启动

按顺序检查:

  1. License 是否有效;
  2. 类型和端口是否正确,端口范围是否为 1...65535
  3. 是否有当前 SSH 上下文或有效的绑定会话;
  4. SSH 认证和主机密钥是否正常;
  5. Local/Dynamic 本地端口是否被占用;
  6. SSH 服务端是否允许 TCP forwarding;
  7. 目标服务是否监听且路由可达。

12.2 本地端口被占用

lsof -nP -iTCP:<端口> -sTCP:LISTEN

确认进程责任人后再决定停止进程或改用其他端口。不要为了启动隧道直接终止未知进程。

12.3 Local 已运行但目标不可用

12.4 Remote 无监听

12.5 Dynamic 客户端失败

12.6 反复自动重连

  1. 手动停止隧道。
  2. 记录首次断开时间和错误详情。
  3. 检查网络、VPN、SSH 会话、凭据和主机密钥。
  4. 验证两端服务仍在监听。
  5. 修复根因后手动启动一次并持续观察。

13. 完成与关闭清单

涉及生产访问时,同时遵循安全与治理远程运维

本文是 Stacio Wiki 中文用户文档的一部分。