Сервер
Клиент
Я пытаюсь разместить базу данных моей компании на сервере, к которому сотрудники могут получить удаленный доступ. Среда сотрудников будет различаться в зависимости от версии 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]?
# 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.