我的局域网上有几台机器。其中一台用作 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
,这是一款每个人都应该了解的出色的应用程序!