我可以使用其他主机而不是本地主机作为 SSH 反向隧道端口转发中的目标字段吗?

我可以使用其他主机而不是本地主机作为 SSH 反向隧道端口转发中的目标字段吗?

192.168.1.132:8081我正在使用 Putty 实现 SSH 反向隧道端口转发。大多数教程都教我将远程端口转发到本地主机端口。但是,我想知道在目标字段中输入其他主机是否有意义?

我曾尝试这样做。192.168.1.132:8081是一个具有内容页面的正常运行的 Web 服务器,但是ERR_EMPTY_RESPONSE当我从客户端设备访问localhost:12345(我将端口设置12345为源端口)时,出现了问题。


我的 Putty 配置

传出代理配置:

传出代理配置

隧道配置(Dynamic一个用于Socks5连接,请忽略它;一个R12345是我正在使用的隧道):

隧道配置

我尝试从目标(SSH 服务器)访问隧道的结果是:

我尝试从目标(SSH 服务器)访问隧道的结果

谁能帮我?


更新 1

在运行 SSH 命令的设备中,我通过代理服务器进行通信。这会影响反向隧道行为吗?


更新2

我尝试直接从 http 服务器建立反向隧道。但是在 SSH 服务器中,我可以通过以下方式访问网站:http://本地主机:12345. 附加设置和结果如下。

同样,http 服务器也需要通过我办公室的 http 代理出去!

从 http 服务器创建反向隧道

然后我可以通过 localhost:12345 从 SSH 服务器访问 http 服务器

答案1

是的!

你需要明白,这other_host是你将要指定的是在LAN networkssh 客户端. 因为ssh 客户端ssh 服务器可以位于两个不同的 LAN 网络中。

例如:

ssh -R 1234:192.168.1.69:4321 [email protected]
#                 ^
#                 |_ other_host

然后,你最好确保192.168.1.69从你这边可以 ping 通(ssh 客户端192.168.1.69)。terabithia的网络局域网内可能存在与 terabithia.com 类似的 IP 地址的机器,但那不是other_host上面代码片段中提到的那个。

需要注意一些细微的事情:

  • 尽管您在 terabithia.com 内设置了监听 TCP 端口 1234,但这在 terabithia.com 内并不对外开放。这意味着,如果您到nc -w 5 -z terabithia.com 12202 && echo "open" || echo "close"那时检查端口是否打开,您将看到close打印的消息,因为该端口仅在 terabithia.com 内可访问。
  • nc -w 5 -z localhost 1234即使没有监听端口,other_host或者根本other_host不存在监听端口,该命令在 terabithia.com 中也始终会成功执行。在这种情况下,错误消息会打印在ssh client控制台中。
  • 由于 ssh 是基于 TCP 的面向连接的通信协议,因此您需要组合使用其他工具(例如ncsocat来转发 UDP 端口)。
  • -R两个主要的混淆是和的使用-L。理解这个主题的诀窍是认为ssh client和属于两个不同的网络 LAN。如果ssh server,则 的上下文other_host取自LAN 。否则,如果,则上下文取自LAN。ssh client's-R-Lssh server's
  • 只有添加该字段才-L可以打开可公开访问的端口address binding

答案2

是的,你可以这样做,但如果你不了解它是如何工作的,就很容易做出错误的假设。

如果我没记错的话(已经过去好几个月了,所以为了尽快给您答复,我希望我没记错……),
指定为“本地”端口的隧道将导致一个软件(我将其称为“侦听器”)在运行 SSH 客户端的机器上进行侦听。“远程”端口将导致一个软件(我将其称为“侦听器”)在运行 SSH 服务器的机器上进行侦听。

了解带有隧道的 Localhost:
现在,这是真正棘手的部分,很容易让您陷入困境。通常,当您在一台计算机上时,您会认为“localhost”指的是该计算机。但是,嗯,不是。最好将“目的地”字段视为文本。因此,在侦听器收到流量后,侦听器将通过本地 SSH 软件转发该流量,该软件将加密数据并通过隧道推送流量。发送流量的一方还将提供“目的地”信息。然后,远程 SSH 软件将接收该流量,并查看目的地的内容,然后尝试将流量发送到那里。

因此,如果您在客户端上输入“localhost”,则文本“localhost”将通过 SSH 隧道发送,而实际上是远程端将解析“localhost”。因此,localhost 很容易指向与您输入名称的机器不同的机器。

答案3

我可以使用其他主机而不是本地主机作为 SSH 反向隧道端口转发中的目标字段吗?

是的,你可以在目标主机字段中输入任何你想要的主机

命令行隧道定义

为了回答这个问题,我将使用以下形式X:Y:Z,这是命令行 SSH 客户端描述隧道的方式,其中该隧道:

  • 源端口
    • 1234
  • 目的地
    • 本地主机:4321

将被描述为1234:localhost:4321

隧道如何运作

有两种类型的隧道具有目的地设置:

本地隧道

对于定义为的隧道,X:Y:Z您可以将流量视为发送到客户在港口X,以及服务器连接到Y端口上的主机Z,并转发所有流量。

远程隧道

对于定义为的隧道,X:Y:Z您可以将流量视为发送到服务器在港口X,以及客户连接到Y端口上的主机Z,并转发所有流量。

隧道可以做什么

本地隧道可用于:

  • 访问无法通过互联网访问的服务
  • 访问只能从特定 IP 使用的服务

远程隧道可用于:

  • 允许远程系统访问本地计算机上的端口,但不将其暴露给互联网
  • 通过互联网暴露您网络上的其他系统

答案4

如果您指定了代理,那么在某些情况下,您需要将本地 IP 地址(本例中为 192.168.1.132)添加到代理设置面板中的“排除的主机/IP 地址”列表中。否则,通过 putty 进行的反向 ssh 连接将尝试使用代理连接到本地 IP 地址。

相关内容