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

跨账户VPC对等连接下EC2连接RDS PostgreSQL超时问题求助

排查VPC对等连接下EC2到RDS的连接超时问题

结合你给出的配置细节,连接超时通常是流量没有正确在两个VPC之间流转导致的,咱们一步步来排查可能的原因:

1. 先确认RDS端点的DNS解析是否正确

你提到双方VPC都允许远程DNS解析,但实际生效情况需要验证:

  • 登录到账户A的EC2实例,执行命令:nslookup your-rds-endpoint
  • 检查返回的IP地址是否属于VPCB的CIDR范围。如果解析到的是公有IP,说明DNS解析没有正确触发跨VPC解析,这时候要检查:
    • 双方VPC的DNS主机名(enableDnsHostnames)和DNS支持(enableDnsSupport)是否都设置为true
    • VPC对等连接的配置里,是否同时开启了请求方允许DNS解析和接收方允许DNS解析两个选项

2. 检查网络ACL的规则(最容易被忽略的点)

安全组状态正常,但网络ACL是子网级的防火墙,默认允许所有流量,但如果自定义过就可能出问题:

  • 对于EC2所在的VPCA公有子网的网络ACL:
    • 出站规则要允许TCP 5432端口到VPCB的CIDR范围
    • 入站规则要允许TCP 任意端口(对应RDS的响应流量)来自VPCB的CIDR,并且状态为ESTABLISHED
  • 对于RDS所在的VPCB子网的网络ACL:
    • 入站规则要允许TCP 5432端口来自VPCA的CIDR范围
    • 出站规则要允许TCP 任意端口到VPCA的CIDR,状态为ESTABLISHED

可以用命令查看子网关联的网络ACL:

aws ec2 describe-network-acls --filters "Name=association.subnet-id,Values=你的子网ID"

3. 验证路由表的关联和规则

虽然你说已经配置了路由,但要确认路由表确实和子网关联:

  • 检查EC2所在子网的路由表:
    aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=EC2所在子网ID"
    
    确认存在目标为VPCB CIDR、下一跳为对等连接ID的路由
  • 检查RDS所在子网的路由表:
    aws ec2 describe-route-tables --filters "Name=association.subnet-id,Values=RDS所在子网ID"
    
    确认存在目标为VPCA CIDR、下一跳为对等连接ID的路由

4. 再次确认安全组的规则细节

虽然安全组关联状态正常,但要检查规则的准确性:

  • 确认SecurityGroupB的入站规则中,来源是否是账户A的ID + SecurityGroupA的ID的正确格式(比如控制台中选择跨账户安全组时,是否正确输入了账户A的ID并选中了SecurityGroupA)
  • 确认EC2实例确实只关联了SecurityGroupA,没有附加其他限制出站流量的安全组
  • 可以用命令验证SecurityGroupB的入站规则:
    aws ec2 describe-security-groups --group-ids SecurityGroupBId
    

5. 测试端口连通性

在EC2实例上执行以下命令,确认端口是否可达:

telnet your-rds-endpoint 5432
# 或者用nc命令(如果安装了的话)
nc -zv your-rds-endpoint 5432

如果telnet提示“Connection timed out”,说明流量没有到达RDS;如果提示“Connection refused”,可能是安全组或RDS本身的问题(但你的情况是超时,所以更偏向路由/ACL/DNS问题)


内容的提问来源于stack exchange,提问作者alx.lzt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:57:55