listen_addresses를 실제로 목록으로 설정할 수 있습니까?


32

postgreSQL을 실행하는 IP 주소가 192.168.0.192 인 VM이 있습니다.

내가 지정하면

listen_addresses = '*'

그런 다음 192.168.0.191의 다른 VM과 localhost에서 연결할 수 있습니다.

그러나 postgreSQL 에이 두 주소를 사용하도록 지시하는 목록사용할 수없는 것 같습니다 . 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, 로컬 호스트'

로컬 시스템에 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 물론입니다. 서버에 두 개의 외부 네트워크 인터페이스가있는 경우 PostgreSQL에 그 중 하나만 바인딩하도록 지시 할 수 있으므로 다른 쪽의 Pg에 TCP 연결을 설정할 수도 없습니다. 주로 서로 다른 보안 도메인에 대한 여러 인터페이스가있는 시스템에 대한 추가 보안 수준입니다. VLAN, 가상 스위치 등과 함께 사용하면 매우 편리합니다. 가장 일반적인 용도는 localhost외부 네트워크 인터페이스에서 TCP / IP 연결이 가능하지 않고 루프백 주소 만 가능하도록 설정하는 것입니다.
Craig Ringer

1
@CraigRinger : 아주 좋은 답변입니다!
francs

@CraigRinger 당신은 당신의 답변에 그 의견을 추가해야합니다. 매우 유용한 정보입니다.
João Portela

1
예, 의견이 답변보다 낫습니다. 크레이그에 락!
Darth Egregious

2

내가 대신 사용하는 것으로 나타났습니다 localhost은 할 필요가 127.0.0.1당신이 아니라 다른 주소를 지정하는 경우.

따라서 외부 IP가 아닌 로컬 호스트뿐만 아니라 Docker 호스트 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.