从本地 ssh 服务器到远程 ssh 客户端的反向 SSH 隧道,将流量转发到客户端网络上的另一台服务器?

从本地 ssh 服务器到远程 ssh 客户端的反向 SSH 隧道,将流量转发到客户端网络上的另一台服务器?

这可能吗?

  1. 带有 ssh 服务器的本地系统
  2. 远程客户端正在运行 ssh 客户端连接到 (1)
  3. 本地 (1) 流量在客户端 (2) 网络上的目标位置

当远程 ssh 客户端连接到本地 ssh 服务器时,我想要将流量从本地系统转发到客户端系统网络上的另一个位置。

例如,如果我对端口 80 进行转发,那么客户端通过 ssh 连接后,指向端口 80 的本地流量将被重定向到上面的 (3)。

如果可能的话,建议使用能够更轻松地支持此功能的 ssh 客户端,或者仅限这种类型的设置命令行?

谢谢!

答案1

其中的第一部分——创建隧道——可以通过 ssh 客户端软件完成。

在标准命令行 ssh 客户端中(我使用的是 Mac,但相信此行为与 unix/linux 版本相匹配),用法指定“ -R [bind_address:]port:host:hostport”表示从服务器转发到客户端的端口(而-L从客户端转发到服务器)。

例如,如果您想将远程 ssh 服务器上的端口 80 转发到客户端计算机可以通过 访问的本地 Web 服务器http://localserver:80/,则可以使用额外的命令行参数 进行连接-R 80:localserver:80

根据客户端计算机操作系统,将有各种其他选项用于设置。如果您使用的是任何基于 unix 的操作系统,我建议您使用上述选项,或者如果您使用的是 Windows,PuTTY 能够设置这种隧道(设置 / SSH / 隧道 - 选择“远程”而不是“本地”)。

一旦隧道建立,任何与 ssh 服务器处于同一网络的人都可以连接到客户端网络上的 Web 服务器。但是,他们无法通过其真实 IP 连接到它 - 他们必须连接到远程服务器,http://sshserver:80/然后将流量转发到远程服务器,然后返回响应。

如果您希望能够通过相同的 URL 访问相同的服务器,则需要在 ssh 服务器的网络中添加匹配的 DNS 条目,指向 ssh 服务器的 IP 地址。当 ssh 客户端断开连接时,它将无法访问。

另外,请注意 ssh 服务器只有一个端口 80,因此您一次只能对一个远程服务器执行此操作。如果您想绕过该限制,则必须为 ssh 服务器分配多个 IP,并在 ssh 命令行上使用可选的“绑定地址”参数,或者您可以通过在 ssh 命令中选择不同的远程端口将服务器分散到不同的端口(通常是 8080、8081 等)——Web 服务器本身仍然可以使用端口 80。

相关内容