同VPC同安全组的RDS PostgreSQL双向复制安全组规则失效原因
问题原因及排查方向
1. RDS公网访问配置导致流量走公网
如果你的RDS实例开启了公有可访问选项,虽然同VPC内的实例理论上会解析到RDS的私有IP,但某些场景下(比如RDS部署在公有子网),PostgreSQL内部发起的pglogical连接可能会优先尝试公网IP。此时连接的源IP会是VPC的NAT网关公网IP,而非另一个RDS的私有IP,导致安全组中“允许同安全组流量”的规则无法匹配(该规则只识别VPC内网的私有IP),最终超时。
解决方式:
- 关闭RDS实例的“公有可访问”选项(在RDS控制台的实例连接设置中修改)
- 确保DSN中使用RDS的默认端点(VPC内解析会指向私有IP,关闭公网访问后更稳妥)
2. 安全组规则配置错误
检查安全组的入站规则是否符合要求:
- 确认入站规则的源是你的安全组ID(
sg-xxxxxx),而非目标字段 - 规则端口明确指定5432(PostgreSQL默认端口),协议选择TCP
- 确保两个RDS实例都关联了这个配置正确的安全组
3. PostgreSQL的pg_hba.conf限制
虽然你的错误是超时而非连接拒绝,但仍需排查RDS的pg_hba.conf是否限制了连接范围:
- 在RDS参数组中找到
pg_hba_rules参数,添加允许VPC内网段(比如你的VPC CIDR10.0.0.0/16)或另一个RDS私有IP的规则,示例格式:host main xxx 10.0.0.0/16 scram-sha-256 - 修改后重启RDS实例使参数生效
4. VPC路由表或子网配置问题
如果两个RDS部署在不同子网,检查子网路由表:
- 确认路由表中存在指向
local目标的默认路由(允许VPC内子网间流量互通) - 没有自定义路由规则拦截了内网流量
内容的提问来源于stack exchange,提问作者D Malan
相关产品推荐
相关产品推荐

