搭建可远程访问的Postgres数据库遇连接超时问题求助
解决PostgreSQL远程连接超时问题
核心问题排查步骤:
1. 修正主机IP地址错误
你输入的主机IP 192.168.1.255 是子网广播地址,并非HOST的实际内网IP。先在HOST上执行以下命令获取真实IP:
ip a | grep inet | grep -v 127.0.0.1
记下输出中类似 192.168.1.x 的地址,后续远程连接时使用该IP。
2. 配置PostgreSQL监听范围
PostgreSQL默认仅监听本地连接,需修改配置允许远程访问:
- 编辑主配置文件:
sudo nano /etc/postgresql/12/main/postgresql.conf
- 找到
listen_addresses参数,修改为:
listen_addresses = '*'
(也可指定HOST的实际IP,如 listen_addresses = '192.168.1.x',更安全)
3. 重启PostgreSQL服务生效:
sudo systemctl restart postgresql
3. 配置访问控制规则(pg_hba.conf)
添加允许CLIENT所在子网访问的规则:
- 编辑访问控制文件:
sudo nano /etc/postgresql/12/main/pg_hba.conf
- 在文件末尾添加一行(假设CLIENT在
192.168.1.0/24子网,可根据实际调整):
host all all 192.168.1.0/24 scram-sha-256
若知道CLIENT的具体IP,可改为 192.168.1.y/32 缩小访问范围。
3. 重启PostgreSQL服务:
sudo systemctl restart postgresql
4. 开放HOST端防火墙端口
Ubuntu默认使用ufw防火墙,需开放PostgreSQL默认端口5432:
sudo ufw allow 5432/tcp sudo ufw reload
若使用iptables,执行以下命令:
sudo iptables -A INPUT -p tcp --dport 5432 -s 192.168.1.0/24 -j ACCEPT sudo iptables-save | sudo tee /etc/iptables/rules.v4
5. 验证网络连通性
在CLIENT上执行以下命令,测试与HOST的端口连通性(替换为HOST真实IP):
nc -zv 192.168.1.x 5432
若输出 Connection to 192.168.1.x 5432 port [tcp/postgresql] succeeded!,说明网络层正常;若失败,检查HOST防火墙或网络路由。
6. 确认用户登录权限
确保my_user具备远程登录权限(superuser默认包含LOGIN权限,可执行以下命令确认):
sudo -u postgres psql -c "SELECT usename, canlogin FROM pg_user WHERE usename='my_user';"
若canlogin为f,执行以下命令开启:
sudo -u postgres psql -c "ALTER USER my_user WITH LOGIN;"
内容的提问来源于stack exchange,提问作者Tom Hosker
相关产品推荐
相关产品推荐

