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

我试图让我的Node.js服务器听一个公共的IP,以便我可以在不同的networking上访问它,而不是我的家庭networking。

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

当我将无IPconfiguration的IP设置为本地IP时,我可以使用域名,并在我的networking上的另一台计算机上打我的服务器。 但是,如果我改变这个我的公共IP和使用域,请求挂起约10秒,然后失败。 我已经设置了端口转发(我相信是正确的),并在我正在监听的端口(现在不是80)上打开入站/出站stream量。 我甚至完全拉了我的防火墙。

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

任何人有想法吗? 我觉得也许我的ISP在阻止它? 我对networking相当陌生,所以也许我错过了一些关键的东西?

谢谢!

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

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

然后,你需要做一些networkingdebugging。 从你自己的networking之外的计算机(例如互联网上的东西),你应该对你的公共DNS名称做一些命令:

 ping yourserver.net tracert yourserver.net 

如果您的DNS条目不起作用,ping应立即告诉您没有findyourserver.net。

如果DNS条目正在工作,但无法到达IP地址,则ping会告诉您服务器无法访问。 在这一点上,你会知道你有一个networking连接问题,从互联网连接到你的公共IP地址。

如果ping最初发现你的服务器,但是数据包没有正常stream动,那么ping结果或者tracert结果都会给你一个想法。

如果ping和tracert发现你的公网IP和数据包正在stream入/stream出,但你仍然无法通过浏览器连接到它,那么你要么没有正确设置IP地址(所以你没有连接到正确的服务器),或者你的node.js服务器没有正确地侦听,或者你没有在浏览器中使用正确的ip / port来表示实际的node.js进程。 如果您怀疑这种情况,请备份并确保您的所有内容都完全在浏览器试图直接连接到本地IP地址和端口的私有networking上。 当这个工作的时候,你会知道node.js服务器正在正常工作,你可以回到工作在公共IP上。


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


可能是您的路由器只能将端口转发到networking上的计算机,而不能在转发时更改端口。 如果是这样的话,那么你有这些select:

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

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

  3. 为端口80设置端口转发,将服务器放在端口4444上,并使用IP表设置在服务器上路由80到4444。 这允许您的服务器运行在权限较低的4444端口,但允许最终用户使用默认端口80.我在这种configuration的Linux Raspberry Pi上有一个node.js服务器。 你应该可以使用像http://thecastle.ninja这样的URL

  4. 在你的服务器上运行一个代理,将80端口路由到端口4444.这可能比你需要的多,但是nginx是一个stream行的代理,它可以在服务器上进行端口转发。