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

时间:2021-04-01 01:21:22

标签: postgresql tcp database-connection

我正在创建一个使用 PostgreSQL 数据库服务器的应用程序,该服务器在 Linux(20.1 Ubuntu)机器上运行。但是,当 Linux 计算机与尝试连接到它的客户端不在同一网络上时,我收到错误消息:

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

我的防火墙中有一个端口例外,并且由于它都在同一网络上运行这一事实对我来说意味着我的配置很好,我不明白我出了什么问题。我已经尝试了所有here

我的 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)

有人可以帮助我/指导我他们是如何管理的吗?我已经审查了所有答案,但如果我错过了什么,请为重复道歉。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

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

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

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

您可以通过运行来验证

SHOW listen_addresses;
TABLE pg_hba_file_rules;

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

除此之外,还有通常的可能性:

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

  • 您没有安装所有防火墙(客户端和服务器上都可能有一个,也可能在两者之间)

答案 1 :(得分:0)

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

Template<Args...>

如您所见,缺少端口 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)

现在 ipv4 和 ipv6 都允许:

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

PS:允许从外部连接到 Postgresql 端口,将使其暴露于暴力攻击。 使用 Fail2Ban 创建警察以禁止此类滥用攻击。

答案 2 :(得分:0)

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

相关问题