Назад | Перейти на главную страницу

Невозможно подключиться к серверу postgresql 9.6 из клиента 9.4

Технические характеристики

Сервер

Клиент

Проблема

Я пытаюсь разместить базу данных моей компании на сервере, к которому сотрудники могут получить удаленный доступ. Среда сотрудников будет различаться в зависимости от версии Linux и Windows. В моей тестовой среде используется клиент Linux. Пока мне не удалось успешно подключить клиента к серверу.

Что я пробовал

Я создал файл паролей postgresql, «.pgpass» с соответствующей информацией, введенной в формате host:port:database:username:password. Когда я бегуpsql -h host -p port -U username database от клиента я получаю ошибку тайм-аута. Однако когда я запускаю ту же команду на сервере, она запрашивает у меня пароль, и я подключаюсь к своей базе данных.

Вопросы

Что я здесь делаю не так? Мне не хватает шага или есть проблема с разными версиями postgresql? Проблема заключается в разнице между средами Linux и BSD?

--РЕДАКТИРОВАТЬ--

Точное сообщение об ошибке

psql: could not connect to server: Connection timed out
        Is the server running on host "host.domain.com" (###.###.###.###) and accepting
        TCP/IP connections on port [port]?

pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

# IPv6 local connections:
host    all             all             ::1/128                 trust

# IPv4 remote connections:
host    all             all             0.0.0.0/0               md5

Проблема закончилась тем, что проблема была связана с таблицами маршрутизации серверного маршрутизатора. Графический интерфейс показал все, как должно быть, а порт был открыт как открытый и указывающий на сервер postgresql.

Решение

Я подключился к маршрутизатору на стороне сервера через telnet, вручную настроил таблицы маршрутизации и принудительно перезапустил.
После подключения к маршрутизатору я выполнил следующие команды:

iptables -t nat -I PREROUTING -p tcp --dport <PORT> -j DNAT --to <SERVER_IP>:<SERVER_PORT>
iptables -I FORWARD -p tcp -d <SERVER_IP> --dport <SERVER_PORT> -j ACCEPT
reboot

Я признаю, что обычно reboot отменит действие двух предыдущих команд. Однако в моем случае это сработало. Перед запуском iptables команд, я попытался выполнить ряд reboot последовательности безрезультатно. Я не уверен, почему отображение с iptables не работал до тех пор, пока reboot. Не стесняйтесь комментировать.

В конце концов, проблема была не в postgresql или моей его настройке, а в таблицах маршрутизации на стороне сервера.

Надеюсь, этот ответ поможет кому-то, кто борется с подобными проблемами. Даже если настройка роутера ВЫГЛЯДИТ нормально, это не значит, что все в порядке.

Я ожидаю, что у вас есть брандмауэр, блокирующий входящие соединения на порту 5432.