# network.hostでの特定IPアドレスの指定

**URL:** <https://discuss.elastic.co/t/network-host-ip/88947>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [June 11, 2017, 11:35am UTC](https://discuss.elastic.co/t/network-host-ip/88947 "2017-06-11T11:35:23Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![miz21358](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/miz21358/32/16636_2.png) [@miz21358](https://discuss.elastic.co/u/miz21358)\
**Post date:** [June 11, 2017, 11:35am UTC](https://discuss.elastic.co/t/network-host-ip/88947/1 "2017-06-11T11:35:23Z")

</div>

いつもお世話になっております。

これまで同一ネットワーク内でelasticsearchへデータを投入し、kibanaを外部に公開する形で運用してきました。  
それが、一部データの投入を外部からも行える様にしたいとの要望があり、elasticsearch.ymlに該当IPv4アドレスを追加したのですが、エラーが発生してしまいます。  
色々試したのですが、同一ネットワーク内のIPアドレスを指定しても、同様のエラーとなることが分かりました。  
ポートが設定できない、というエラーの様なので、ポートの使用状況を確認いたしましたが、9000番台は特に使用しておりませんでした。  
どのような設定を行えば、特定IPアドレスからの接続を受けられるようになるのでしょうか。  
お手数をおかけして申し訳ありませんが、ご指導ご鞭撻のほどよろしくお願いいたします。

■elasticsearchバージョン： 5.2.2

■これまでのelasticsearch.yml

```auto
network.host: ["_site_", "_local_"]

```

■新しく設定したelasticsearch.yml

```auto
network.host: ["_site_", "_local_", "1.2.3.4"]

```

■新しく設定したelasticsearch.yml(同一ネットワーク内)

```auto
network.host: ["_site_", "_local_", "192.168.1.2"]

```

■エラーログ

```auto
[2017-06-11T20:11:23,321][INFO][o.e.n.Node] [TsLQexF] starting ...
[2017-06-11T20:11:23,925][ERROR][o.e.b.Bootstrap] [TsLQexF] Exception
org.elasticsearch.transport.BindTransportException: Failed to bind to [9300-9400]
        at org.elasticsearch.transport.TcpTransport.bindToPort(TcpTransport.java:729) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.transport.TcpTransport.bindServer(TcpTransport.java:694) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.transport.netty4.Netty4Transport.doStart(Netty4Transport.java:183) ~[?:?]
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.transport.TransportService.doStart(TransportService.java:202) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.node.Node.start(Node.java:589) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:261) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:335) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.Command.main(Command.java:88) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:89) [elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:82) [elasticsearch-5.2.2.jar:5.2.2]
Caused by: java.net.BindException: 要求アドレスに割り当てられません
        at sun.nio.ch.Net.bind0(Native Method) ~[?:?]
        at sun.nio.ch.Net.bind(Net.java:433) ~[?:?]
        at sun.nio.ch.Net.bind(Net.java:425) ~[?:?]
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[?:?]
        at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:127) ~[?:?]
        at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:554) ~[?:?]
        at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1258) ~[?:?]
        at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:502) ~[?:?]
        at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:487) ~[?:?]
        at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:980) ~[?:?]
        at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:250) ~[?:?]
        at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:363) ~[?:?]
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[?:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403) ~[?:?]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:445) ~[?:?]
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) ~[?:?]
        at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_131]
[2017-06-11T20:11:23,947][WARN][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: BindTransportException[Failed to bind to [9300-9400]]; nested: BindException[要求アドレスに割り当てられません];
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:89) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:82) ~[elasticsearch-5.2.2.jar:5.2.2]
Caused by: org.elasticsearch.transport.BindTransportException: Failed to bind to [9300-9400]
        at org.elasticsearch.transport.TcpTransport.bindToPort(TcpTransport.java:729) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.transport.TcpTransport.bindServer(TcpTransport.java:694) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.transport.netty4.Netty4Transport.doStart(Netty4Transport.java:183) ~[?:?]
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.transport.TransportService.doStart(TransportService.java:202) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.node.Node.start(Node.java:589) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:261) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:335) ~[elasticsearch-5.2.2.jar:5.2.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
        ... 6 more
Caused by: java.net.BindException: 要求アドレスに割り当てられません
        at sun.nio.ch.Net.bind0(Native Method) ~[?:?]
        at sun.nio.ch.Net.bind(Net.java:433) ~[?:?]
        at sun.nio.ch.Net.bind(Net.java:425) ~[?:?]

```

---

<div class="post-metadata">

**Author:** ![kudo](https://avatars.discourse-cdn.com/v4/letter/k/ac91a4/32.png) [@kudo](https://discuss.elastic.co/u/kudo)\
**Post date:** [June 11, 2017, 1:04pm UTC](https://discuss.elastic.co/t/network-host-ip/88947/2 "2017-06-11T13:04:00Z")

</div>

network.host に記載するのは、ネットワークインターフェースで、IPアドレスでは無かったと思います。

なので、下記コマンドで実行した結果で、miz21358 さんのネットワークインターフェース名を記載すれば良いと思います。

# ip addr | grep inet

この結果で、ens33 が表示されて、このネットワークインターフェース名で接続を受け付けたい場合、

network.host: _local_, _ens33_

と記載して、systemctl restart elasticsearch.service を実行してみては、いかがでしょうか。

的外れな回答でしたら、すいません。

---

<div class="post-metadata">

**Author:** ![st1t](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/st1t/32/9188_2.png) [@st1t](https://discuss.elastic.co/u/st1t)\
**Post date:** [June 11, 2017, 4:21pm UTC](https://discuss.elastic.co/t/network-host-ip/88947/3 "2017-06-11T16:21:18Z")

</div>

基本的には設定内容でエラーは起きない認識です。  
いくつか確認させてください。

- 外部というのはインターネットからデータを投入したいということでしょうか  
あるいは、LAN内の別NWセグメントからデータを投入したいということでしょうか
- 「■新しく設定したelasticsearch.yml」の1.2.3.4というのはグローバルIPでしょうか
- [_site_]を使っていれば192.168.1.2を設定する必要はない認識なのですが、何か理由はありますか
- 環境はAWSやGCPのような、いわゆるIaaSを使っていますか
- 「■新しく設定したelasticsearch.yml」と「■新しく設定したelasticsearch.yml(同一ネットワーク内)」というのはいくつかElasticsearchサーバが存在していて、問い合わせ元によって設定を変えているという認識で良いでしょうか

---

<div class="post-metadata">

**Author:** ![miz21358](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/miz21358/32/16636_2.png) [@miz21358](https://discuss.elastic.co/u/miz21358)\
**Post date:** [June 11, 2017, 11:15pm UTC](https://discuss.elastic.co/t/network-host-ip/88947/4 "2017-06-11T23:15:54Z")

</div>

kudo様

ご返答いただき、ありがとうございます。

elasticsearchのリファレンスには以下の様に記されています。

> network.host  
> The node will bind to this hostname or IP address and publish (advertise) this host to other nodes in the cluster. Accepts an IP address, hostname, a special value, or an array of any combination of these.

ですので、IPアドレスの指定ができると思っているのですが、間違っていますでしょうか。  
LAN外部からでもネットワークインターフェース名での指定が有効なのでしょうか。  
試してみます。

---

<div class="post-metadata">

**Author:** ![miz21358](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/miz21358/32/16636_2.png) [@miz21358](https://discuss.elastic.co/u/miz21358)\
**Post date:** [June 11, 2017, 11:39pm UTC](https://discuss.elastic.co/t/network-host-ip/88947/6 "2017-06-11T23:39:35Z")

</div>

st1t様

ご返答いただき、ありがとうございます。

> 外部というのはインターネットからデータを投入したいということでしょうか  
> あるいは、LAN内の別NWセグメントからデータを投入したいということでしょうか

説明が不足しており、申し訳ありません。  
少し状況は違うのですが、2つの会社にそれぞれのLANがあると思って下さい。  
相手の会社のLANに入る事がセキュリティ上できないので、緩衝地帯として、別LAN上に共有サーバを借りました。

```auto
LANα LANγ LANβ
├―――――――――――――――――┐ │
↓ ↓ ↓
PC_A PC_B PC_C
192.168.11.2 192．168．11．7 1.2.3.4
             ↑
            ELS、Kibanaが入っている

```

この際にPC\_CからPC\_Bにcurlなどでアクセスできるようにしたい、というのが本来の要望です。  
network.hostにPC\_CのIPアドレスを指定すれば可能かと思っていたのですが、もともとこれが無理だったのでしょうか。

> 「■新しく設定したelasticsearch.yml」の1.2.3.4というのはグローバルIPでしょうか

はい。グローバルIPアドレスです。

> [_site_]を使っていれば192.168.1.2を設定する必要はない認識なのですが、何か理由はありますか

同一ネットワークから特定IPアドレスを指定した場合にもエラーになったため、そのエラーになった設定を記載いたしました。  
PC\_AからPC\_Bには、siteの指定があるため、curlでの操作が可能なのですが、PC\_AのIPアドレスを直接指定すると、エラーになってしまいます。

> 環境はAWSやGCPのような、いわゆるIaaSを使っていますか

正しい返答かどうかは分かりませんが、PC\_Cは仮想デスクトップ環境を借りています。  
LANα、LANβは、各々の環境があります。

> 「■新しく設定したelasticsearch.yml」と「■新しく設定したelasticsearch.yml(同一ネットワーク内)」というのはいくつかElasticsearchサーバが存在していて、問い合わせ元によって設定を変えているという認識で良いでしょうか

あ、いえいえ。書き方が紛らわしくてすみません。  
両方とも同じelasticsearchサーバの設定ファイルです。  
PC\_Aからの接続時と、PC\_Cからの接続時で何か設定方法が違うのかと思い、両者を列挙したまでです。

---

<div class="post-metadata">

**Author:** ![st1t](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/st1t/32/9188_2.png) [@st1t](https://discuss.elastic.co/u/st1t)\
**Post date:** [June 12, 2017, 2:07am UTC](https://discuss.elastic.co/t/network-host-ip/88947/7 "2017-06-12T02:07:54Z")

</div>

> [@miz21358](#):
>
> この際にPC\_CからPC\_Bにcurlなどでアクセスできるようにしたい、というのが本来の要望です。  
> network.hostにPC\_CのIPアドレスを指定すれば可能かと思っていたのですが、もともとこれが無理だったのでしょうか。

なるほどです。

PC\_C → PC\_B(Elasticsearchサーバ)へアクセスさせるのであれば、  
PC\_Cから接続できるIPアドレスをPC\_Bに設定してあげる必要があります。  
恐らく社外の方とやりとりされるということであれば、専用線を引いてない限りはインターネット越しのアクセスとなるため、PC\_BにグローバルIPを持たせて、それをnetwork.hostに設定してあげればつながるかと思います。

イメージ的には以下のようになるかと思います。

# 前提条件

- PC\_CからPC\_Bへ接続可能なIPがPC\_Bに設定されていること

## PC\_Bのelasticsearch.yml 設定

```auto
network.host: ["_local_","_site_","PC_Bで設定されているグローバルIP"]

```

## その他

グローバルIPでPC\_Bを接続可能な環境にするのであれば、  
FWやiptablesを設定してアクセス元を制御＋リバースプロキシを置くなどして通信経路を暗号化しないと不正アクセスされると思ったほうが良いかと思います。  
今年の１月くらいにランサムウェアがかなり流行ってました。

- [Don't be ransacked: Securing your Elasticsearch cluster properly@Code972](http://code972.com/blog/2017/01/107-dont-be-ransacked-securing-your-elasticsearch-cluster-properly)
- [ランサム攻撃からデータを守るには@Elasticブログ](https://www.elastic.co/jp/blog/protecting-against-attacks-that-hold-your-data-for-ransom)

自己責任の範囲で上記方法で不正アクセスの対策はある程度出来ますが、  
Elastic以外の脆弱性対応や、設定のサポートは出来ないので過去に経験がなければ一度Elasticの営業さんへご相談されることをお勧めします。

１ヶ月程度の期間限定でアクセス許可をするならElastic Cloudを使うか、  
アクセス元のIP制御 + X-Packの試用ライセンスを使ってみるのが良いかと思います。

ライセンスに応じた機能一覧は以下を参考ください。  
[Elastic Subscriptions](https://www.elastic.co/jp/subscriptions)

---

<div class="post-metadata">

**Author:** ![miz21358](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/miz21358/32/16636_2.png) [@miz21358](https://discuss.elastic.co/u/miz21358)\
**Post date:** [June 13, 2017, 2:10pm UTC](https://discuss.elastic.co/t/network-host-ip/88947/8 "2017-06-13T14:10:31Z")

</div>

st1t様

ご回答ありがとうございます。  
外からアクセスする場合、PC\_BのグローバルIPアドレスの指定が必要なんですね。  
セキュリティ上のアドバイスもありがとうございます。  
とても不安に感じていたところでしたので、大変勉強になりました。

結局、紆余曲折の末、FWとリバースプロキシを通して、  
PC\_CからPC\_Bへのcurl接続ができるようになりました。  
この結果、elasticsearch.ymlの設定そのものにIPアドレスの指定は不要になりました。

とりあえず試用段階ですので、今後試用ライセンスの適用も視野に入れたいと思います。  
いったんこの議題は解決済みとさせていただきます。

この度は本当にありがとうございました。  
今後ともどうぞよろしくお願いいたします。  
失礼いたします。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 11, 2017, 2:10pm UTC](https://discuss.elastic.co/t/network-host-ip/88947/9 "2017-07-11T14:10:40Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
