为什么我只能从本地主机访问端口?

为什么我只能从本地主机访问端口?

我正在尝试在我的 mapR 发行的 redhat 虚拟机上设置 elasticsearch。它预装了 mapR 生态系统。我通过 yum 安装了 elasticsearch。

我能够从虚拟机内部听到它:

[root@maprdemo elasticsearch]# curl -XGET 'localhost:8080/?pretty'
{
  "name" : "QYCiQJi",
  "cluster_name" : "sdc-search",
  "cluster_uuid" : "bMSLPA3uR5WKbtwKP0Sl7g",
  "version" : {
    "number" : "5.0.1",
    "build_hash" : "080bb47",
    "build_date" : "2016-11-11T22:08:49.812Z",
    "build_snapshot" : false,
    "lucene_version" : "6.2.1"
  },
  "tagline" : "You Know, for Search"
}

...但不能从机器外部访问。但我可以从虚拟机外部访问它正在广播的其他端口,例如 HUE UI,因此我认为存在一些防火墙问题。

我没有定义 iptables 规则:

[root@maprdemo elasticsearch]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

我在调试时注意到了一些事情:

[root@maprdemo elasticsearch]# netstat -anp | grep 8080
tcp        0      0 :::18080                    :::*                        LISTEN      16987/java
tcp        0      0 ::ffff:127.0.0.1:8080       :::*                        LISTEN      31852/java

//A Port im able to access from outside the machine fine
[root@maprdemo elasticsearch]# netstat -anp | grep 8443
tcp        0      0 :::8443                     :::*                        LISTEN      13569/java

检查 netstat 时,我可以看到机器外部的端口 (8443) 有点不同。

我只是不确定在哪里可以调试。如果有人能指出解决这个问题的方向,那就太好了。我只是一名开发人员,我对网络的了解有限。

答案1

您只能看到使用命令的默认 iptables 过滤器,因此仍有可能存在问题。请查看此线程中针对 iptables 选项的措辞非常恰当的回复(快速尝试“iptables -S”,我相信它应该会向您展示所有内容):https://unix.stackexchange.com/questions/205867/viewing-all-iptables-rules

如果没有 iptables,selinux 有时会引起麻烦,因此在测试时禁用它可能是一个选项(“setenforce 0”)。您可以使用“sestatus”验证当前状态。要再次启用,请使用“setenforce 1”,否则重新启动将重新启用。

最后但并非最不重要的一点是,当我输入这些内容时,我意识到这可能是答案,验证服务实际监听的 IP。我不熟悉该应用程序,但一般来说,您实际上可以让服务只在给定端口上监听本地连接,因此这可能只是您需要的配置更改。事实上,在重新阅读您的帖子时,您发布的端口 8080 的 netstat 输出中存在环回地址 (127.0.0.1),这让我怀疑这是否是正在发生的事情。

相关内容