Elastic Search 只监听 IPv6 [CentOS]

mil*_*e85 6 elasticsearch centos7

我以这种方式在 CentOS 7.2 上安装了 Elastic Search 1.7.4:

wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.4.noarch.rpm
sudo rpm -ivh elasticsearch-1.7.4.noarch.rpm
Run Code Online (Sandbox Code Playgroud)

该服务已启动且 ES 工作(使用 curl 验证),但是,它仅使用默认配置侦听 IPv6。netstat -na 给了我以下信息:

tcp6       0      0 :::9200                 :::*                    LISTEN     
tcp6       0      0 :::9300                 :::*                    LISTEN 
Run Code Online (Sandbox Code Playgroud)

使用来自其他服务器的 nmap 我看到端口 9200 和 9300 被过滤,防火墙被禁用。

编辑 /etc/elasticsearch/elasticsearch.yml 和设置:

network.bind_host: 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

不会改变任何东西。将此设置为服务器的外部 IPv4 地址确实会在 netstat -na 输出中添加额外的两个条目,但我需要本地网络可以访问 ES,因此这是无用的,netstat 仍将其注册为 tcp6。

tcp6       0      0 192.168.0.54:9200       :::*                    LISTEN     
tcp6       0      0 192.168.0.54:9300       :::*                    LISTEN
Run Code Online (Sandbox Code Playgroud)

环境:

network.bind_host: _eth0:ipv4_
Run Code Online (Sandbox Code Playgroud)

使 ES 绑定到本地 IPv4,然后它当然只能从本地服务器使用。省略“ipv4”部分会导致 ES 绑定到 NIC 的 IPv6 地址。

如何让 ES 绑定到 IPv4?我别无选择,我的网络只有 IPv4,我必须使用这个旧版本的 ES,因为我正在运行一些需要这个版本的应用程序。

Jac*_*ans 6

来自unix交换。

发生这种情况是因为默认情况下,AF_INET6 套接字实际上适用于 IPv4 和 IPv6。请参阅第 3.7 节 - 与 RFC 3493 的 IPv4 节点的兼容性 - IPv6 的基本套接字接口扩展

但正如您所发现的,firewalld 是开箱即用的。

将此文件创建到您的 /etc/firewalld/services/elasticsearch.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Elasticsearch</short>
  <description>Elasticsearch is a distributed, open source search and analytics engine, designed for horizontal scalability, reliability, and easy management.</description>
  <port protocol="tcp" port="9300"/>
  <port protocol="tcp" port="9200"/>
</service>
Run Code Online (Sandbox Code Playgroud)

更新权限

chmod 0400 /etc/firewalld/services/elasticsearch.xml
chown root: /etc/firewalld/services/elasticsearch.xml
Run Code Online (Sandbox Code Playgroud)

运行这些命令

firewall-cmd --zone=public --add-service=elasticsearch --permanent
firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)