Чи можна насправді liste_addresses встановити до списку?


32

У мене VM з IP-адресою 192.168.0.192 працює з postgreSQL.

Якщо я вкажу

listen_addresses = '*'

то я можу підключитися з іншого VM за адресою 192.168.0.191 та від localhost.

Але я не можу використовувати список, щоб вказати postgreSQL використовувати ці дві адреси. Якщо я зміню адреси прослуховування до списку:

listen_addresses = '192.168.0.191, localhost'

то я більше не можу підключитися з 192.168.0.191.

Я зауважую, що майже всі приклади на stackexchange встановлюють_адрес_адреса на '*'. Це тому, що форма списку не працює?

Відповіді:


45

Так, listen_addressesможна встановити список адрес на локальному хості, який прив'язується до прослуховування.

У вашому прикладі:

liste_addresses = '192.168.0.191, localhost'

Якщо локальна машина має IP 192.168.0.192, вам слід вказати цей IP, а не 192.168.0.191IP віддаленого хоста . PostgreSQL не може прив’язатись до IP-адреси віддаленого хоста.

Ви не говорите "кому дозволено з'єднання", ви говорите "на яких інтерфейсах PostgreSQL повинен приймати з'єднання". Наступним є біт "кому дозволено з'єднатись" і налаштований у pg_hba.conf.

Отже: Спробуйте '192.168.0.192, localhost'. Або просто *, оскільки ви, мабуть, насправді хочете слухати всі мережеві інтерфейси.


1
Це працює. Чи є якась практична різниця між списком та "*"?
zabouti

10
@zabouti Звичайно. Якщо ваш сервер має (скажімо) два зовнішніх мережевих інтерфейси, ви можете сказати PostgreSQL прив'язуватися лише до одного з них, тому навіть неможливо встановити TCP-з'єднання з Pg з іншого. Це здебільшого додатковий рівень безпеки для системи, яка має кілька інтерфейсів для різних областей безпеки. Досить зручно в поєднанні з VLAN, віртуальними комутаторами і т. Д. Найпоширенішим використанням є налаштування його localhostтаким чином, щоб з'єднання TCP / IP були неможливі з будь-якого зовнішнього мережевого інтерфейсу, лише з адресою петлі.
Крейг Рінгер

1
@CraigRinger: дуже хороша відповідь!
франки

@CraigRinger, ви повинні додати ці коментарі до своєї відповіді. Це дуже корисна інформація.
Жоао Портела

1
Так, я думаю, що коментар може бути навіть кращим, ніж відповідь. Рок на Крейга!
Дарт Егрегійний

2

Я виявив, що замість того, щоб використовувати localhostйого, потрібно, 127.0.0.1якщо ви також вказуєте будь-які інші адреси.

Тож у моєму випадку прослуховування IP-адреси хоста Docker, а також localhost, але не зовнішнього 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-домену.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.