端口转发
OxideTerm 支持全部三种 SSH 端口转发类型,并能自动检测远程监听端口。所有转发操作使用无锁消息传递架构以实现最大吞吐量。
本地转发 (-L)
Section titled “本地转发 (-L)”将本地机器的端口通过 SSH 隧道转发到远程主机。
本地端口 ──SSH 隧道──► 远程主机:端口使用场景:
- 在本地浏览器中访问远程 Web 服务(如端口 8888 上的 Jupyter Notebook)
- 通过安全隧道连接远程数据库(MySQL、PostgreSQL)
- 访问防火墙后的内部 Web UI
远程转发 (-R)
Section titled “远程转发 (-R)”将远程服务器的端口转发回本地机器。
远程端口 ◄──SSH 隧道── 本地主机:端口使用场景:
- 将本地开发服务器暴露给远程环境
- 与远程网络上的同事分享本地服务
- Webhook 开发——在远程服务器接收回调并转发到本地应用
动态转发(SOCKS5 代理)(-D)
Section titled “动态转发(SOCKS5 代理)(-D)”通过 SSH 隧道创建 SOCKS5 代理,实现灵活的流量路由。
本地 SOCKS5 端口 ──SSH 隧道──► (任意远程目标)使用场景:
- 通过远程服务器路由浏览器流量
- 无需逐个端口转发即可访问多个内部服务
- 从远程服务器视角进行网络调试
智能远程端口检测
Section titled “智能远程端口检测”OxideTerm 自动检测远程服务器上正在监听的服务。远程监听端口 面板显示:
- 端口号和绑定地址
- 进程名称(通过
/proc或ss获取时) - 一键转发 — 点击 Forward 即可创建本地转发,端口自动填充
无需记忆端口号或手动配置转发规则。
将常用转发固定为 快捷转发 以便即时访问。它们以彩色标签形式显示在端口转发标签页顶部。一键启动,一键停止。
- 查看所有活动转发的状态、本地/远程地址和实时流量统计(字节进/出)
- 启动 / 停止单个转发
- 编辑转发规则(端口、绑定地址、远程主机)
- 死亡报告 — 转发任务主动报告退出原因(SSH 断开、远程端口关闭、超时),提供清晰的诊断而非静默失败
- 空闲超时 —
FORWARD_IDLE_TIMEOUT(300 秒)防止僵尸连接累积
端口转发使用消息传递架构:每个 SSH Channel 由单个 ssh_io 任务独占。没有 Arc<Mutex<Channel>>——数据通过消息通道流动,完全消除热路径中的互斥锁竞争。
HandleController 通过 channel_open_direct_tcpip()(本地转发)或 tcpip_forward()(远程转发)调度转发请求。每个转发任务独立运行,通过事件回传状态。
当连接断开并重新连接时,重连协调器自动恢复所有活动和挂起的端口转发:
- 快照 — 断连前,捕获所有活动的转发规则(用户手动停止的除外)
- SSH 重连 — 建立新连接,获得新的
connectionId - 恢复 — 在新会话上重建每条转发规则,跳过重复项
- 状态同步 — UI 更新显示已恢复的转发和全新的流量计数器
用户手动停止的转发不会自动恢复——协调器尊重用户意图。
所有转发操作要求连接状态为 active。在 link_down 或 reconnecting 状态下,UI 禁用转发控件,防止在断开的 SSH 通道上操作。