Czy naprawdę można ustawić adres_słuchawek na listę?

32

Mam maszynę wirtualną z adresem IP 192.168.0.192 z uruchomionym postgreSQL.

Jeśli podam

listen_addresses = '*'

następnie mogę połączyć się z inną maszyną wirtualną pod adresem 192.168.0.191 i z hosta lokalnego.

Ale nie mogę użyć listy, aby powiedzieć postgreSQLowi, aby używał tych dwóch adresów. Jeśli zmienię Listen_addires na listę:

listen_addresses = '192.168.0.191, localhost'

wtedy nie mogę już połączyć się z 192.168.0.191.

Zauważam, że prawie wszystkie przykłady na stackexchange ustawiają listen_addresses na '*'. Czy to dlatego, że formularz listy nie działa?

zabouti
źródło

Odpowiedzi:

45

Tak, listen_addressesmożna ustawić listę adresów na hoście lokalnym, z którą można się połączyć w celu nasłuchiwania.

W twoim przykładzie:

listen_addresses = '192.168.0.191, localhost'

Jeśli komputer lokalny ma adres IP 192.168.0.192, należy podać ten adres IP, a nie 192.168.0.191adres IP zdalnego hosta . PostgreSQL nie może powiązać adresu IP zdalnego hosta.

Nie mówisz „kto może się łączyć”, mówisz „na których interfejsach PostgreSQL powinien akceptować połączenia”. Bit „kto może się łączyć” jest następny i jest skonfigurowany w pg_hba.conf.

Więc: spróbuj '192.168.0.192, localhost'. Lub po prostu *, ponieważ prawdopodobnie chcesz słuchać na wszystkich interfejsach sieciowych.

Craig Ringer
źródło
1
To działa. Czy jest jakaś praktyczna różnica między listą a „*”?
zabouti
10
@zabouti Sure. Jeśli twój serwer ma (powiedzmy) dwa zewnętrzne interfejsy sieciowe, możesz powiedzieć PostgreSQL, aby powiązał tylko jeden z nich, więc nie jest nawet możliwe nawiązanie połączenia TCP z Pg na drugim. Jest to głównie dodatkowy poziom bezpieczeństwa dla systemu, który ma wiele interfejsów do różnych domen bezpieczeństwa. Całkiem przydatne w połączeniu z sieciami VLAN, przełącznikami wirtualnymi itp. Najczęstszym zastosowaniem jest ustawienie go w localhosttaki sposób, aby połączenia TCP / IP nie były możliwe z żadnego zewnętrznego interfejsu sieciowego, tylko adres pętli zwrotnej.
Craig Ringer,
1
@CraigRinger: bardzo dobra odpowiedź!
franki
@CraigRinger powinieneś dodać te komentarze do swojej odpowiedzi. To bardzo przydatna informacja.
João Portela,
1
Tak, myślę, że komentarz może być nawet lepszy niż odpowiedź. Rock on Craig!
Darth Egregious,
2

Przekonałem się, że zamiast localhostgo używać 127.0.0.1, musisz podać inne adresy.

Więc w moim przypadku nasłuchiwania na adresie IP hosta Dockera, a także na localhost, ale nie na zewnętrznym IP, to nie działa (otrzymuję odmowę połączenia z moich kontenerów Docker):

listen_addresses = '172.17.0.1, localhost'

Ale to powoduje:

listen_addresses = '172.17.0.1, 127.0.0.1'
VirtualWolf
źródło
0

Wpis 0.0.0.0 umożliwia nasłuchiwanie dla wszystkich adresów IPv4 i :: umożliwia nasłuchiwanie dla wszystkich adresów IPv6. Jeśli lista jest pusta, serwer w ogóle nie nasłuchuje na żadnym interfejsie IP, w którym to przypadku do połączenia z nim można użyć tylko gniazd w domenie uniksowej.

Walid Redwan
źródło