listen_addressesを実際にリストに設定できますか?


32

postgreSQLを実行しているIPアドレス192.168.0.192のVMがあります。

指定する場合

listen_addresses = '*'

その後、192.168.0.191の別のVMおよびlocalhostから接続できます。

しかし、リスト使用して postgreSQLにこれら2つのアドレスを使用するように指示することはできません。listen_addressesをリストに変更した場合:

listen_addresses = '192.168.0.191, localhost'

192.168.0.191から接続できなくなりました。

stackexchangeのほとんどすべての例でlisten_addressesが「*」に設定されていることがわかります。これは、リストフォームが機能しないためですか?

回答:


45

はい、ローカルホスト上listen_addressesのアドレスのリストに設定して、リッスンするためにバインドできます。

あなたの例では:

listen_addresses = '192.168.0.191、localhost'

ローカルマシンにIP 192.168.0.192がある場合、リモートホスト192.168.0.191IP ではなく、そのIPを指定する必要があります。PostgreSQLは、リモートホストのIPアドレスにバインドできません。

「誰が接続を許可されているか」と言っているのではなく、「どのインターフェースでPostgreSQLが接続を受け入れるべきか」と言っているのです。「接続を許可されているユーザー」ビットが次にあり、で構成されpg_hba.confます。

だから:試してみてください'192.168.0.192, localhost'。または単に*、実際にはすべてのネットワークインターフェイスでリッスンする必要があるためです。


1
できます。リストと「*」の間に実際的な違いはありますか?
zabouti

10
@zaboutiもちろん。サーバーに(たとえば)外部ネットワークインターフェイスが2つある場合、PostgreSQLにそのうちの1つだけにバインドするように指示できるため、他のPgへのTCP接続を行うことすらできません。ほとんどの場合、異なるセキュリティドメインへの複数のインターフェイスを備えたシステムでは、余分なレベルのセキュリティです。VLAN、仮想スイッチなどと組み合わせて非常に便利です。最も一般的な使用法はlocalhost、外部ネットワークインターフェイスからTCP / IP接続ができないように設定することであり、ループバックアドレスのみです。
クレイグリンガー

1
@CraigRinger:非常に良い答えです!
フラン14

@CraigRingerの回答にこれらのコメントを追加する必要があります。これは非常に役立つ情報です。
ジョアンポルテラ14

1
ええ、コメントは答えよりも良いかもしれません。ロックオンクレイグ!
ダースEgregious

2

他のアドレスも指定する場合は、使用localhostする代わりに使用する必要があることがわかりました127.0.0.1

そのため、ローカルホストだけでなくDockerホストIPアドレスもリッスンし、外部IPはリッスンしない場合、これは機能しません(Dockerコンテナー内から接続が拒否されます)。

listen_addresses = '172.17.0.1, localhost'

しかし、これは:

listen_addresses = '172.17.0.1, 127.0.0.1'

0

エントリ0.0.0.0は、すべてのIPv4アドレスのリッスンを許可し、::すべてのIPv6アドレスのリッスンを許可します。リストが空の場合、サーバーはIPインターフェースをまったくリッスンしません。その場合、Unixドメインソケットのみを使用して接続できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.