节点服务器无法侦听 public IP

Node server fails to listen to public IP

我正在尝试让我的 Node.js 服务器侦听 public IP,以便我可以在与我的家庭网络不同的网络上访问它。

我已经购买了一个域并使用了一个 DNS 主机 - 现在我正在使用 No-IP 并且已经下载了他们的客户端以将我的 IP 推送到他们的服务器。

当我将无 IP 配置上的 IP 设置为我的本地 IP 时,我可以使用域名并访问我网络上另一台计算机上的服务器。但是,如果我将其更改为我的 public IP 并使用域,请求会挂起大约 10 秒然后失败。我已经设置了端口转发(我相信是正确的)并在我正在收听的端口(现在不是 80)上打开了入站/出站流量。我什至完全关闭了我的防火墙。

我尝试将 server.listen(4444) 更改为 server.listen(4444, '0.0.0.0'),正如我在网上看到的那样。但这是行不通的。

有人有想法吗?我觉得也许我的 ISP 以某种方式阻止了它?我对网络还很陌生,所以也许我遗漏了一些重要的东西?

谢谢!

server.listen(4444)应该没问题。只要您的服务器中没有多个活动网络连接,就不需要指定 IP 地址。来自路由器的端口转发(如果配置正确)会将来自 public IP 地址的请求定向到主机的实际本地 IP 地址。

请注意,为了可靠地进行端口转发,您必须为您的主机提供一个固定的私有 IP 地址(而不是 DHCP 分配的地址),这样 IP 地址就不会发生变化。然后,将端口转发配置到该固定 IP 地址。

然后,您需要进行一些网络调试。从您自己网络之外的计算机(例如互联网上的某些东西),您应该对 public DNS 名称执行几个命令:

ping yourserver.net
tracert yourserver.net

如果您的 DNS 条目不工作,ping 应该会立即告诉您它没有找到 yourserver.net。

如果 DNS 条目有效,但无法访问 IP 地址,那么 ping 会告诉您服务器无法访问。到那时,您就会知道从互联网连接到您的 public IP 地址时遇到了网络问题。

如果 ping 最初找到了您的服务器,但数据包没有正常传输,那么 ping 结果或 tracert 结果应该会让您知道下一步该去哪里。

如果 ping 和 tracert 正在查找您的 public IP 并且数据包正在传输 to/from 它,但您仍然无法使用浏览器连接到它,那么您要么没有IP 地址设置正确(所以你没有连接到正确的服务器)或者你的 node.js 服务器没有正确监听或者你没有在代表实际 ip/port 的浏览器中使用正确的 ip/port =66=]过程。如果您怀疑是这种情况,请备份并确保一切都在您自己的专用网络上正常运行,浏览器会尝试直接连接到本地 IP 地址和端口。当它正常工作时,您将知道 node.js 服务器正常工作,您可以返回使用 public IP。


仅供参考,如果您告诉我们 public DNS 名称和 public IP 地址是什么,我们可以在我们的计算机上进行一些调试步骤。


可能是你的路由器只能转发一个端口给你网络上的一台电脑,转发的时候不能改变端口。如果是这样,那么您有以下选择:

  1. 把所有的东西都放在4444端口上。让你的服务器监听4444,在路由器的端口转发中指定4444,然后把4444放在URL 喜欢 http://thecastle.ninja:4444.

  2. 设置端口转发为80端口,把你的服务器放在80端口。把端口转发改成80端口。把你的服务器改成监听端口 80(如果您的服务器是 Unix,则需要提升权限才能直接侦听端口 80)。然后你应该可以使用 URL 像 http://thecastle.ninja.

  3. 为端口80设置端口转发,将你的服务器放在端口4444上并使用ip table设置将80路由到你服务器上的4444。 这允许您的服务器 运行 在特权较低的 4444 端口,但允许最终用户使用默认端口 80。我在 Linux Raspberry Pi这样配置。然后你应该可以使用 URL 像 http://thecastle.ninja

  4. 运行 服务器上的代理,它将端口 80 路由到端口 4444。 这可能超出您的需要,但是 nginx比较流行,可以在服务器上做端口转发