![为什么我的机器只有部分端口可以通过外部 IP 访问?](https://linux22.com/image/1588437/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E6%9C%BA%E5%99%A8%E5%8F%AA%E6%9C%89%E9%83%A8%E5%88%86%E7%AB%AF%E5%8F%A3%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E5%A4%96%E9%83%A8%20IP%20%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我正在尝试使用端口 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),在这种情况下,阻止不需要是故意的,因为路由器甚至不知道哪个服务器应该接收数据包,除非手动创建“端口转发”规则。)