【发布时间】:2018-03-27 21:03:09
【问题描述】:
我有一台安装了 PostgreSQL (PSQL) 9.6 服务器的 Debian 9 机器。 此 PSQL 服务器不接受来自其他机器的任何连接(仅来自其自身)。
我一直在尽力解决这个问题,我想你们中的一些人会认为这是一个 PostgreSQL 论坛的主题,但是让我解释一下:
我还有一台 Ubuntu 16.04 机器,同时运行 PostgreSQL 9.5 服务器,我没有这个问题。
来自其他机器(ping、x2gp)的 Debian 和 Ubuntu 机器的非 PSQL 连接工作正常。防火墙已停用。 接受连接的 PSQL 服务器规则基于名为 pg_hba.conf 的配置文件。它在Debian机器上的内容是:
# Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all 192.168.1.0/24 md5
在 Ubuntu 机器上,文件非常相似:
# Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all 192.168.1.0/24 md5
我还尝试将 config_file 从 Ubuntu 机器复制粘贴到 Debian 机器,看看它是否有效。它没。 当然,我不会忘记重启 PSQL 服务器。
现在当我做 netstat -an | grep 5432(PSQL 服务器监听端口 5432),在 Debian 机器上,我得到:
$ netstat -an | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
unix 2 [ ACC ] STREAM LISTENING 15854569 /var/run/postgresql/.s.PGSQL.5432
根据我对网络的了解,这确实意味着机器只在 5432 端口上侦听 localhost 入站连接。
但是当我在 Ubuntu 机器上做同样的事情时,我得到:
$ netstat -an | grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp6 0 0 :::5432 :::* LISTEN
unix 2 [ ACC ] STREAM LISTENING 19472 /var/run/postgresql/.s.PGSQL.5432
这意味着,我相信它会监听来自任何 IP 地址的入站连接。
但是为什么呢?
为什么两台机器的行为会有这种差异?
【问题讨论】:
标签: postgresql networking