如何通过客户端VPN以私有IP连接MongoDB Atlas端点?
问题背景
已搭建MongoDB Atlas,并完成以下配置:
- 建立MongoDB Atlas与AWS VPC的VPC对等连接,IP访问列表放行VPC CIDR,VPC内连接正常。
- 配置AWS客户端VPN端点用于本地安全连接VPC,IP访问列表放行客户端VPN私有IP段,但本地无法连接MongoDB Atlas端点。
排查发现:
- 在VPC内执行
ping clusterx-shard-xx-xx.xxxxxx.mongodb.net,主机名解析为私有IP;本地执行时解析为公网IP,导致连接失败。
解决方案
要实现本地通过私有IP连接MongoDB Atlas,可采用以下几种方案:
方案1:配置客户端VPN使用AWS VPC DNS服务器(推荐)
这是最稳定的方案,让客户端通过VPN连接时使用AWS VPC的DNS解析服务,从而获取Atlas的私有IP:
- 登录AWS控制台,找到对应的客户端VPN端点,修改其DNS服务器设置,填入VPC的DNS服务器地址(通常为VPC CIDR段的第二个IP,比如VPC CIDR是10.0.0.0/16,DNS地址就是10.0.0.2),或者填入AWS Route 53 Resolver的端点IP。
- 确保客户端VPN的连接配置(比如.ovpn文件)中包含DNS配置,让客户端连接VPN后自动使用指定的DNS服务器。
- 连接VPN后,重新执行
nslookup clusterx-shard-xx-xx.xxxxxx.mongodb.net,确认解析结果为私有IP,再尝试连接MongoDB。
方案2:本地hosts文件手动映射(临时测试用)
适合临时验证场景,手动将Atlas分片域名映射到私有IP:
- 在VPC内执行
nslookup clusterx-shard-xx-xx.xxxxxx.mongodb.net,记录返回的私有IP地址。 - 编辑本地hosts文件:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS/Linux:
/etc/hosts
- Windows:
- 添加条目:
[私有IP] clusterx-shard-xx-xx.xxxxxx.mongodb.net,替换所有分片的域名和对应私有IP。 - 保存后,本地访问Atlas时会直接使用私有IP,但需注意:若Atlas集群扩容或维护导致私有IP变更,需手动更新hosts文件。
方案3:Route 53私有托管区(生产级方案)
通过AWS Route 53创建私有域名解析记录,确保VPC内(含VPN客户端)解析Atlas域名返回私有IP:
- 在Route 53控制台创建私有托管区,域名设置为MongoDB Atlas集群的根域名(比如
xxxxxxxxxx.mongodb.net)。 - 将该私有托管区关联到你的AWS VPC。
- 在托管区内添加A记录,将每个Atlas分片的域名(如
clusterx-shard-xx-xx.xxxxxx.mongodb.net)指向对应的私有IP(从VPC内解析获取)。 - 确保客户端VPN使用VPC的DNS服务器,这样连接VPN后,解析Atlas域名会优先使用私有托管区的记录,返回私有IP。
内容的提问来源于stack exchange,提问作者Dipendra Dangal
相关产品推荐
相关产品推荐

