仅在IPv6上监听弹性search

我已经在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 

服务启动并且ES工作(通过curlvalidation),但是它仅以默认configuration侦听IPv6。 netstat -na给我以下内容:

 tcp6 0 0 :::9200 :::* LISTEN tcp6 0 0 :::9300 :::* LISTEN 

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

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

 network.bind_host: 0.0.0.0 

不会改变任何东西。 把这个设置为服务器的外部IPv4地址确实在netstat -na输出中增加了两个条目,但是我需要ES访问我的本地networking,所以这是没有用的,netstat仍将这个注册为tcp6。

 tcp6 0 0 192.168.0.54:9200 :::* LISTEN tcp6 0 0 192.168.0.54:9300 :::* LISTEN 

设置:

 network.bind_host: _eth0:ipv4_ 

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

如何使ES绑定到IPv4? 我没有其他select,我的networking只有IPv4,我必须使用这个旧版本的ES,因为我正在运行一些需要这个版本的应用程序。

来自unix交stream。

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

但是正如你所想的那样,firewalld是开箱即用的。

创build这个文件到你的/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> 

更新权限

 chmod 0400 /etc/firewalld/services/elasticsearch.xml chown root: /etc/firewalld/services/elasticsearch.xml 

运行这些命令

 firewall-cmd --zone=public --add-service=elasticsearch --permanent firewall-cmd --reload 

这是ES常见的问题,因为需要设置两个networking设置: network.bind_hostnetwork.publish_host 。 正因为如此,ES开发者添加了这个捷径:

 network.host: 0.0.0.0 

在启用了IPv6但未configuration的情况下,我遇到了一些ES问题,因此您可能需要编辑sysctl.conf:

 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 

并执行sysctl -p