如何通过互联网通过 ssh 访问网络内的机器

如何通过互联网通过 ssh 访问网络内的机器

对于你们大多数人来说,这可能是一个很基本的问题。但我对使用 Linux 等进行网络连接还很陌生。情况如下:我在网络中有 3 个 Web 服务器。假设它们具有以下主机名和 IP 地址:

服务器1 = 192.168.0.1 服务器2 = 192.168.0.2 服务器3 = 192.168.0.3

所有流量都进入路由器,DMZ 是 server1。例如:example.com 将带我到 server1 上的本地主机,我可以使用我的静态 IP 地址和 example.com 通过互联网 ssh 到 server1。我想要的是,如果我使用 server1.example.com,它将转到 server1,而 server2.example.com 将转到 server2,等等。

我猜这一切都是使用 BIND 的 DNS 排序的吧?我至少走在正确的轨道上吗?有人知道我该如何设置它吗?或者有教程链接吗?

我意识到我可以更改每个服务器的 ssh 端口,但这不是最佳的,因为当使用 server3.example.com 时,所有流量(http / ftp / ssh / etc)都应转发到例如 server3。

通过 server1 建立隧道到每台服务器对我来说也不是一种选择,因为 server3 的用户不应该访问 server1。

任何帮助都将不胜感激!谢谢!

答案1

这是一个过于简化的解释,但如果不更改外部端口,就无法实现您想要做的事情,因为位于您的 3 台服务器前面的防火墙并不“关心”主机名是什么;它只关心 IP 地址和端口,因此无法知道您想要连接哪个服务器。

现在,如果您可以使用几个额外的公共 IP 地址,则可以执行 1:1 NAT(有时称为“DMZ 模式”),以便 server1、server2、server3 有效地拥有自己的公共 IP 地址,然后您可以创建 server1.example.com 来解析为 server1 的 NAT 后的公共 IP 地址等等。

可能存在一个 SSH 守护进程或反向代理,能够“理解” SSH 协议,从而通过主机名执行此操作,但我猜测不是(也许精通 SSH v2 协议的人可以详细说明)。

答案2

您可以将每台服务器的 sshd 绑定到不同的端口,并将不同的端口转发到正确的 IP。或者,您可以 ssh 进入服务器 1,然后从那里访问服务器 2 和 3。

答案3

您的意思是您在 DMZ 中有一台服务器,但它有一个内部地址,并且您有一个可用的公共地址和一台当前可访问的服务器。

如果您有一个 IP 但想要通过 SSH 连接三台服务器,您很可能必须在端口上做出一些妥协。这并不难。任何 SSH 客户端都可以接受另一个端口参数。

我通常建议使用路由器上的端口转发来打开映射到内部服务器 IP 的三个端口,例如端口 220 连接到服务器 1,端口 221 连接到服务器 2,端口 222 连接到服务器 3。

不过,这与您的 Web 服务或 DNS 无关。您将通过端口 221 或您想要访问的任何端口连接到您的 ssh 服务器(如 myhost.com)。在服务器本身上,只要您的路由器映射 externalIP:220->server1:22 等,您仍然可以将 sshd 的端口保持在 22。

答案4

最简单的解决方案是选择三个端口号并在您的(电缆/DSL)路由器上安排端口转发。

例如,如果你的路由器的外部 IP 地址是 172.16.45.56

forward  172.16:45.56 port 17021 to 192.168.0.1 port 22
forward  172.16:45.56 port 17022 to 192.168.0.2 port 22
forward  172.16:45.56 port 17023 to 192.168.0.3 port 22

从互联网你只需通过 SSH 连接到 172.16:45.56 端口 17022。

相关内容