You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL无法接受外部连接,常规配置方案无效求助

PostgreSQL外部连接拒绝问题排查与解决(Manjaro环境)

问题场景

在Manjaro Linux上直接运行PostgreSQL 15.3服务器,尝试让外部设备连接时,执行命令:

psql -h 89.142.11.241 -U postgres -d mydb

出现错误:

psql: error: connection to server at "89.142.11.241", port 5432 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?

已完成的排查操作

  • 修改postgres.conf:取消listening_addresses行注释,设置为'*'
  • 修改pg_hba.conf:添加规则允许0.0.0.0/0范围的IP访问
  • 本地防火墙与路由器已开放5432端口,在线端口检测工具显示端口处于开放状态
  • 执行ss -lntp确认有进程监听0.0.0.0:5432及IPv6对应端口,关闭PostgreSQL后监听条目消失,确认是PostgreSQL进程
  • 数据库启动日志(已修正原日志乱码部分):
2023-06-25 15:49:33.594 CEST [34822] LOG:  启动PostgreSQL 15.3,运行于x86_64-pc-linux-gnu平台,由gcc (GCC) 13.1.1 20230429编译,64位
2023-06-25 15:49:33.594 CEST [34822] LOG:  监听IPv4地址"0.0.0.0",端口5432
2023-06-25 15:49:33.594 CEST [34822] LOG:  监听IPv6地址"::",端口5432
2023-06-25 15:49:33.594 CEST [34822] LOG:  监听Unix套接字"/run/postgresql/.s.PGSQL.5432"
2023-06-25 15:49:33.596 CEST [34825] LOG:  数据库系统已于2023-06-25 15:26:37 CEST关闭
2023-06-25 15:49:33.598 CEST [34822] LOG:  数据库系统已准备好接受连接

额外排查与解决步骤

  • 确认pg_hba.conf规则优先级:PostgreSQL会匹配第一条符合的访问规则,确保0.0.0.0/0的规则写在更靠前的位置,避免被仅允许本地访问的规则覆盖。示例规则:
    host    all             all             0.0.0.0/0               scram-sha-256
    
    注意认证方式需与postgres用户的加密方式匹配,可通过以下命令查看:
    psql -U postgres -c "SELECT usename, passwd FROM pg_shadow WHERE usename='postgres';"
    
  • 强制重载配置:修改配置文件后,执行以下命令确保配置生效,不要仅依赖服务重启:
    sudo systemctl reload postgresql
    # 或
    sudo -u postgres pg_ctl reload
    
  • 分层测试连接:
    1. 先在Manjaro本机执行psql -h 89.142.11.241 -U postgres -d mydb,如果失败,说明本机到公网IP的路由存在问题,可能是ISP的NAT限制或IP绑定错误
    2. 尝试用内网IP测试(如psql -h 192.168.x.x -U postgres -d mydb),若内网能连接,问题大概率出在公网路由或ISP层面
  • 检查额外安全工具:确认Manjaro上是否有其他安全工具(如fail2ban、第三方防火墙)拦截了5432端口的入站连接
  • 兼容性测试:如果外部客户端PostgreSQL版本较旧,scram-sha-256认证可能不兼容,可临时将pg_hba.conf中的认证方式改为md5测试,成功后再调整加密方式或升级客户端
  • 查看详细连接日志:修改postgres.conf中以下参数并重载配置,尝试连接后查看日志(通常在/var/log/postgresql/目录)获取拒绝原因:
    log_connections = on
    log_disconnections = on
    log_error_verbosity = verbose
    

内容的提问来源于stack exchange,提问作者iKramp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:07:13