PostgreSQL远程连接调试

PostgreSQL远程连接调试

我在从在线源连接到 PostgreSQL 数据库时遇到问题。

PostgreSQL 似乎设置得很好,它在默认端口 5432 上运行,并且 postgresql.conf 有以下行

listen_addresses = '*'

pg_hba.conf 有以下内容

host    dbname    usname    all    md5

我可以在 pgadmin 中使用以下凭据从另一台计算机连接到 PostgreSQL 数据库

Name              local
Host              192.xx.xx.xx
Port              5432
Maintenance DB    dbname
Username          usname
Password          psword

使用这些我可以完美连接它似乎工作正常。

然后我在ADSL路由器上转发端口192.xx.xx.xx:5432,并使用公共IP地址197.xx.xx.xx(对互联网IP可见)进行检查 http://www.canyouseeme.org/ 我可以看到端口转发正常。

我已经禁用了 SELinux 并暂时禁用了防火墙。

但是,当我尝试使用连接时

Name              online
Host              197.xx.xx.xx
Port              5432
Maintenance DB    dbname
Username          usname
Password          psword

我收到服务器不监听错误消息

could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "197.xx.xx.xx" and accepting TCP/IP connections on port 5432?

为什么是这样?我是否需要添加额外的步骤来使其通过端口转发接受连接?

答案1

allhost在 中某行的 CIDR 字段中无效pg_hba.conf

来自默认文件本身的注释pg_hba.conf

# 主机数据库用户 CIDR 地址方法 [选项]

CIDR-ADDRESS 指定记录匹配的主机集。它由 IP 地址和 CIDR 掩码组成,CIDR 掩码是一个整数(介于 0 和 32 (IPv4) 或 128 (IPv6) 之间),指定掩码中有效位数。或者,您可以在单独的列中写入 IP 地址和网络掩码来指定主机集。

试试这个:

host    dbname    usname      197.xx.xx.xx/32  md5

这将允许仅从远程主机 197.xx.xx.xx 从 usname 连接到 dbname

如果要允许整个 197.xx.xx /24 子网,请使用:

host    dbname    usname      197.xx.xx.0/24  md5

相关内容