Server 与公共IP的服务器连接

Server 与公共IP的服务器连接,server,ip,firewall,Server,Ip,Firewall,我已经设置了一个简单的HTTP java服务器,在端口8000上本地运行。当请求到来时,它只打印一条消息helloworld。当我试图通过运行从浏览器ping它时,我会打印消息 我想从另一台非本地计算机上获得相同的结果。当我尝试使用我的公共IP时,让我们说http:/43.xxx.xxx.xxx:8000/即使从同一台机器上测试,我也会得到一个错误连接 我可能怀疑这与防火墙有关。因为我缺乏经验,谁能多给我一些指导 提前感谢您没有指定您的服务器/防火墙正在运行的主机操作系统,因此我将保留此通用 在

我已经设置了一个简单的HTTP java服务器,在端口8000上本地运行。当请求到来时,它只打印一条消息helloworld。当我试图通过运行从浏览器ping它时,我会打印消息

我想从另一台非本地计算机上获得相同的结果。当我尝试使用我的公共IP时,让我们说http:/43.xxx.xxx.xxx:8000/即使从同一台机器上测试,我也会得到一个错误连接

我可能怀疑这与防火墙有关。因为我缺乏经验,谁能多给我一些指导


提前感谢

您没有指定您的服务器/防火墙正在运行的主机操作系统,因此我将保留此通用

在不了解您的应用程序的情况下,当第一个SYN数据包出现时,服务器似乎正在发送重置RST数据包,表明该接口[您的外部]上的端口已关闭。如果您无法访问远程计算机进行测试,您可以从这里进行快速端口扫描。很可能TCP/8000不会开放

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

Source: Any
Destination: Your Public IP Address
Service: TCP/8000
Action: Allow
Logging: Full
话虽如此,您提到这是一台PC,所以如果您正在运行*nix,请查看iptables;如果您正在运行Windows on,请查看Windows防火墙添加防火墙规则。不幸的是,我刚刚加入,还不能提出问题/评论

如果您确实想知道发送的是什么数据包,请在外部接口上运行tcpdump,假设远程IP为1.2.3.4,家庭公共IP为4.5.6.7:

tcpdump-nn-vvv-e-s0-X-c100-i eth1主机1.2.3.4和主机 4.5.6.7和端口8000

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


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

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

此外,为了每次都能正常工作,并且不必在每次重新连接路由器时重新配置,因为我获得了一个新的本地IP,我已经按照以下指南为我的服务器创建了一个静态本地IP:


感谢您的回复。

服务器是在DSL路由器后面的LAN中,还是您直接连接到internet?如果是前者,您需要在DSL路由器上配置端口转发。不,它不在LAN上。服务器在直接连接到internet的pc中运行