节点服务器无法侦听 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 地址是什么,我们可以在我们的计算机上进行一些调试步骤。
可能是你的路由器只能转发一个端口给你网络上的一台电脑,转发的时候不能改变端口。如果是这样,那么您有以下选择:
把所有的东西都放在4444端口上。让你的服务器监听4444,在路由器的端口转发中指定4444,然后把4444放在URL 喜欢 http://thecastle.ninja:4444.
设置端口转发为80端口,把你的服务器放在80端口。把端口转发改成80端口。把你的服务器改成监听端口 80(如果您的服务器是 Unix,则需要提升权限才能直接侦听端口 80)。然后你应该可以使用 URL 像 http://thecastle.ninja.
为端口80设置端口转发,将你的服务器放在端口4444上并使用ip table设置将80路由到你服务器上的4444。 这允许您的服务器 运行 在特权较低的 4444 端口,但允许最终用户使用默认端口 80。我在 Linux Raspberry Pi这样配置。然后你应该可以使用 URL 像 http://thecastle.ninja
运行 服务器上的代理,它将端口 80 路由到端口 4444。 这可能超出您的需要,但是 nginx比较流行,可以在服务器上做端口转发
我正在尝试让我的 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 地址是什么,我们可以在我们的计算机上进行一些调试步骤。
可能是你的路由器只能转发一个端口给你网络上的一台电脑,转发的时候不能改变端口。如果是这样,那么您有以下选择:
把所有的东西都放在4444端口上。让你的服务器监听4444,在路由器的端口转发中指定4444,然后把4444放在URL 喜欢 http://thecastle.ninja:4444.
设置端口转发为80端口,把你的服务器放在80端口。把端口转发改成80端口。把你的服务器改成监听端口 80(如果您的服务器是 Unix,则需要提升权限才能直接侦听端口 80)。然后你应该可以使用 URL 像 http://thecastle.ninja.
为端口80设置端口转发,将你的服务器放在端口4444上并使用ip table设置将80路由到你服务器上的4444。 这允许您的服务器 运行 在特权较低的 4444 端口,但允许最终用户使用默认端口 80。我在 Linux Raspberry Pi这样配置。然后你应该可以使用 URL 像 http://thecastle.ninja
运行 服务器上的代理,它将端口 80 路由到端口 4444。 这可能超出您的需要,但是 nginx比较流行,可以在服务器上做端口转发