新手求助:Scaleway服务器连接Amazon RDS出现连接超时问题
既然你能从本地正常登录RDS,说明RDS实例本身是没问题的,问题大概率出在Scaleway服务器到AWS的网络路径或者AWS的安全配置上,我给你整理几个排查步骤,你一步步来:
先在Scaleway服务器上验证网络连通性
先别急着用psql,先用更基础的工具测试端口能不能通:
执行nc -zv digrin.asdada.us-west-2.rds.amazonaws.com 5432或者telnet digrin.asdada.us-west-2.rds.amazonaws.com 5432,如果还是提示超时,那确实是网络层面的阻断,继续往下排查。再次确认AWS安全组的入站规则
你说已经加了服务器IP,但一定要检查这几点:- 是不是Scaleway服务器的公网IP?别把内网IP填进去了,Scaleway的服务器公网IP可以通过
curl ifconfig.me在服务器上查到。 - IP的CIDR格式是不是正确?要写成
xxx.xxx.xxx.xxx/32(单个IP的格式),别写错掩码。 - 这个安全组是不是真的关联到你的RDS实例了?去RDS控制台的实例详情里,看“Security groups”字段,确认是你配置的那个安全组。
- 是不是Scaleway服务器的公网IP?别把内网IP填进去了,Scaleway的服务器公网IP可以通过
检查Scaleway服务器的出站防火墙规则
Scaleway的服务器默认可能有防火墙限制,比如ufw或者iptables:- 用
sudo ufw status看看ufw是不是开启了,有没有允许出站到5432端口的规则; - 如果是iptables,执行
sudo iptables -L OUTPUT -n,检查有没有拒绝TCP 5432端口出站的规则。
要是有拦截,记得添加允许规则,比如sudo ufw allow out 5432/tcp。
- 用
检查VPC的网络ACL配置
VPC的网络ACL是无状态的,入站和出站都要配置:- 入站规则:允许来自Scaleway公网IP的TCP 5432端口流量;
- 出站规则:允许到Scaleway公网IP的TCP 1024-65535端口流量(因为客户端连接会用随机的高位端口,RDS的响应会走这些端口回来)。
别只配置入站,忘了出站,这是很多新手容易踩的坑。
排查DNS解析问题
在Scaleway服务器上执行dig digrin.asdada.us-west-2.rds.amazonaws.com,看看解析出来的IP是不是和本地解析的一致。如果解析的IP不对,可能是Scaleway的DNS有问题,你可以临时换成公共DNS(比如8.8.8.8)再试试,比如dig @8.8.8.8 digrin.asdada.us-west-2.rds.amazonaws.com,如果解析正确后能连通,那就是DNS的问题,需要调整Scaleway服务器的DNS配置。用mtr追踪网络路径
要是前面的步骤都没找到问题,试试用mtr排查数据包在哪里丢了:
执行mtr --tcp --port 5432 digrin.asdada.us-west-2.rds.amazonaws.com,这个工具会显示每一跳的丢包率,能帮你定位是Scaleway内部网络的问题,还是中间运营商的问题,或者AWS那边的网络问题。
按照这些步骤排查下来,应该能找到超时的原因,大部分情况都是安全组或者防火墙规则配置错了。
内容的提问来源于stack exchange,提问作者Lucas03

