ssh 端口转发具体是如何工作的

ssh 端口转发具体是如何工作的

我有以下设置:一台运行 sshd 的机器(当地的)位于路由器(路由器)后面,第二台主机(远程)尝试访问当地的通过 ssh 连接互联网和路由器。

因此:端口转发路由器:22->当地的:22(和路由器作为门户当地的)。运行良好。

如果我尝试从偏僻的当地的如下:

ssh -L 1234:R:12345 user@R 

这仅在我也重定向时才有效路由器:1234->当地的:1234。

我的理解是,ssh 将通过端口 22 上的连接传输所有流量。但似乎情况并非如此。我做错了什么吗?是否有可能通过单个连接传输所有流量?

答案1

您的问题对我来说有点不清楚,所以我将详细说明我的假设,然后尝试帮助您解决问题。您在“远程”计算机上,该计算机正在通过 SSH 连接到“本地”,并且此部分工作正常。如果是这样,我们就不再需要担心路由器了。

继续我的假设,“本地”在端口 12345 上运行着一项服务,而您想从“远程”访问该服务,而无需在路由器上打开其他端口。您需要做的是从“远程”使用以下命令:

ssh -L 1234:localhost:12345 user@router's_ip

要连接到该服务,您可以通过 localhost:1234 访问它。

端口转发语法的工作方式是:{本地端口}:{代理目标}:{代理端口}

本地端口是您正在连接的客户端机器上打开的端口,要访问它,您可以使用 localhost:本地端口

代理目标是从您正在通过 SSH 连接的服务器的角度来看您想要连接的主机

代理端口是您想要连接的远程系统上的端口。

答案2

回答你问题的第二部分。你可以使用 SSH 更高版本的动态代理功能来转发所有流量,但有几个注意事项。

您在客户端上使用的应用程序必须支持 SOCKS 代理。

OpenSSH 仅支持 SOCKS4 样式代理。

使用的语法是:

ssh -D 用户@远程主机

答案3

我认为你想要的是:

  • remote从到sshlocal
  • 并将1234远程端口转发12345local

你似乎表明local位于 NAT 后面router- 这就是为什么你需要设置端口转发,以便router:22内部转发到local:22

如果我理解正确的话,您想要在远程使用的命令行实际上是:

ssh -L 1234:local:12345 user@router

这里的关键是,虽然这是一个local端口转发(-L== local),但主机名的解析(即,local在本例中 - 列表中的第二个参数1234:local:12345)发生在目标机器上 - 在本例中是local

在您的示例中,您有1234:router:12345- 这意味着流量从remote到沿着 ssh 隧道传输;然后从到local路由- 并且正如您所说,这需要另一个端口转发才能将流量返回到。localrouterlocal


另一种方法是使用ssh 从local到。这样就不需要端口转发了,但你仍然需要转发到。这样做的明显缺点是你无法从 发起此连接,因为你没有办法到达。remotessh -R 1234:local:12345router1234remote12345localremotelocal

相关内容