跳转到内容

端口转发

OxideTerm 支持全部三种 SSH 端口转发类型,并能自动检测远程监听端口。所有转发操作使用无锁消息传递架构以实现最大吞吐量。

将本地机器的端口通过 SSH 隧道转发到远程主机。

本地端口 ──SSH 隧道──► 远程主机:端口

使用场景:

  • 在本地浏览器中访问远程 Web 服务(如端口 8888 上的 Jupyter Notebook)
  • 通过安全隧道连接远程数据库(MySQL、PostgreSQL)
  • 访问防火墙后的内部 Web UI

将远程服务器的端口转发回本地机器。

远程端口 ◄──SSH 隧道── 本地主机:端口

使用场景:

  • 将本地开发服务器暴露给远程环境
  • 与远程网络上的同事分享本地服务
  • Webhook 开发——在远程服务器接收回调并转发到本地应用

通过 SSH 隧道创建 SOCKS5 代理,实现灵活的流量路由。

本地 SOCKS5 端口 ──SSH 隧道──► (任意远程目标)

使用场景:

  • 通过远程服务器路由浏览器流量
  • 无需逐个端口转发即可访问多个内部服务
  • 从远程服务器视角进行网络调试

OxideTerm 自动检测远程服务器上正在监听的服务。远程监听端口 面板显示:

  • 端口号和绑定地址
  • 进程名称(通过 /procss 获取时)
  • 一键转发 — 点击 Forward 即可创建本地转发,端口自动填充

无需记忆端口号或手动配置转发规则。

将常用转发固定为 快捷转发 以便即时访问。它们以彩色标签形式显示在端口转发标签页顶部。一键启动,一键停止。

  • 查看所有活动转发的状态本地/远程地址实时流量统计(字节进/出)
  • 启动 / 停止单个转发
  • 编辑转发规则(端口、绑定地址、远程主机)
  • 死亡报告 — 转发任务主动报告退出原因(SSH 断开、远程端口关闭、超时),提供清晰的诊断而非静默失败
  • 空闲超时FORWARD_IDLE_TIMEOUT(300 秒)防止僵尸连接累积

端口转发使用消息传递架构:每个 SSH Channel 由单个 ssh_io 任务独占。没有 Arc<Mutex<Channel>>——数据通过消息通道流动,完全消除热路径中的互斥锁竞争。

HandleController 通过 channel_open_direct_tcpip()(本地转发)或 tcpip_forward()(远程转发)调度转发请求。每个转发任务独立运行,通过事件回传状态。

当连接断开并重新连接时,重连协调器自动恢复所有活动和挂起的端口转发:

  1. 快照 — 断连前,捕获所有活动的转发规则(用户手动停止的除外)
  2. SSH 重连 — 建立新连接,获得新的 connectionId
  3. 恢复 — 在新会话上重建每条转发规则,跳过重复项
  4. 状态同步 — UI 更新显示已恢复的转发和全新的流量计数器

用户手动停止的转发不会自动恢复——协调器尊重用户意图。

所有转发操作要求连接状态为 active。在 link_downreconnecting 状态下,UI 禁用转发控件,防止在断开的 SSH 通道上操作。