前段时间win10虚拟机右下角提示无网,OneDrive也无法登录。但是edge还能访问网页。经过一番探索,发现是DNS服务器本地域名设置异常导致的。借这个问题,讨论一下本地DNS服务器的本地域名如何设置。
¶问题现象
win10虚拟机右下角提示无网,OneDrive也无法登录。但是edge浏览器还能正常访问网页。同一个局域网的Windows主机没有这些问题。在有问题的系统,使用nslookup 查询 bing.com,发现返回的是bing.com.inc。看起来nslookup在查询的域名后面自动添加了本地域名inc。

¶问题分析
询问AI,发现注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters有如下设置。左边是有问题的系统,右边是没有问题的系统。可以看出,有问题的系统多了DhcpDomain和DhcpNameServer两个配置。删除这两个配置后,问题消失。但是系统重启后,这两个选项又自动回来了。

打开Process Monitor,在管理员cmd执行ipconfig /release 和 ipconfig /renew,强制触发DHCP,抓到是 svchost 设置的。如下图所示。

在NG的机器上抓取 dhcp 数据包,路由器确实返回了 DomainName 和 DomainNameServer 两个字段。在OK的机器上强制触发DHCP,也变成NG了。看来问题还是出在DHCP服务器。

将dnsmasq的本地域名设置为空,然后强制触发DHCP,再次查询bing.com,通过抓包,发现直接就是查询的 bing.com,而不是 bing.com.inc。如果将本地域名设置为pk.inc,查询 bing.com,那么将会先查询 bing.com.pk.inc,查询不到,转而查询 bing.com。本地域名设置为 abc,先查询 bing.com.adb,查询找不到,转而查询bing.com。
¶问题原因
看来nslookup 在域名后面追加本地域名是默认的行为。经过一番搜索,发现inc 是全球顶级域名,https://en.wikipedia.org/wiki/.inc。怪不得 bing.com.inc 能返回查询结果。在云服务器查询,也能得到类似的结果。全部的顶级域名可以在https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains 或 https://tld-list.com/tlds-from-a-z 查询。
1 | ubuntu@sg-arm-1:~$ nslookup bing.com.inc |
¶解决方法
经过搜索,发现了帖子https://serverfault.com/questions/17255/top-level-domain-domain-suffix-for-private-network。RFC 6762推荐在私有DNS使用如下顶级域名。将本地域名改为lan,重启系统后解析恢复正常。
1 | .intranet. |
本地域名不推荐设置为.local,因为mDNS协议默认使用.local域名,会导致mDNS协议工作异常。