Вопрос: Удаленный доступ к базе данных postgresql с FDW [решена]


У меня есть два сервера, размещенных в разных местах, с Postgresql.

Я хочу получить доступ к данным Postgresql с сервера 1 (CentOS 7), путем postgresql FDW с сервера 2 (Ubuntu 16).

Проблема в :

psql: could not connect to server: Connection refused Is the server running on host "xxx.xxx.xxx.xxx" and accepting TCP/IP connections on port 5432?

Я отредактировал файл postgresql.conf с помощью listenaddresses='*'  и оба файла pghba.conf с host all all 0.0.0.0/0 md5

все еще не работает, поэтому я подумал, что это может быть вызвано iptables. Я добавляю следующие правила:

iptables -A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 5432 -j ACCEPT

Все еще не работает. Нужен совет.

Спасибо вам !

(Извините за мой английский)


1
2018-02-07 11:55


Источник




Ответы:


С точки зрения сети, сервер 2 является клиентом, а сервер 1 - сервером. Операционная система клиентских отчетов В соединении отказано при попытке подключения к xxx.xxx.xxx.xxx:5432.

Как правило, эта ошибка связана не с брандмауэром, поскольку брандмауэры, как правило, отбрасывают пакеты, которые производят Время соединения истекло,

Это также не связано с ошибкой аутентификации на основе хоста postgres, поскольку они создают совершенно разные и конкретные сообщения об ошибках.

Несколько правдоподобных причин:

  • PostgreSQL действительно не прослушивает порт 5432 на сервере 1. Это можно подтвердить с помощью netstat -tlnp | grep 5432 выполняться как root. Обратите внимание, что параметр конфигурации listen_addresses, а не listenaddresses, Кроме того, после этого изменения необходимо перезапустить postgres. Вы можете посмотреть журналы журналов postgres, чтобы подтвердить, что они сработали, или проверить причину, почему это не так.

  • Конфигурация сети такова, что сервер 1 не может быть достигнут с сервера 2 с помощью xxx.xxx.xxx.xxx адрес. Пакеты маршрутизируются в другом месте, в сетевом интерфейсе, где 5432 как порт TCP не привязан к службе. Например, если сервер 1 виртуализирован, ожидается, что он не может быть достигнут непосредственно через адрес его хоста.


0
2018-02-08 12:25



PostgreSQL прослушивает порт 5432, он работает и, конечно же, перезагружен. (Да, я имел в виду listen_adresses и не listenadresses, К сожалению ...) Очевидно, что сервер 2 является клиентом с точки зрения сети. Спасибо ! Все, что было необходимо: чтобы клиент мог подключиться к серверу. Я добавил правило для iptables и работает: -A INPUT -p tcp -m tcp -s xxx.xxx.xxx.xxx --dport 5432 -j ACCEPT  Большое спасибо за вашу помощь ! - Splendens
@Splendens: приятно слышать, что он решен, но это правило iptable выглядит так, как будто оно ничего не должно менять по сравнению с INPUT -p tcp -m tcp --dport 5432 -j ACCEPT упомянутых в вопросе. - Daniel Vérité
Собственно, я добавил это правило (INPUT -p tcp -m tcp --dport 5432 -j ACCEPT) на сервере 2, сначала для удаленного подключения к pgadmin, и я забыл добавить правила для сервера 1. Ваш ответ заставил меня осознать мое очевидное упущение. - Splendens