为什么我的机器只有部分端口可以通过外部 IP 访问?

为什么我的机器只有部分端口可以通过外部 IP 访问?

我正在尝试使用端口 5601 实现远程服务。但不幸的是,我无法打开网站。

以下是我尝试找出它不起作用的原因:
我登录远程服务器并尝试“telnet localhost 5601”和“telnet 192.168.xx 5601”,它工作正常。
但“telnet 114.116.xx 5601”失败了。

我使用的远程服务器是云服务器,我可以使用 ssh 访问它。我还检查了一些带有端口(10450、10460……)的 docker 服务,结果是可以使用外部 ip 访问它们。所以问题可能出在 5601 服务上。然后我编写了一个小型 helloworld web 程序,监听主机为“0.0.0.0:2700”,以找出原因。结果发现也无法从外部 ip 访问它。

那么我的服务或网络是不是出了问题?如果有,我该如何解决?非常感谢。

操作系统:centos7
防火墙:关闭
网络:正常

tcp        0      0 0.0.0.0:2700            0.0.0.0:*               LISTEN      6438/python    
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      6121/./bin/../node/   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1403/sshd           
tcp6       0      0 :::443                  :::*                    LISTEN      18807/docker-pro    
tcp6       0      0 :::10460                :::*                    LISTEN      3966/docker-proxy-c    
tcp6       0      0 :::10430                :::*                    LISTEN      4552/docker-proxy-c

telnet 114.116.X.X 10450 
Trying 114.116.X.X...    
Connected to 114.116.X.X.
Escape character is '^]'.   

telnet 114.116.X.X 5601 
Trying 114.116.X.X...

不适用于 5601 和 2700。

答案1

IP 地址 (114.116.xx) 未显示在 ip addr 中,

那么它实际上并不是机器的 IP 地址——它属于某种 NAT 网关。这意味着它telnet 114.116.x.x不是简单的环回连接,而是实际上进入网络并由路由器返回,路由器可以拥有自己的防火墙并强制进行数据包过滤。(正如您最终发现的那样。)

(这可能还表明服务器位于 1:多 NAT 之后(如家庭 LAN),在这种情况下,阻止不需要是故意的,因为路由器甚至不知道哪个服务器应该接收数据包,除非手动创建“端口转发”规则。)

相关内容