域管理员新手必看:域环境下DNS设置的常见误解


DNS服务是保证机器能够上网浏览的基础。它将形如GOOGLE.COM的名字翻译成IP地址。
对于域环境来说,DNS服务器还有一个重要的作用,就是客户机用它来寻找域中的服务。在DNS服务器中,这些记录被称为服务资源记录。这些记录只存在你自己建的DNS服务器中。

一直以来,Windows系统在IP地址的设置中,有主DNS和次DNS的设置。如图:
attachimg.gif20131018_ef99d8a5f06ed4b4484008aC4eEIlgZ

对于域管理员新手,有可能会有以下的误解:

误解1, 可以将主DNS设置成公用DNS服务器,将次DNS设置成内网的DNS
20131018_2e473fc2be5abe9d046cHI1rUOrx7Fw
这种设置的潜台词是:如果第一个DNS服务器查找不到相应的记录,机器会自动寻找第二个DNS服务器。
真实的情况是,WINDOWS在第一个DNS服务器在线的情况下,是不会去向第二个DNS服务器查询的。所以这种设置会让有关对域的操作直接失败。

误解2, 可以将主DNS设置成内网DNS服务器,将次DNS设置成公用的DNS

20131018_c6e5bcb97f897bbde3cdrz1EkidRs2j
管理员的想法是:如果第一个DNS服务器不可用, 那么机器可以查询公用DNS,这样如果内网的DNS离线,用户还能保证上网。
我不能说这种设置错误或会立即造成的服务问题,但是在实际工作中,我的确发现这种设置会带来问题。
出现问题的机器还是当然是找不到域服务器,通过分析,发现出现这种问题的机器在使用第二个DNS服务器作解析。因为公用DNS没有域资源记录,所以对域的操作失败。
你肯定会问,是不是此时主DNS服务器离线了。经验告诉我,即使主DNS服务器在线的情况下,WINDOWS依然有可能使用次DNS作解析服务器。我个人猜想,可能有时主服务器繁忙,Windows以为其离线而自动转成次DNS
你可能会说,如果主DNS服务器繁忙,Windows转成使用次DNS,不就是我们想要的吗?等主DNS不繁忙或上线后,Windows自己换回主DNS服务器不就没事了。
问题就在这,Windows启用次DNS后,要经过一定的时间,才会重新对DNS服务器进行再次排队,这个时间默认是15分钟。
15分钟里,不同用户可能有不同的问题,有人尝试登录,会说服务器不可用;有人正在解email,突然蹦出一个窗口,要输入用户密码。然后,可怜的你的电话就会被打爆。


网友未按本文正确配置DNS而出现解析问题事例:

http://bbs.51cto.com/thread-1091171-1.html

http://bbs.51cto.com/viewthread.php?tid=1089936

http://bbs.51cto.com/thread-1089804-1.html




误解3 可以通过NSLOOUP知道当前机器正在使用哪一个DNS服务器。
如果你想通过NSLOOKUP对上面的问题进行排错,想知道机器正在使用哪一个DNS,那么你一开始就错了,NSLOOKUP默认只查询主DNS服务器,而不是查询你正在用的DNS服务器。

讲了误解,那正解是什么,正解就是:在域环境下,只使用内网的DNS服务器。

20131018_e4794728e52fdc27d455fzDBC4f6BTh


补充:

下面的注册表修改,可以使WINDOWS每次DNS查询先尝试主DNS。(未实验,请自行验证)

  1. Click Start, click Run, type regedit, and then click OK.

  2. Locate and then click the following key in the registry:


    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters


  3. On the Edit menu, point to New, and then click REG_DWORD.

  4. Type ServerPriorityTimeLimit, and then press ENTER.

  5. On the Edit menu, click Modify.

  6. Type 0, and then click OK.


参考:

The DNS Client Service does not revert to using the first server

http://support.microsoft.com/kb/320760/en-us