假设我的本地网络上运行着一个 LAN 服务器。为了方便起见,我们假设它是运行在 Windows 10 PC 上的 Node.js,连接到一个名为“someNetwork”的网络。
现在这台 Windows 10 PC 在 someNetwork 上有一个固定的 IP 地址192.168.0.15
,并且 Node.js 服务器本身在端口8080
.K 上运行,因此我可以从另一台 PC(假设该 PC 已连接到 someNetwork)访问该服务器,只需在任何浏览器的地址栏中输入即可192.168.0.15:8080
……好的,到目前为止一切都很好。
现在的问题是:我希望可以通过某种自定义“域名”访问所述服务器。(我不认为“域名”是正确的术语)。因此,例如,我希望连接到某个网络的人能够通过输入类似myserver.net
或类似的内容来访问我的服务器,并让我的路由器自动将他们发送到那里,192.168.0.15:8080
而无需他们记住该特定号码。这可能吗?如果可以,我该怎么做?
我发现另一个问题与此问题非常相似,但这个问题是近 10 年前提出的,我怀疑那里的任何信息是否仍然可行。我希望这很适合这里!
答案1
将它们发送到该地址?是的,这称为 DNS,它确实可以与您在其他地方已有的相同类型的域名一起使用。
寄送至地址:港口?不,没有办法。您的服务器始终需要在端口 80 上侦听 HTTP – 使用反向代理将请求转发到 Node 或类似的东西。
我个人拥有许多互联网服务器 + 域名,我不是在问如何设置它们。这个问题专门询问 LAN 服务器和网络。
从本质上讲,DNS 在 LAN 中的工作方式与在互联网上的相同。您可以事实上,拿一个购买的域名,例如myserver.net
,将其指向192.168.0.15
,它就应该可以工作了。
(但如果没有,那不是因为理论错误,而是因为路由器中有“DNS 重绑定攻击预防”功能。不幸的是,恶意软件作者过去曾滥用过此功能。)
当家庭路由器提供本地主机名(例如“myserver.lan”或“myserver.home”)时,它们实际上是通过运行真正的 DNS 服务器(通常是“dnsmasq”)来实现的 - 它直接在路由器上托管本地区域(由 DHCP 租约填充),同时将所有其他请求代理到 ISP 的名称服务器。
要在 LAN 上发布虚构的域,您需要执行相同的操作。在您的网络上设置 DNS 服务器,告诉计算机将其用作唯一的 DNS 服务器(例如通过 DHCP),然后配置服务器以响应该域。
(某些 DNS 软件(例如 unbound 或 dnsmasq)不托管完整区域,而是支持单个名称的覆盖,例如local-data: myserver.net
在 Unbound 中。这取决于您要使用的名称以及它是否需要与“真实”DNS 名称共存。)
那里是一些机制允许计算机在不使用 DNS 服务器的情况下解析 LAN 中的主机名 - 主要是 mDNS 和 LLMNR - 但这些机制不适用于任何名称;它们只处理裸名称(例如“myserver”)和带有 .local 后缀的名称。任何其他名称(包括您常用的 TLD)都不会通过这些机制。