通过VPC Peering从本地连接RDS的技术问题求助
我之前碰到过几乎一模一样的场景,给你几个关键的排查和配置步骤,应该能解决你的问题:
核心问题:DNS解析 + 路由的联动配置
你遇到的本质问题是:本地请求RDS endpoint时,要么解析到了公网IP(不走peering),要么解析到了私网IP但路由没打通。下面是具体的解决步骤:
1. 开启VPC对等连接的DNS解析权限
这是最关键的一步,默认情况下VPC1的DNS不会把VPC2里的RDS endpoint解析为私网IP,必须手动开启:
- 登录AWS控制台,进入VPC服务,找到你的VPC Peering连接
- 分别编辑VPC1侧和VPC2侧的连接选项,勾选「Allow DNS resolution from peer VPC」
- 这个配置会让VPC1的DNS服务器(即VPC网段的第二个IP,比如10.0.0.0/16的VPC对应10.0.0.2)能解析VPC2内RDS的私网IP,而不是返回公网IP
2. 确保本地DNS能正确转发RDS域名查询到AWS
既然你本地能解析Route53的主机名,那可以做以下配置:
- 如果你的RDS使用的是AWS默认的
*.rds.amazonaws.com域名:把这个域名的DNS查询转发到VPC1的DNS服务器(比如10.0.0.2),这样本地解析时会拿到VPC2内的RDS私网IP - 如果你用了Route53私有托管区域:在私有托管区域里添加一条A记录,把RDS的endpoint指向它的私网IP(可以在RDS控制台的实例详情里找到私网IP),这样本地解析时直接返回私网IP
3. 验证路由表的双向连通性
虽然你说已经配置了路由,但再仔细核对一遍:
- VPC1的关联路由表(和DirectConnect网关绑定的那个):添加一条路由,目标是VPC2内RDS所在子网的网段,下一跳选择你的VPC Peering连接ID
- VPC2的关联路由表(RDS所在子网使用的那个):添加一条路由,目标是你的本地网络网段,下一跳选择VPC Peering连接ID
- 确保这两条路由都处于「活跃」状态
4. 检查安全组和NACL的规则
很多时候连通性问题是安全组/NACL拦截了流量:
- RDS的安全组:添加入站规则,允许来自本地网络IP段的数据库端口(比如MySQL用3306,PostgreSQL用5432)的访问
- VPC1和VPC2的NACL:确保入站和出站规则都允许双向流量:入站允许本地网段到RDS端口的请求,出站允许RDS到本地网段的响应流量(临时端口范围一般是1024-65535)
5. 用EC2实例验证流量路径
如果还是无法连通,建议在VPC1里启动一个测试EC2实例,用来排查:
- 登录EC2,执行
nslookup <你的RDS endpoint>,确认解析到的是VPC2内的私网IP(而不是公网IP) - 用
telnet <RDS endpoint> <端口>或nc -zv <RDS endpoint> <端口>测试连通性,如果能通,说明VPC间的peering和RDS配置没问题 - 如果EC2能访问但本地不行,那问题大概率出在本地到VPC1的DirectConnect配置(比如本地路由没指向VPC2网段,或者DNS转发没生效)
内容的提问来源于stack exchange,提问作者dparsons
相关产品推荐
相关产品推荐

