通过 ssh 连接路由器后面的所有机器

通过 ssh 连接路由器后面的所有机器

我的局域网上有几台机器。其中一台用作 http 代理,用于定位其他机器上的网站(现在由于 ServerFault 而运行良好)。在我的路由器上,端口 22 被 NAT 到这台代理机器。我希望能够通过以下方式访问互联网内的其他机器:

ssh 用户@first_machine.my_domain.tld ssh 用户@second_machine.my_domain.tld

我可以使用代理机器来“过滤”传入的 ssh 请求并将它们路由到正确的机器吗?(以同样的方式,可以在 Apache 中混合使用 mod_proxy 和 namevirtualhost 来对网站执行此操作)

非常感谢,Luc

答案1

您可以先使用 VPN 连接到远程网络,然后直接通过 SSH 连接。这可能可行,也可能不可行,也可能不是您最初想要实现的目标,但这种方法是可行的。

我强烈建议您通过端口映射将尽可能少的机器暴露在互联网上!特别是如果允许密码/键盘交互身份验证。人们的密码确实很弱。

另一个建议可能是连接到您的代理机器,并让它明确地建立到您想要直接到达 NAT 后面的每台机器的隧道。您可以直接从命令行指定一个(或多个)SSH 隧道,如下所示:

ssh -L localport:hostnameOrIPofMachineBehindNAT:remoteMachinePort [email protected]

您需要在本地主机上连接的端口号在哪里localport,该端口号将转发到 NAT 后面的机器,并通过代理进行 SSH 隧道传输。

hostnameOrIPofMachineBehindNAT是您想要在 NAT 后面访问的非代理机器的 LAN IP 或 LAN DNS。通常在私有 IP 范围内,例如 10/8、192.168/16 或 172.16/12。

remoteMachinePort是您想要连接到 NAT 后面的远程计算机上的服务的端口号。如果是 SSH,则可能是标准端口 22。

[电子邮件保护]我想是微不足道的。

然后你可以从另一个本地 shell 连接到你的另一台机器,如下所示:

ssh usernameOnRemoteBoxBehindNat@localhost

由于命令行很容易变得非常长且难以输入,因此最好将所有这些内容以及您想要的 SSH 选项和端口隧道都塞入文件中~/.ssh/.ssh_config。这将减少您的输入量ssh connectionNickname,并且始终自动设置所有转发和选项。

请参阅man 5 ssh_config以了解深入解释和可使用的配置选项列表~/.ssh/.ssh_config

答案2

您可以在文件中进行此项设置,.ssh/config以自动配置隧道

http://backdrift.org/transparent-proxy-with-ssh

基本上你只需要添加类似

Host machinebehindrouter
ProxyCommand  ssh user@externalhost nc %h %p

答案3

  • 您可以先 ssh 到一台机器,然后从该机器 ssh 到其他机器。也许使用 ssh-keys 可以使登录更容易。
  • 或者您可以更改每台机器上的端口并进行适当的 NAT。

我会选择第一个选项并保护其他机器只允许来自第一台机器的 ssh。

答案4

我会考虑只连接到你的代理盒或其他主机,然后使用 GNUscreen实用程序在你的其他盒子上运行多个会话。

作为奖励,您将学习如何使用screen,这是一款每个人都应该了解的出色的应用程序!

相关内容