多台机器使用单一静态 IP

多台机器使用单一静态 IP

我家里目前有一个 DSL 调制解调器,它有一个静态 IP(例如77.77.77.77)。
此调制解调器连接到一个无线路由器,该路由器上连接了几台机器。

为了简单起见,从现在开始,我将背后的网络77.77.77.77称为home-net

我的目标是能够ssh进入任何机器,home-net而无需诉诸丑陋的port-forwarding端口映射。

为了实现这一目标,我的计划是:

  • 在任何我想要的机器上77.77.77.77 home-net添加条目hostsssh
  • port-forwarding在路由器上设置home-netDNS 查询
  • 运行的计算机(在同一网络上)bind接收这些 DNS 查询并将其解析为 LAN IP

我不完全明白如何实现它..我希望将 DNS 查询发送到home-net询问相关系统(示例pc1),该查询将被转发到正在运行的机器bind,并将其解析为某个 LAN IP..但我不确定这是否足以解决问题..

我还无法实现或测试这一点。遗憾的是,使用设置 DNS 服务器bind似乎比我预想的要复杂得多。

我的问题是:

  • home-net是否可以用这个单一静态 IP 通过 ssh 接入任何机器port-forwarding
  • 这个设置能起作用吗?
  • 有没有更简单的方法可以做到这一点?

答案1

你的问题中所有内容都是完全错误的。

我的目标是能够通过 ssh 进入家庭网络后面的任何机器,而无需借助丑陋的端口转发和端口映射。

解决这个问题的唯一方法是拥有多个公共 IP 地址。如果您只有一个 IP(住宅 ISP 连接通常如此),则必须使用端口转发。

但是,还有另一种方法,我将在下面描述。

为了实现这一目标,我的计划是:

  • 将条目 77.77.77.77 home-net 添加到我想要 ssh 的任何机器上的主机
  • 在家庭网络路由器上设置端口转发以进行 DNS 查询
  • 运行 bind 的机器(在同一网络上)接收这些 DNS 查询并将其解析为 LAN IP。如果您

以上内容存在的所有错误均在此。

  • 您的/etc/hosts文件仅用于本地系统上的 DNS 解析。它与任何其他系统无关。其他系统无法访问此文件。
  • 您可以将 53 端口转发到bind网络上运行的端口。它甚至可以返回 LAN IP,正如您所描述的那样。 问题是这些 LAN IP 在您的网络之外对您毫无用处,除非它们是 ISP 分配的公共 IP。您无法从外部连接到它们。 简单来说,192.168.XX 范围内的 IP 基本上是私人的范围并且无法路由到公共互联网上。

现在,一切还不算太糟。如果你想从外部创建一条进入你网络的路径,这是可能的,而实现这一目标的方法是通过 VPN。OpenVPN 可以做到这一点,值得研究。

帮助您开始研究的快速概述:

  • 您可以在网络上的系统上设置 OpenVPN 服务器,并为其打开一个端口。在 Linux 机器上将其设置为“桥接”VPN,该 VPN 位于家庭网络所在的同一子网中(通常为 192.168.1.0/24,请检查您的路由器)。您需要查找动态 DNS 提供商(例如 DynDNS 或 EasyDNS)并进行ddclient配置。
  • 然后,您需要在笔记本电脑或其他从外部连接到它的系统上设置 OpenVPN 客户端。
  • 当您启动 OpenVPN 客户端时,您将通过 VPN 连接到您的家庭网络。您甚至可以从家庭路由器获取 IP。

答案2

如果我正确理解了您提出的解决方案,答案是否定的,除非您转发 ssh,否则这将不起作用。即使您获得了家庭网络 IP,从外部客户端的角度来看,它们也是不可路由的,因为它们不是可公开路由的地址。您的客户端可以使用家庭网络 IP 作为目的地来格式化数据包,但它到达的第一个路由器将丢弃它。

DNS 实际上与该问题或解决方案几乎没有关系,但请考虑您无法在大多数客户端操作系统上设置特定于域的 DNS 服务器,因此必须将客户端配置为对所有查询使用 home-nets 绑定实例,而不仅仅是针对 home-net 地址的查询。

最后,您仍然需要为想要 ssh 进入的每台机器转发端口,否则您将无法连接。

如果您可以获得 DNS 注册,则可以创建子域并将它们指向路由器上的不同端口转发规则(每个规则都会将您带到不同的主机),但这仍然需要为您计划连接的每个主机设置一个端口转发规则。

考虑创建一个单独的服务器,然后通过 ssh 进入该服务器,再从该服务器 ssh 进入其他内部服务器。如果不通过路由器转发该服务器上的 tcp22,或将其设置为 DMZ 主机(所有不符合转发规则的未经请求的流量都将被定向到该主机),则无法实现此目的。如果采用这种方法,请务必将其锁定。

答案3

使用 来隐藏客户端 ssh 配置中的丑陋之处ProxyCommand

这需要一个端口转发的 ssh 来充当“代理”。您的一个家庭服务器的 ssh 客户端配置示例:

$ cat ~/.ssh/config
Host friendlyname1 friendlyname2  # optional
Hostname 10.10.10.10              # ip of home server
# works best if you configure ssh keys authentication to [email protected]
ProxyCommand ssh -W %h:%p [email protected]

现在ssh root@friendlyname1或就可以正常工作了。后台 ssh 客户端将首先连接到ssh [email protected][电子邮件保护]从那里到 10.10.10.10

答案4

你不能只设置一个家庭 DNS 服务器,然后创建一些 SRV 记录吗:

$ORIGIN home-pc.net.
@           SOA etc... etc...
...
_ssh._tcp   SRV 1 0 22 server1.home-pc.net.
            SRV 2 0 22 server2.home-pc.net.
            SRV 3 0 22 server3.home-pc.net.
            SRV 4 0 22 server4.home-pc.net.

或者我仍然不明白 SRV 记录是如何工作的?:P

相关内容