У меня странная ситуация, я создал второй сервер postgres, который в конечном итоге станет подчиненным для моего текущего мастера, в любом случае для целей тестирования я в настоящее время установил postgres и тестирует соединения с других хостов.
В моем postgresql.conf у меня есть хороший простой:
listen_addresses = '*'# what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432
Затем в моем pg_hba.conf у меня есть:
# allow all connections, testing only, comment in production
host all all 0.0.0.0/0 trust
Этот сервер postgres работает в тюрьме freebsd, поэтому имеет два IP-адреса:
root@postgres ~# telnet 10.1.1.19 5432
Trying 10.1.1.19...
telnet: connect to address 10.1.1.19: Connection refused
telnet: Unable to connect to remote host
root@postgres ~# telnet 127.0.1.19 5432 1
Trying 127.0.1.19...
Connected to 127.0.1.19.
Escape character is '^]'.
^CConnection closed by foreign host.
root@postgres ~# ifconfig
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO>
ether 00:25:90:27:d8:24
inet 10.1.1.19 netmask 0xffffffff broadcast 10.1.1.19
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet 127.0.1.19 netmask 0xffffffff
groups: lo
Как видите, я могу использовать порт 5432, но только с помощью адреса обратной связи, поэтому я пробую простой
root@postgres ~# psql -h 127.0.1.19
psql: FATAL: no pg_hba.conf entry for host "127.0.1.19", user "root", database "root", SSL off
Почему это базовое соединение блокируется, поскольку в моем hba.conf есть ВСЕ, и, кроме того, почему я не могу подключиться через локальный адрес 10.1.1.19?
netstat показывает следующий вывод:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 127.0.1.19.postgresql *.* LISTEN
ПРИМЕЧАНИЕ. У меня есть еще одна установка тюрьмы на другом сервере с, казалось бы, той же настройкой, которая работает, то есть на версии 9.3.5, а этот новый сервер (с проблемой) находится на 9.6.3
РЕДАКТИРОВАТЬ: при изменении конфигурации для прослушивания 0.0.0.0 я получаю вывод netstat:
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 127.0.1.19.postgresql *.* LISTEN
tcp4 0 0 10.1.1.19.3100 *.* LISTEN
Вы можете видеть, что SSH успешно может прослушивать LAN-адрес 10.1.1.19 (на порту 3100), поэтому это не может быть проблемой сети тюрьмы, это должно быть что-то связанное с postgres.
Заметив все эти случайные проблемы без видимой причины, я предположил, что был отключен один файл конфигурации, я удалил postgres, очистил папки / var / db / postgres и / usr / etc / postgres, а затем переустановил.
Теперь все работает, как ожидалось, поэтому я предполагаю, что установка изначально завершилась неудачно.
PostgreSQL руководство говорит о listen_addresses это:
listen_addresses (строка)
Задает TCP / IP-адрес (а), на котором сервер должен прослушивать соединения от клиентских приложений. Значение принимает форму списка имен хостов и / или числовых IP-адресов, разделенных запятыми. Специальная запись * соответствует всем доступным IP-интерфейсам. Запись 0.0.0.0 позволяет прослушивать все адреса IPv4, а :: позволяет прослушивать все адреса IPv6. Если список пуст, сервер вообще не прослушивает какой-либо IP-интерфейс, и в этом случае для подключения к нему можно использовать только сокеты домена Unix. Значение по умолчанию - localhost, что позволяет устанавливать только локальные «петлевые» соединения TCP / IP. В то время как аутентификация клиента (глава 20) позволяет детально контролировать, кто может получить доступ к серверу, listen_addresses контролирует, какие интерфейсы принимают попытки подключения, что может помочь предотвратить повторяющиеся злонамеренные запросы на подключение на небезопасных сетевых интерфейсах. Этот параметр можно установить только при запуске сервера.
Может быть, есть ошибка с параметром прослушивания *. Попробуйте установить его на 0.0.0.0, это заставит postgres прослушивать все IP-адреса и может решить вашу проблему.