节点服务器无法侦听公共IP

时间:2015-03-26 04:07:00

标签: node.js networking dns ip port

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

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

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

我尝试将server.listen(4444)更改为server.listen(4444, '0.0.0.0'),因为我已在网络上看到过。但这不起作用。

有人有想法吗?我觉得我的ISP可能会以某种方式阻止它?我对网络很陌生,所以也许我错过了一些关键的东西?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

请注意,要使端口转发工作可靠,您必须为主机提供固定的专用IP地址(而不是DHCP分配的地址),因此IP地址不会发生变化。然后,将端口转发配置为该固定IP地址。

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

ping yourserver.net
tracert yourserver.net

如果您的DNS条目无效,ping会立即告诉您它没有找到yourserver.net。

如果DNS条目正常,但无法访问IP地址,则ping将告诉您服务器无法访问。此时,您将知道从网络连接到公共IP地址时存在网络问题。

如果ping最初找到你的服务器,但数据包没有正常流动,那么ping结果或tracert结果应该可以让你知道下一步的位置。

如果ping和tracert正在查找您的公共IP并且数据包正在流入/流出,但您仍然无法通过浏览器连接到它,那么您要么没有正确设置IP地址(所以你没有连接到正确的服务器)或者你的node.js服务器没有正确监听,或者你没有在浏览器中使用代表实际node.js的正确ip / port处理。如果您怀疑是这种情况,那么请备份并确保您的所有内容完全在您自己的专用网络上工作,浏览器会尝试直接连接到本地IP地址和端口。当它工作时,您将知道node.js服务器正常工作,您可以回到处理公共IP。


仅供参考,如果您告诉我们公共DNS名称和公共IP地址是什么,我们可以从我们的计算机上执行此调试的几个步骤。


可能是您的路由器只能将端口转发到网络上的计算机,但转发时不能更改端口。如果是这样,那么您有以下选择:

  1. 将所有内容放在端口4444上。让您的服务器收听4444,在路由器的端口转发中指定4444,然后将4444放入URL http://thecastle.ninja:4444。< / p>

  2. 设置端口80的端口转发,将服务器置于端口80上。将端口转发更改为端口80.将服务器更改为侦听端口80(如果您的服务器是在Unix中,您需要提升权限才能直接侦听端口80)。然后,您应该可以使用http://thecastle.ninja等网址。

  3. 设置端口80的端口转发,将服务器置于端口4444上,并使用ip表设置在服务器上路由80到4444. 这允许您的服务器在较少特权的4444端口,但让最终用户使用默认端口80.我在这样配置的Linux Raspberry Pi上有一个node.js服务器。然后,您应该可以使用http://thecastle.ninja

  4. 这样的网址
  5. 在您的服务器上运行代理,将端口80路由到端口4444. 这可能超出您的需要,但nginx是一个受欢迎的代理,它可以执行服务器上的端口转发。