首页 > 解决方案 > 如果 device2 不知道 device1 的私有 IP,有没有办法从同一 LAN 中的不同设备访问服务器?

问题描述

我正在提供一个应用程序,我希望可以从同一网络中的不同设备访问该应用程序。据我所见,我可以通过访问服务器的私有 IP 来做到这一点。但其他设备无法知道这一点。有没有办法设置类似内部域的东西?

标签: networkingserver

解决方案


出于此答案的目的,我将 HTTP 称为协议,它是迄今为止最广泛和最常用的协议。如果是别的东西,原理是一样的。

要考虑的第一个选项是“仅”使用 IP 地址。 https://192.168.0.3/记起来还不错;IPv6 更糟,更长。您可以通过电子邮件、聊天或以其他方式将您的用户链接到该地址,这样您就不必记住它。大多数家庭网络默认使用 DHCP,但通常将相同的地址分配给相同的 MAC 地址,除非设备更新次数过多导致 ip 池耗尽,因此地址在实践中很少更改。此外,大多数路由器都会留下不属于 DHCP 池的 IP 空间,您可以在服务器上对其进行静态配置,以排除任何 IP 更改。

IP地址法的魅力在于投资少。现在可以开始工作了。不利的一面是,如果您的 IP 地址发生更改,您的客户端现在无法访问当前配置的服务。输入 DNS。当客户端使用 DHCP 提供的 DNS 服务器来查询名称记录(例如stackoverflow.com.

家庭网络上的 DNS 服务器通常是由 ISP 提供的(或者希望,因为 ISP 通常不擅长提供良好的 DNS,你会指向 cloudflare(1.1.1.1)或 Google(8.8.8.8、8.8.4.4)或其他一些不错的公共 DNS 的 DNS 提供商。无论哪种方式,关键是,您当前配置的 DNS 服务器可能无法配置为提供您设计的记录。

这给您留下了 4 个选项:公共 DNS、私有 DNS 服务器、“借用”DNS 域或 /etc/hosts。

公共 DNS 可以提供私有 IP 地址,这可能是下一个最简单的解决方案。您必须付费注册域并购买 dns 托管(许多 dns 注册商免费提供 dns 服务)。然后,您可以拥有一个类似的名称myhouse.net并添加一个“A”(地址)记录,app.myhouse.net其值为您的本地 IP 地址。任何对该名称的公开查询都将查找您的内部 IP 地址,但这并不是什么大的披露(他们知道您在 RFC 1918 地址空间之一),他们可以像使用域名一样轻松地钓鱼和 xss ,所以对于家庭使用,我认为将私有 ipv4 地址发布到公共 DNS 基本上可以不受惩罚地完成。请注意,这些地址空间是不可路由的 - 它们无法从 Internet 访问,并且与许多其他人的冲突

私有 DNS。正如我们所讨论的,您的网络中可能没有 DNS 服务器,或者您不会问这个问题。您正在使用公共 DNS 服务器进行解析。因此,您无处定义域和记录,例如app.myhouse.local. 私有 DNS 的第一步是创建或获取可以通过 DHCP 提供给本地客户端的服务器,并且可以使用您的私有域记录进行配置。该服务器将被配置为还递归地执行公共查询,因此它可以用于网络上的所有 DNS 流量。这样,您就可以“发明”自己的“私人”领域,这不是公共知识的一部分。这显然是沉重的打击。您可能可以找到某种服务,让您可以在线执行此类操作,否则您需要安装 Bind 或等效软件。从好的方面来说,它是免费的,并且了解更多关于 DNS 的信息始终是一项不错的投资。

“借用” DNS - 我指的是https://www.noip.com/之类的服务,它允许您在域之一下创建主机记录。它们通常还包括软件和 API,您可以通过它们更新记录以指向您的动态 IP 地址。我不知道您是否可以在这些服务中存储私有 IP 地址。域名将是他们的一个,而不是您选择的一个(类似myhouse.noip.com)但它们通常很便宜或免费,并且它们确实解决了创建 DNS 记录的直接问题。同样,该记录将是公共dns 中的私人地址,可以从世界任何地方查询。

/etc/hosts:这个文件(有趣的是,它也存在于 windows 中)为本地系统提供了替代 DNS 的名称解析系统。它通常优先于 DNS(即首先检查它),并可用于在大多数主机上定义记录。我不知道你会如何在平板电脑或手机上做到这一点,而且这显然是你必须提前设置的——不太适合你的用例。

查看这些选项,我建议您首先考虑借用的 dns 域提供商之一。如果这看起来不错,那么你就完成了。如果您无法证明将您的私有 IP 地址放入公共 DNS 是合理的,那将迫使您走这条路。也许只使用IP地址就可以了。


推荐阅读