Я делал это несколько раз без проблем, но по какой-то причине я не могу подключиться к удаленному серверу PostgreSQL.
Мой сервер - Debian 10 с установленным PostgreSQL 11 из репозиториев и добавленными расширениями TimescaleDB. В остальном ничего особенного.
/etc/postgresql/11/main/postgresql.conf
содержит строку listen_addresses='*'
, и /etc/postgresql/11/main/pg_hba.conf
содержит
local all postgres peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
host all all 0.0.0.0/0 md5
Я оставил все широко открытым, чтобы иметь возможность подключиться, и могу проверить, работает ли локальный вход, используя psql -U postgres -h localhost
но когда я пробую то же самое удаленно, я получаю
psql: could not connect to server: No route to host
Is the server running on host "db.example.com" (10.0.0.150) and accepting
TCP/IP connections on port 5432?
Сервер слушает то, что я вижу, используя ss
$ ss -anp | grep 5432
u_str LISTEN 0 128 /var/run/postgresql/.s.PGSQL.5432 158425 * 0
tcp LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
tcp LISTEN 0 128 [::]:5432 [::]:*
и я временно отключил брандмауэр для устранения неполадок. Другие службы (SSH) работают должным образом, поэтому я действительно не уверен, почему это не так. Единственное, в чем я не уверен, это то, что этот хост использует IP, который ранее был назначен тому, которого больше не существует, но DNS сообщает один и тот же IP-адрес для двух разных имен. Я бы подумал, что использование IP-адреса напрямую с psql
проигнорирует это, но я получаю ту же ошибку.
Наконец я побежал tcpdump
на сервере и видит запрос на подключение
$ sudo tcpdump -i ens192 -vvvnxXS port 5432
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
09:27:46.118205 IP (tos 0x0, ttl 64, id 18195, offset 0, flags [DF], proto TCP (6), length 60)
10.0.2.3.59478 > 10.0.0.150.5432: Flags [S], cksum 0xea81 (correct), seq 826121699, win 64240, options [mss 1460,sackOK,TS val 2129657941 ecr 0,nop,wscale 7], length 0
0x0000: 4500 003c 4713 4000 4006 dd10 0a00 0203 E..<G.@.@.......
0x0010: 0a00 0096 e856 1538 313d 9de3 0000 0000 .....V.81=......
0x0020: a002 faf0 ea81 0000 0204 05b4 0402 080a ................
0x0030: 7ef0 0055 0000 0000 0103 0307 ~..U........
но клиентская сторона ничего не видит.
Мне интересно, является ли это проблемой маршрутизации где-то посередине между ними, но я действительно не понимаю, как это сделать, потому что запуск mtr
против IP-адреса дает результат с одним прыжком. Кроме того, я попытался подключиться с виртуальной машины, которая находится на том же наборе виртуальных хостов, которые используют коммутатор.
Эта проблема действительно была связана с маршрутизацией и была вызвана повторным использованием резервирования DNS. Когда мой ИТ-отдел изменил IP-адрес сервера, он начал работать.