Ubuntu 22.04.2 LTS无法解析Windows DNS服务器配置的本地域名问题求助
我先理清楚你的问题场景:你把Windows虚拟机配置成了DNS服务器,所有Ubuntu虚拟机都通过netplan指向这个DNS服务器,外网域名(比如google.com)解析完全正常,但Windows DNS上手动添加的本地域home.local下的A记录(172.0.1.45 nginx.home.local),在Ubuntu上死活解析不了,Windows本机却能正常ping通。
先把你的配置和测试信息整理出来方便参考:
Ubuntu的Netplan配置
$ cat /etc/netplan/00-installer-config.yaml # This is the network config written by 'subiquity' network: ethernets: ens160: addresses: - 172.0.1.51/24 nameservers: addresses: - 172.0.1.34 search: [] routes: - to: default via: 172.0.1.29 version: 2
外网解析测试(正常)
$ ping google.com PING google.com 56(84) bytes of data. 64 bytes from seu35a21-eu-g67.2e345.net: icmp_seq=1 ttl=107 time=27.4 ms 64 bytes from seu35a21-eu-g67.2e345.net: icmp_seq=2 ttl=107 time=26.6 ms 64 bytes from seu35a21-eu-g67.2e345.net: icmp_seq=3 ttl=107 time=26.7 ms
本地域名解析测试(失败)
$ ping nginx.home.local ping: nginx.home.local: Temporary failure in name resolution
resolvectl状态(显示DNS服务器已正确配置)
$ resolvectl status Global Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported resolv.conf mode: stub Link 2 (ens160) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported Current DNS Server: 172.0.1.34 DNS Servers: 172.0.1.34
接下来给你几个排查方向,按顺序试应该能找到问题:
第一步:直接测试Windows DNS服务器的解析能力
跳过Ubuntu本地的解析服务,直接用dig或者nslookup查询Windows DNS:dig @172.0.1.34 nginx.home.local # 或者用nslookup nslookup nginx.home.local 172.0.1.34如果这两个命令能返回正确的172.0.1.45,说明问题出在Ubuntu本地的解析服务(systemd-resolved);如果返回空或者错误,那就是Windows DNS的配置问题,比如zone权限、递归查询限制或者记录写错了。
第二步:补全Netplan的search域配置
你的Netplan里search: []是空的,虽然用的是完整FQDN,但systemd-resolved有时候需要search域来辅助解析。修改Netplan配置:nameservers: addresses: - 172.0.1.34 search: [home.local]然后执行
sudo netplan apply,再测试ping nginx.home.local。第三步:清空systemd-resolved缓存并检查域配置
有时候resolved会缓存错误的解析结果,先清空缓存:sudo resolvectl flush-caches再检查当前网卡的域配置:
resolvectl domain ens160如果没显示
home.local,手动添加:sudo resolvectl domain ens160 home.local之后再测试解析。
第四步:检查Windows DNS服务器的关键设置
- 确认
home.local是主要区域,不是辅助区域; - 检查DNS服务器的“属性”->“高级”->“递归查询”是否允许,并且Ubuntu所在的172.0.1.0/24网段在“允许列表”里;
- 重新核对A记录的拼写和IP,确保没有笔误;
- 如果开启了动态更新,检查记录有没有被意外覆盖。
- 确认
第五步:排查Ubuntu防火墙
虽然外网解析正常,但Ubuntu的ufw可能误拦截了DNS请求?临时关闭防火墙试试:sudo ufw disable如果能正常解析了,再重新开启防火墙并添加DNS允许规则:
sudo ufw enable sudo ufw allow 53/tcp sudo ufw allow 53/udp
备注:内容来源于stack exchange,提问作者user89978




