Postgres "Connection timed out" 从 debian 和 ubuntu 客户端连接时,但从 Windows 连接时没问题

Postgres "Connection timed out" when connecting from debian and ubuntu clients, but fine from Windows

更新:

这似乎与 Docker 如何更改 iptables 并在禁用其 iptables 规则设置功能后仍保留其设置有关。可以通过修改 /etc/docker/daemon.json 并设置 { "iptables": true }

来解决问题

我刚刚全新安装了 Debian 11。在没有 docker 的情况下安装了 postgres,并且能够连接到我的服务器。我刚刚安装 docker 并尝试从 postgres 容器连接但无法连接到服务器。这个问题似乎与 docker.

周围的防火墙有关

我是 运行 debian 服务器上的 postgres 13.4,通过 docker,托管在 DigitalOcean 上。我已经设置了一个非常开放的配置,只是为了看看我是否可以从非本地的各种客户端连接到我的服务器。以下是我配置 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             0.0.0.0/0            md5
# IPv6 local connections:
#host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

postgresql.conf:

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'

我从客户端连接的方法是使用 postgres docker 容器,这样我就可以使用 psql 命令而无需在该客户端上安装 postgres。我试过 3 台不同的客户端机器。

Windows 来自家庭网络的 10 工作正常:

root@7eb2296a9cf6:/# psql -h 111.222.143.193 -p 5432 -U postgres
Password for user postgres:

来自家庭网络的 Debian 10 失败:

root@38161cc233c1:/# psql -h 111.222.143.193 -p 5432 -U postgres
psql: error: could not connect to server: Connection timed out
        Is the server running on host "111.222.143.193" and accepting
        TCP/IP connections on port 5432?

Ubuntu 来自 Linode 网络的 20.04 失败:

root@3706fd7cbdd4:/# psql -h 111.222.143.193 -p 5432 -U postgres
psql: error: could not connect to server: Connection timed out
        Is the server running on host "111.222.143.193" and accepting
        TCP/IP connections on port 5432?

这是 UFW 状态(为了隐私我已经更改了 IP)

Status: active

To                         Action      From
--                         ------      ----
787/tcp                    ALLOW       Anywhere
Anywhere                   ALLOW       93.551.148.352
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
5432                       ALLOW       Anywhere
787/tcp (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
5432 (v6)                  ALLOW       Anywhere (v6)

这似乎与 Docker 如何更改 iptables 并在禁用其 iptables 规则设置功能后仍保留其设置有关。可以通过设置 /etc/docker/daemon.json 和设置 { "iptables": true }

来解决问题

另一种方法是直接使用 iptables。