无法通过域控制器解析跨VPC机器名称问题求助
我之前也碰到过类似的跨VPC DNS解析问题,结合你的场景,下面是几个最可能的原因和对应的排查方法:
对等连接的DNS解析配置未双向生效
AWS VPC对等连接的跨VPC DNS解析是需要两边都配置的,只开一边没用。你得登录AWS控制台,分别进入两个VPC的对等连接设置,确认以下两个选项都已开启:- 对发起方VPC:允许接收来自对等VPC的DNS解析请求(Allow DNS resolution from peer VPC)
- 对接收方VPC:允许向对等VPC发送DNS解析请求(Allow DNS resolution of public hostnames to peer VPC)
要是其中一个VPC用过AWS默认DNS(VPC CIDR+2),还要确保对等连接允许解析对方的私有DNS主机名。
Ubuntu实例的DNS配置未正确指向域控制器
就算配置了DHCP选项集,Ubuntu有时候也可能没正确获取到DNS服务器地址。你可以用这两个命令检查:cat /etc/resolv.conf要是用的是systemd-resolved,就执行:
systemd-resolve --status确认输出里的nameserver是你的内部域控制器IP。如果不是,可以手动修改
/etc/resolv.conf(systemd环境下可能要改/etc/systemd/resolved.conf),或者重启实例重新获取DHCP配置。Windows实例未在域控制器DNS中注册主机名
跨VPC解析完全依赖域控制器上的DNS记录,你得确认Windows实例的主机名已经正确注册:- 在Windows实例的命令提示符里执行
ipconfig /registerdns,强制重新注册DNS - 登录域控制器,打开DNS管理器,检查对应区域下有没有该Windows实例的A记录和PTR记录
- 在Windows实例的命令提示符里执行
DNS流量被安全组/网络ACL拦截
虽然IP通信正常,但DNS用的是UDP 53(大查询会用TCP 53),得确保:- Ubuntu实例的安全组允许出站UDP/TCP 53流量到域控制器IP
- 域控制器实例的安全组允许入站UDP/TCP 53流量来自Ubuntu所在的VPC CIDR
- 两个VPC的网络ACL都允许UDP/TCP 53的双向流量(入站和出站规则都要配)
主机名缺少域名后缀
如果Windows实例加入了域(比如corp.example.com),直接用MACHINE-NAME解析可能失败,因为Ubuntu的DNS搜索域可能没包含这个域。你可以试试用完整的FQDN解析:nslookup MACHINE-NAME.corp.example.com要是能成功,说明得在Ubuntu的DHCP选项集或本地DNS配置里把这个域名加到搜索域列表里。
AWS DNS的局限性(如果用过的话)
要是你尝试过用AWS默认DNS(VPC CIDR+2),得注意它默认只能解析同一VPC内的私有主机名,跨VPC解析必须开对等连接的DNS解析选项,而且两个VPC的域名不能冲突。如果两个VPC用了相同的域名后缀,AWS DNS可能没法正确区分,这时候就必须用内部域控制器来解析。
内容的提问来源于stack exchange,提问作者Muhammad Rehan Saeed

