我有以下设置:在路由器(路由器)后面运行sshd( 本地 )的一台计算机和另一台主机(远程)尝试通过Internet访问本地 ,通过ssh访问路由器。
因此:端口转发路由器 :22 – > 本地 :22( 路由器作为本地网关)。 工作得很好。
如果我尝试创build一个从远程到本地的ssh隧道,如下所示:
ssh -L 1234:R:12345 user@R
这只会工作,如果我也redirect路由器 :1234 – > 本地 :1234。
我的理解是,ssh会通过端口22连接所有的通信。但是看起来情况并非如此。 难道我做错了什么? 是否有可能通过一个单一的连接隧道的所有stream量?
你的问题对我来说有点不清楚,所以我要指定我的设想,然后试着帮助你解决问题。 你在计算机'远程'这是SSH'到'本地',这部分工作正常。 如果是这种情况,我们不再需要担心路由器。
继续我的假设,“本地”有一个服务在端口12345上运行,您希望从“远程”访问而不打开路由器上的其他端口。 你想要做的是从'远程'使用以下命令:
ssh -L 1234:localhost:12345 user@router's_ip
要连接到服务,您将通过localhost:1234访问它。
端口转发语法的工作方式是:{ local_port }:{ proxy_dest }:{ proxy_port }
local_port是将在您要连接的客户机上打开的端口,要访问它,您将使用localhost: local_port
proxy_dest是您要从SSH服务器的angular度连接到的主机
proxy_port是您想要连接的远程系统上的端口。
对你问题的第二部分的回答。 您可以使用SSH的更高版本的dynamic代理function来转发所有stream量,并提供一些注意事项。
您在客户端上使用的应用程序必须支持SOCKS代理。
OpenSSH只支持SOCKS4风格的代理。
使用的语法是:
ssh -D user @ remotehost
我认为你想要:
remote ssh到local local端口12345上的远程端口1234 您似乎指出local位于router上的NAT后面 – 这就是为什么您需要设置portforward以使router:22内部转发到local:22
如果我正确地理解了这个,你想在远程使用的命令行实际上是:
ssh -L 1234:local:12345 user@router
这里的关键是,尽pipe这是一个local端口( -L == local ),但是主机名的parsing(即在本例中为1234:local:12345列表中的第二个参数)发生在目标机器上 -在这种情况下是local 。
在你的例子中,你有1234:router:12345 – 这意味着stream量沿着SSH隧道从remote到local ; 然后从local路由到router – 正如你所说,这需要另一个端口,使stream量回到local 。
另一种方法是使用ssh -R 1234:local:12345从local ssh到remote 。 这将不需要在router ,但你仍然有1234 remote转发到local 12345 。 这个明显的缺点是,你不能从remote启动这个连接,因为你无法到达local 。