无法从客户端连接PostgreSQL:No route to host问题求助
解决PostgreSQL "No route to host" 连接问题
先指出你最明显的一个错误:你执行的连接命令psql -U postgres -h 10.0.0.121是在连接客户端自己的IP,但你的PostgreSQL服务器在10.0.0.104啊!先把命令改成正确的:
psql -U postgres -h 10.0.0.104
如果改完还是报错,咱们一步步排查:
1. 确认服务器上PostgreSQL服务正在运行
登录到服务器10.0.0.104,检查服务状态:
# 适用于systemd系统(Ubuntu 16.04+/CentOS 7+) sudo systemctl status postgresql # 老版本用service命令 sudo service postgresql status
如果显示服务未运行,先启动它:
sudo systemctl start postgresql # 或者 sudo service postgresql start
2. 验证PostgreSQL是否监听了正确的地址和端口
修改postgresql.conf里的listen_addresses = '*'后,必须重启服务才会生效。在服务器上执行以下命令确认监听状态:
# 用ss命令(更现代的工具) ss -tulpn | grep 5432 # 或者netstat netstat -tulpn | grep 5432
正常情况下应该能看到0.0.0.0:5432或者*:5432的记录,要是只有127.0.0.1:5432,说明配置没生效,赶紧重启服务:
sudo systemctl restart postgresql
3. 检查服务器防火墙是否放行5432端口
No route to host大概率是防火墙挡住了端口,根据你的服务器系统来操作:
Ubuntu/Debian(ufw防火墙):
# 查看当前规则 sudo ufw status # 如果没看到5432允许,添加规则 sudo ufw allow 5432/tcp sudo ufw reload
CentOS/RHEL(firewalld防火墙):
# 查看当前开放的端口 sudo firewall-cmd --list-all # 添加永久规则并重载 sudo firewall-cmd --add-port=5432/tcp --permanent sudo firewall-cmd --reload
4. 测试客户端到服务器的网络连通性
在客户端10.0.0.121上先ping服务器,确认基础网络没问题:
ping 10.0.0.104
如果ping不通,说明是子网、路由或者交换机的问题,得先解决网络连通;如果ping通但还是连不上PostgreSQL,再测试端口:
# 用telnet telnet 10.0.0.104 5432 # 或者netcat(nc) nc -zv 10.0.0.104 5432
如果这些命令也失败,回到防火墙和PostgreSQL监听配置再检查一遍。
另外,你的pg_hba.conf配置host all all 10.0.0.121/32 md5是正确的,只要重启服务后就会生效,这个不用调整。
内容的提问来源于stack exchange,提问作者Muhammad Rahmatullah
相关产品推荐
相关产品推荐

