如何从其他网络远程连接到PostgreSQL数据库



我正在创建一个使用PostgreSQL数据库服务器的应用程序,该服务器在Linux(20.1 Ubuntu(机器上运行。然而,当Linux机器与试图连接到它的客户端不在同一网络上时,我会得到错误:

Is the server running on host xxx.xxx.xx.xx and accepting TCP/IP connections on port xxxx?

我的防火墙中有一个端口例外,因为它都在同一个网络上工作,这对我来说意味着我的配置很好,我不明白我做错了什么。我已经试过这里的所有东西了。

我的pg_hba.conf看起来像这样:

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
host    all all ::/0        md5

我的postgresql.conf看起来是这样的:

# - Connection Settings -
listen_addresses = '*'      # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432             # (change requires restart)
max_connections = 100           # (change requires restart)

有人能帮我/指导我他们是怎么做到的吗?我已经仔细检查了所有的答案,但如果我遗漏了什么,请为重复道歉。感谢您的帮助。

您一定在某个地方犯了一个基本错误。根据你的报告,这可能是:

  • 更改pg_hba.conf后没有重新加载PostgreSQL

  • 更改listen_addresses后,您没有重新启动PostgreSQL

您可以通过运行来验证

SHOW listen_addresses;
TABLE pg_hba_file_rules;

并检查结果是否符合您的预期。

除此之外,还有一些常见的可能性:

  • 您连接到错误的服务器或使用错误的端口

  • 你没有得到所有的防火墙(可能在客户端和服务器上都有一个,也可能在两者之间(

不要忘记将5432添加到防火墙允许的端口中。

root@vmi543210:~# ufw status numbered
Status: active
To                         Action      From
--                         ------      ----
[ 1] 888/tcp                    ALLOW IN    Anywhere
[ 2] 20/tcp                     ALLOW IN    Anywhere
[ 3] 21/tcp                     ALLOW IN    Anywhere
[ 4] 22/tcp                     ALLOW IN    Anywhere
[ 5] 80/tcp                     ALLOW IN    Anywhere
[ 6] 39000:40000/tcp            ALLOW IN    Anywhere
[ 7] 8888/tcp                   ALLOW IN    Anywhere
[ 8] 8443/tcp                   ALLOW IN    Anywhere
[ 9] 8443/udp                   ALLOW IN    Anywhere
[10] 443/tcp                    ALLOW IN    Anywhere
[11] 40678/tcp                  ALLOW IN    Anywhere
[12] 888/tcp (v6)               ALLOW IN    Anywhere (v6)
[13] 20/tcp (v6)                ALLOW IN    Anywhere (v6)
[14] 21/tcp (v6)                ALLOW IN    Anywhere (v6)
[15] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[16] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[17] 39000:40000/tcp (v6)       ALLOW IN    Anywhere (v6)
[18] 8888/tcp (v6)              ALLOW IN    Anywhere (v6)
[19] 8443/tcp (v6)              ALLOW IN    Anywhere (v6)
[20] 8443/udp (v6)              ALLOW IN    Anywhere (v6)
[21] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
[22] 40678/tcp (v6)             ALLOW IN    Anywhere (v6)

如您所见,端口5432不见了
使用以下命令添加:

root@vmi543210:~# ufw allow 5432/tcp
Rule added
Rule added (v6)

现在ipv4和ipv6都允许使用:

...
[11] 40678/tcp                  ALLOW IN    Anywhere
[12] 5432/tcp                   ALLOW IN    Anywhere
[13] 888/tcp (v6)               ALLOW IN    Anywhere (v6)
[14] 20/tcp (v6)                ALLOW IN    Anywhere (v6)
[15] 21/tcp (v6)                ALLOW IN    Anywhere (v6)
[16] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[17] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
[18] 39000:40000/tcp (v6)       ALLOW IN    Anywhere (v6)
[19] 8888/tcp (v6)              ALLOW IN    Anywhere (v6)
[20] 8443/tcp (v6)              ALLOW IN    Anywhere (v6)
[21] 8443/udp (v6)              ALLOW IN    Anywhere (v6)
[22] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
[23] 40678/tcp (v6)             ALLOW IN    Anywhere (v6)
[24] 5432/tcp (v6)              ALLOW IN    Anywhere (v6)

PS:允许从外部连接到Postgresql端口,将使其暴露在残酷的攻击之下。使用Fail2Ban创建一个警察来禁止这种虐待性攻击。

经过一段空闲时间,我终于发现了问题,它与psql无关。我的网络有一个双路由器设置,我只打开了内部路由器的端口,而不是两个端口。感谢那些无论如何都试图提供帮助的人!

最新更新