无法连接私有VPC内的私有RDS实例,已做多项配置仍存疑问
排查无法通过OpenVPN访问VPC内私有RDS的问题
看起来你已经搭好了基础环境,我帮你梳理几个容易被忽略的细节,大概率能找到问题所在:
确认VPN客户端路由是否实际生效
你手动添加了路由,但得验证这条路由真的在引导10.0.0.0/16的流量走VPN网关:- Linux/macOS:执行
traceroute 10.0.x.x(替换成你的RDS内网IP),看第一跳是不是10.8.0.1;再用ip route show确认这条路由的优先级没有被更具体的本地路由覆盖。 - Windows:执行
tracert 10.0.x.x,第一跳应该是10.8.0.1;用route print检查路由表中10.0.0.0/16的条目是否存在,且跃点数(优先级)合理。
- Linux/macOS:执行
检查NAT实例的IP转发是否开启
Linux系统默认IP转发是关闭的,就算路由配置正确,NAT实例也没法把VPN流量转发到VPC内网:- 临时开启:执行
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:编辑
/etc/sysctl.conf,将net.ipv4.ip_forward设置为1,然后执行sysctl -p加载配置。
- 临时开启:执行
验证iptables的转发/SNAT规则
安全组放行后,iptables可能会拦截流量,而且必须确保VPN客户端的流量源被转换成NAT实例的内网IP(否则RDS安全组会拒绝非NAT安全组的流量):- 检查SNAT规则:执行
iptables -t nat -L POSTROUTING,确认存在类似规则:-A POSTROUTING -s 10.8.0.0/24 -d 10.0.0.0/16 -j SNAT --to-source <NAT实例内网IP> - 检查转发规则:执行
iptables -L FORWARD,确认允许从10.8.0.0/24到10.0.0.0/16的流量通过。
- 检查SNAT规则:执行
排查RDS域名的DNS解析问题
如果你用RDS的域名访问,必须确保VPN连接后能解析到RDS的内网IP:- 在VPN客户端执行
ping <RDS域名>,看返回的IP是不是10.0.x.x网段的。如果是公网IP,说明DNS配置错误,需要在OpenVPN服务器配置中添加push "dhcp-option DNS <VPC的DNS服务器IP>"(VPC的DNS一般是网段的第二个IP,比如10.0.0.2),让客户端使用VPC内网DNS解析RDS域名。
- 在VPN客户端执行
确认安全组的出站规则
你已经配置了NAT实例安全组的入站和RDS安全组的入站,但别漏了NAT实例安全组的出站规则:需要允许到10.0.0.0/16网段的3306端口流量,否则NAT实例没法把请求转发到RDS。优先使用OpenVPN自动推送路由
手动添加路由容易出错,建议在OpenVPN服务器配置中添加push "route 10.0.0.0 255.255.0.0",这样客户端连接后会自动生成正确的路由条目,避免手动配置的疏漏。
内容的提问来源于stack exchange,提问作者TheOni
相关产品推荐
相关产品推荐

