无法连接到 postgres 服务器

无法连接到 postgres 服务器

我遇到了一种奇怪的情况,我创建了第二个 postgres 服务器,它最终将成为我当前主服务器的从属服务器,无论如何,出于测试目的,我目前安装了 postgres,并测试来自其他主机的连接。

在我的 postgresql.conf 中我有一个简单的: 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

然后在我的 pg_hba.conf 中我有:

# allow all connections, testing only, comment in production
host    all             all             0.0.0.0/0               trust

该 postgres 服务器在 freebsd jail 中运行,因此有两个 IP 地址:

root@postgres ~# telnet 10.1.1.19 5432                     
Trying 10.1.1.19...
telnet: connect to address 10.1.1.19: Connection refused
telnet: Unable to connect to remote host


root@postgres ~# telnet 127.0.1.19 5432                                                                                                                                                                          1
Trying 127.0.1.19...
Connected to 127.0.1.19.
Escape character is '^]'.
^CConnection closed by foreign host.

root@postgres ~# ifconfig                                                                                                           
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO>
    ether 00:25:90:27:d8:24
    inet 10.1.1.19 netmask 0xffffffff broadcast 10.1.1.19 
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet 127.0.1.19 netmask 0xffffffff 
    groups: lo 

正如你所看到的,我可以在端口 5432 上,但只能使用环回地址,所以我尝试了一个简单的

root@postgres ~# psql -h 127.0.1.19                   
psql: FATAL:  no pg_hba.conf entry for host "127.0.1.19", user "root", database "root", SSL off

为什么这个基本连接会被阻止,因为我的 hba.conf 有 ALL,此外为什么我不能通过本地地址 10.1.1.19 连接?

netstat 显示以下输出:

Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       0      0 127.0.1.19.postgresql  *.*                    LISTEN

注意:我在另一台服务器上安装了另一个 jail,看似安装的和之前的一样,但运行正常,版本是 9.3.5,而这台新服务器(有问题)的版本是 9.6.3

编辑:当将配置更改为监听 0.0.0.0 时,我得到了一个 netstat 输出:

Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       0      0 127.0.1.19.postgresql  *.*                    LISTEN
tcp4       0      0 10.1.1.19.3100         *.*                    LISTEN

您可以看到 SSH 能够成功监听 LAN 地址 10.1.1.19(在端口 3100 上),因此这不可能是 jail 网络问题,而一定是与 postgres 相关的问题。

答案1

PostgreSQL手动的关于 listen_addresses 的说法如下:

listen_addresses (字符串)

指定服务器用于监听来自客户端应用程序的连接的 TCP/IP 地址。该值采用逗号分隔的主机名和/或数字 IP 地址列表的形式。特殊条目 * 对应于所有可用的 IP 接口。条目 0.0.0.0 允许监听所有 IPv4 地址,而 :: 允许监听所有 IPv6 地址。如果列表为空,则服务器根本不监听任何 IP 接口,在这种情况下只能使用 Unix 域套接字来连接它。默认值为 localhost,它只允许进行本地 TCP/IP“环回”连接。虽然客户端身份验证(第 20 章)允许对谁可以访问服务器进行细粒度控制,但 listen_addresses 控制哪些接口接受连接尝试,这有助于防止在不安全的网络接口上重复恶意连接请求。此参数只能在服务器启动时设置。

可能是 * 作为监听参数存在一些错误。尝试将其设置为 0.0.0.0,它会强制 postgres 监听所有 IP 地址,并可能解决您的问题。

答案2

在注意到所有这些没有明显原因的随机问题后,我认为是一个配置文件关闭了,我卸载了 postgres,清理了 /var/db/postgres 和 /usr/etc/postgres 文件夹,然后重新安装。

现在一切都按预期进行,因此我认为安装最初是悄悄失败的。

相关内容