【问题标题】:Server Connection with public IP与公共 IP 的服务器连接
【发布时间】:2017-10-07 17:28:22
【问题描述】:

我已经设置了一个简单的 HTTP java 服务器,在 8000 端口上本地运行。它只是在请求到来时打印一条消息“Hello world”。当我尝试通过运行 http://localhost:8000/test 从浏览器 ping 它时,我会打印出我的消息。

我想从另一台非本地计算机上获得相同的结果。当我尝试使用我的公共 IP 让我们说 http:/43.xxx.xxx.xxx:8000/test (即使来自同一台机器)我得到一个 ERR_CONNECTION_REFUSED 。

我可能怀疑这与防火墙有关。由于我缺乏经验,任何人都可以指导我更多吗?

提前致谢

【问题讨论】:

  • 服务器是否位于 DSL 路由器后面的 LAN 中,或者您是否直接连接到 Internet?如果是前者,您需要在 DSL 路由器上配置端口转发。
  • 不,它不在局域网中。服务器在我直接连接到互联网的电脑上运行

标签: server ip firewall


【解决方案1】:

你没有指定你的服务器/防火墙正在运行什么主机操作系统,所以我会保持这个通用...

在不知道您的应用程序的情况下,当第一个 SYN 数据包显示表明端口(在该接口 [您的外部] 上)已关闭时,服务器似乎正在发送重置(RST 数据包)。如果您无权访问远程计算机进行测试,您可以从此处 (https://mxtoolbox.com/PortScan.aspx) 进行快速端口扫描。奇怪的是,TCP/8000 不会打开。

如果它实际上是关闭的,您将不得不查看您的主机操作系统正在运行的防火墙,并了解如何允许 TCP/8000 访问您的主机。在主要的防火墙供应商中,您的规则类似于:

Source: Any
Destination: Your Public IP Address
Service: TCP/8000
Action: Allow
Logging: Full

话虽如此,您提到这是一台 PC,因此请查看“iptables”(如果您正在运行 *nix)或 Windows 防火墙(如果您正在运行 Windows)添加防火墙规则(不幸的是,我刚刚加入并还不能问问题/cmets)。

如果您真的想知道正在发送什么数据包,请在您的外部接口(比如说 eth1)上运行一个 tcpdump(假设您的远程 IP 是 1.2.3.4,而您的家庭公共 IP 是 4.5.6.7):

tcpdump -nn -vvv -e -s 0 -X -c 100 -i eth1 主机 1.2.3.4 和主机 4.5.6.7和8000端口

在这里,您正在寻找成功的 TCP 协商的 SYN/SYN-ACK/ACK 或 SYN/RST,如果有防火墙拒绝(不丢弃)到端口的 TCP 流。

在主机操作系统防火墙上打开端口后,查看应用程序以确保其配置正确。如果这是一个标准的网络服务器,您可以查看“允许来自”指令的配置文件,以确保每个人都可以访问该站点。如果这是您创建的自定义应用程序,您必须自己检查。

【讨论】:

    【解决方案2】:

    我终于解决了我的问题。我需要在我的路由器中打开一个转发端口,将我的本地 IP 地址映射到公众。我的路由器是 TP Link,所以我这样做了:

    http://www.tp-link.com/us/faq-72.html

    另外,为了让它每次都能正常工作,并且每次我重新连接到路由器时都不必重新配置它(因为我获得了一个新的本地 IP),我按照本指南为我的服务器创建了一个静态本地 IP:

    http://www.tp-link.com/us/faq-182.html

    感谢所有回复。

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2012-01-12
      • 2014-08-10
      • 1970-01-01
      • 2020-07-24
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      相关资源
      最近更新 更多