【问题标题】:How can I connect to PostgreSQL database remotely from an other network?如何从其他网络远程连接到 PostgreSQL 数据库?
【发布时间】:2021-06-28 00:33:49
【问题描述】:

我正在创建一个使用 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)

有人可以帮助我/指导我他们是如何做到这一点的吗?我已经审查了所有答案,但如果我遗漏了什么,请为重复道歉。任何帮助表示赞赏。

【问题讨论】:

  • 我的解决方案对你有用吗?

标签: postgresql tcp database-connection


【解决方案1】:

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

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

  • 更改listen_addresses后没有重启PostgreSQL

你可以通过运行来验证

SHOW listen_addresses;
TABLE pg_hba_file_rules;

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

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

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

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

【讨论】:

    【解决方案2】:

    不要忘记将 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 建立一个警察来禁止这种滥用攻击。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 2022-01-26
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多