服务器连接 public IP

Server Connection with public IP

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

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

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

提前致谢

您没有指定主机 OS 您的 server/firewall 是 运行ning 所以我将保留这个通用...

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

如果它实际上是关闭的,则您必须查看您的主机 OS 的防火墙 运行ning 并了解如何允许 TCP/8000你的主人。在主要的防火墙供应商中,您的规则类似于:

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

话虽这么说,你提到这是一台 PC,所以请查看 "iptables"(如果你是 运行ning *nix)或 Windows 防火墙(如果你是运行ning Windows) 关于添加防火墙规则(不幸的是我刚加入,还不能问 questions/comments)。

如果你真的想知道正在发送什么数据包,运行 在你的外部接口(假设是 eth1)上的 tcpdump(假设你的远程 IP 是 1.2.3.4 和你的家 public IP为4.5.6.7):

tcpdump -nn -vvv -e -s 0 -X -c 100 -i eth1 host 1.2.3.4 and host 4.5.6.7 and port 8000

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

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

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

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

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

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

感谢大家的回复。