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

PostgreSQL远程连接超时求助:Linux服务器无法连接本地数据库

PostgreSQL远程连接超时问题排查与解决

问题场景

本地Windows PC运行PostgreSQL 14,需让远程Linux服务器上的Flask应用连接该数据库。执行连接命令:

psql -h 12.345.678.901 -p 5432 -U postgres

返回超时错误:

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

已完成常规配置(修改pg_hba.conf、postgresql.conf,开放Windows防火墙、Linux防火墙,设置路由器端口转发),但问题仍存在。

针对性排查与解决步骤

1. 确认公网IP正确性

你使用的12.345.678.901可能是内网IP而非公网IP,导致远程服务器无法访问:

  • 在Windows CMD执行以下命令查询公网IP:
    nslookup myip.opendns.com resolver1.opendns.com
    
  • 用查询到的公网IP替换命令中的IP地址,重新测试连接。

2. 验证路由器端口转发配置

多数超时问题源于转发规则错误:

  • 确保转发规则将外部端口5432映射到本地PC的内网IP(如192.168.1.100)的5432端口,协议选择TCP。
  • 注意目标IP必须是本地PC的内网IPv4地址,而非公网IP。

3. 确认PostgreSQL监听所有IP

检查PostgreSQL是否正确监听全网段IP:

  • 在Windows CMD执行:
    netstat -ano | findstr :5432
    
  • 若输出仅包含127.0.0.1:5432,说明postgresql.conf修改未生效:
    • 确认修改的是PostgreSQL服务实际加载的data目录(可在服务属性的“可执行文件路径”中查看-D参数对应的路径)。
    • 重启PostgreSQL服务:
      net stop postgresql-x64-14 && net start postgresql-x64-14
      

4. 排查ISP端口封锁

部分ISP会封锁5432这类常用数据库端口:

  • 修改postgresql.conf中的port为非常用端口(如5433),重启服务。
  • 更新Windows防火墙入站规则、路由器端口转发规则,将端口同步改为5433。
  • 在Linux服务器执行:
    psql -h 你的公网IP -p 5433 -U postgres
    

5. 验证Windows防火墙规则有效性

临时关闭Windows Defender防火墙,重新测试连接:

  • 若关闭后能正常连接,说明原防火墙规则存在问题:
    • 重新创建入站规则:选择TCP协议,指定本地端口5432,允许所有远程IP访问,应用到域、专用、公网网络。

6. 检查双重NAT情况

若你的路由器获取的是内网IP(如10.x.x.x、172.16.x.x),说明处于双重NAT环境:

  • 联系ISP申请公网IP。
  • 或使用内网穿透工具(如frp)搭建隧道,绕过公网IP限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:25:27