PostgreSQL配置listen_addresses为*仍无法LAN连接报Connection refused
PostgreSQL 局域网远程连接配置解决步骤
核心问题为PostgreSQL服务未正常加载TCP监听配置、访问规则存在格式错误、主机防火墙拦截端口,按以下顺序操作即可修复:
1. 修复TCP监听配置不生效问题
你虽然手动配置了listen_addresses = '*',但启动日志无TCP监听记录,说明配置未被服务加载,按以下操作修正:
- 本地通过Unix socket登录psql,执行
SHOW config_file;,获取当前服务实际加载的postgresql.conf文件绝对路径(不要手动找配置文件,避免改到不同版本/路径下的无效示例配置) - 打开该配置文件,确认
listen_addresses = '*'、port = 5432两个配置项未被#注释,且文件后续没有重复的同名配置覆盖前面的设置 - 保存配置后重启PostgreSQL服务:
systemctl restart postgresql - 重启后检查服务日志,正常情况下会新增IPv4/IPv6地址5432端口的监听记录;在服务器本地执行
ss -tulpn | grep 5432,能看到postgres进程监听0.0.0.0:5432即代表TCP监听配置生效。
2. 修正客户端访问规则配置错误
当前pg_hba.conf存在两行格式错误的规则:
host all user1 192.168.1.4 255.255.255.0 md5 host all user1 192.168.1.24 255.255.255.0 md5
PostgreSQL的host规则不支持单IP地址搭配整段子网掩码的写法,格式不规范会导致规则加载异常。这两行规则已经被后续的192.168.1.0/24网段规则覆盖,直接删除即可。
修正后保存文件,再次重启PostgreSQL服务。
3. 放通主机防火墙端口
你的nmap扫描结果显示5432端口为filtered状态,代表主机防火墙在拦截端口入站流量,根据服务器使用的防火墙工具放通规则:
- 若使用ufw(Ubuntu/Debian系默认防火墙):执行
ufw allow in from 192.168.1.0/24 to any port 5432,再执行ufw reload重载规则 - 若使用firewalld(RHEL/CentOS/Rocky系默认防火墙):依次执行以下命令:
firewall-cmd --add-source=192.168.1.0/24 --zone=trusted --permanent firewall-cmd --add-port=5432/tcp --permanent firewall-cmd --reload - 若系统开启了SELinux(RHEL系默认开启),额外执行
setsebool -P postgresql_can_network_connect 1,放开SELinux对PostgreSQL网络连接的限制。
4. 连接验证
以上操作完成后,在客户端机器重新扫描192.168.1.23的5432端口,显示状态为open时,即可正常通过远程连接访问PostgreSQL服务。
内容的提问来源于stack exchange,提问作者Rich_F
相关产品推荐
相关产品推荐

