EC2实例通过VPN连接时无法解析私有DNS问题咨询
解决OpenVPN连接后AWS私有DNS解析失败的问题
首先直接给你结论:是的,你需要使用AWS Route 53私有托管区域来解决这个问题,而且它完全可以和你的公共DNS服务商Hover共存,两者互不干扰。下面我一步步给你讲清楚原理和解决方法:
为什么当前私有DNS解析失败?
当你通过VPN连接到VPC后,虽然网络路由已经打通(所以私有IP能正常SSH),但你的VPN客户端默认可能还是用本地的公共DNS服务器(比如你的ISP或者8.8.8.8)来解析域名。而公共DNS服务器根本不知道ec2.internal这类AWS私有域名对应的IP,自然会提示无法解析。
什么是AWS私有托管区域?
简单来说,它是AWS Route 53提供的、专门服务于你的VPC内部的域名解析服务:
- 它只对关联的VPC生效,外部互联网完全无法访问这些解析记录,安全性很高
- AWS默认会为每个VPC自动创建一个
ec2.internal的私有托管区域,里面包含了VPC内所有EC2实例的私有DNS记录(就是你用的ip-172-31-aa-bbb.ec2.internal这种) - 当你的设备通过VPN接入VPC后,只要把DNS请求指向VPC的DNS服务器,就能通过这个私有托管区域解析到对应的私有IP
能不能和Hover共存?
完全没问题!两者的职责完全分开:
- Hover是你的公共域名服务商,负责解析你对外公开的域名(比如
yourdomain.com这类面向互联网的地址) - AWS私有托管区域只处理VPC内部的私有域名(比如
ec2.internal或者你自定义的私有域名) - 你只需要确保VPN客户端的DNS配置是:遇到私有域名时用VPC的DNS解析,公共域名还是用原来的DNS(包括Hover的),不会有任何冲突
具体解决步骤
1. 配置OpenVPN推送VPC DNS服务器地址
你需要让OpenVPN服务器在客户端连接时,自动把VPC的DNS服务器地址推送给客户端:
- 登录你的OpenVPN EC2实例,找到OpenVPN的配置文件(通常是
/etc/openvpn/server.conf) - 添加一行配置(把
172.31.0.2替换成你VPC的DNS服务器IP,VPC的DNS服务器默认是其CIDR网段的第二个IP,比如你的VPC网段是172.31.0.0/16,那DNS就是172.31.0.2):push "dhcp-option DNS 172.31.0.2" - 重启OpenVPN服务生效:
sudo systemctl restart openvpn@server
2. 确认VPC的私有托管区域存在
AWS默认会为每个VPC创建ec2.internal的私有托管区域,但如果被误删了,可以手动重建:
- 登录AWS控制台,进入Route 53服务
- 点击左侧的「托管区域」,然后点击「创建托管区域」
- 区域类型选择「私有」,域名填
ec2.internal,然后关联你的目标VPC - 完成后,AWS会自动同步VPC内EC2实例的私有DNS记录到这个区域
3. 测试解析
重新连接VPN后,执行以下命令测试:
nslookup ip-172-31-aa-bbb.ec2.internal
如果返回对应的私有IP,就说明解析正常了,此时再用私有DNS执行SSH命令就能成功。
内容的提问来源于stack exchange,提问作者wheresmycookie




