Windows 10 的 DNS 查询顺序问题

Johnny 遇到了一个很诡异的现象,在我的局域网里,我维护着一台 DNS 服务器,用来管理内部的域名,然而,有时候客户端会出现无法解析内部 DNS 名称的故障,尽管首选 DNS 已经被我设为我建立的那台 DNS 服务器,如果你也遇到了这样的问题,这篇文章或许对你很有帮助哟!

* 原因 *
通过 Google 搜寻后得知,Windows 系统,无论是 Windows 7 或者 Windows 10,它们向 DNS 发送查询时,分配给首选 DNS 的等待时间只有 1 秒而已!而分配给其它 DNS,例如备用 DNS,以及高级页面上设置的 DNS 的等待时间都要来得长!这样,如果首选 DNS 响应速度比较慢,就会超过时间限制哟,这样一来,Windows 7 和 Windows 10 就会切换到剩下的 DNS 上进行查询啦!那些 DNS 没有我的内部 DNS 的记录,因此它们是无法返回正确的 IP 地址滴!咋办捏?

* 解决问题的方法 *
其实解决问题的方法也是挺简单滴,不要去设定备用 DNS 以及高级页面上的额外 DNS,问题就会迎刃而解啦!哈哈。是不是到这里就该完了呢?当然不是哟!因为 Johnny 想玩得更开心啦!我们来想一下,是不是可以把分配给首选 DNS 的等待时间拉长一点儿呢,比如拉长到 30 秒(顺带说一下:如果首选 DNS 真的慢成了这样子,嘿嘿,您还是快一点把那只“乌龟”换了吧!),这是真的可行的哟!
打开注册表编辑器,导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters,在其中建立一个多字符串值(REG_MULTI_SZ),取名 DNSQueryTimeouts,将下面的文本输入到其中:
20
20
8
10
10
0

其中,第一行的 20 表示首选网卡的首选 DNS 服务器的等待时间,第二行的 20 表示所有网卡的首选 DNS 的等待时间,第三行的 8 表示所有网卡的所有 DNS 的等待时间,第四行和第五行表示重复查询所有网卡的所有 DNS 的等待时间,时间单位都是秒(Secands),最后的 0 是一项 Microsoft 的技术要求啦。
另外呀,Windows 在查询首选 DNS 超时后的一段时间内,它不会再去查询这个 DNS 服务器,这是避免不断把时间浪费在不可用的 DNS 服务器上,有的时候,Johnny 希望关闭这项功能呢!也就是说,无论如何,都要先查询首选 DNS 服务器,哈哈。怎么做乜?
打开注册表编辑器,导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters,然后新建一个 DWORD 值,取名 ServerPriorityTimeLimit,数值默认为 0(数字 0)。虽然这个方法在 Windows XP 时出现,但是也可以兼容于 Windows 7 和 Windows 10 呢!
最后,一定要记得重新启动一下 Windows 哟!这样才能让更改生效呢!

撰写本文时,Johnny 参考了如下 5 个来源,分别是:
Technet: The DNS Client Service does not revert to using the first server in the list in Windows XP
LinuxPlayer: Windows 7 does not honor DNS server order
John Ruiz, Software Engineer: Windows does not always honor DNS order
Technet Blog: DNS Clients and Timeouts (part 2) by StdQry
Server Fault: networking – How does Windows decides which DNS Server to use when resolving names?

留下评论

电子邮件地址不会被公开。 必填项已用*标注