环境搭建:
准备至少3台机器,一台主DC & DNS,一台从DC & DNS,一台作为测试的客户端。
首先搭建主DC(主DC和从DC我们都用Server 2012来搭建,2008也OK,只要Forest和Domain的功能级别选对应的就行):
先在Server Manager中选择Add Roles and Features,安装ActiveDirectory Domain Services和DNS Server(弹出的选项都保持默认即可):
后面的选项保持默认即可。
安装完成后,在上面通知的地方找到安装成功的通知,在上面会有一个“Promote this server to a domain controller”:
对于主DC我们选择下面的选项创建一个新的Forest:
接着我们选择Forest和Domain的功能级别,如果希望2008的系统也可以加入域的话,就可以把级别调低一些:
后面的选项都保持默认就可以了,最后点击Install:
搭建好主DC后,我们再搭建一台从DC,从DC也是要安装ADDS和DNS服务(与主DC的过程完全相同),完成后,在“Promotethis server to a domain controller”的过程中有一点不一样,我们选择“Add a domain controller to an existing domain”:
在Domain这填上“daniel.com”,也就是我们前面创建的Forest下的domain。点击Select后需要我们使用域管理员认证。完成后点击下一步,后面的步骤保持默认选项完成即可。
做完之后,我们在DNS的域名上面选择右键菜单中的属性:
确认一下Dynamic updates选项选择的是“Secure only”:
然后我们找第三台机器,将第三台机器加入域中,然后查看主DNS和从DNS上面的记录,可以看到DNS记录自动加到DNS记录中:
接着修改第三台机器的内网IP,然后使用ipconfig /registerdns手动注册一下DNS记录:
查看DNS上面的记录已经更新:
在实际操作过程中,客户环境中遇到一个问题,加入域的一台机器,在修改了机器的内网IP后,机器的DNS并没有在DNS服务器上更新成功。通过在两个DC上抓包可以看到,DNS记录的同步顺序是,客户端首先会与自己的首选DNS服务器同步,通过UDP的53端口进行通信,如果UDP的53不通,会使用TCP的53端口通信,然后首选DNS服务器所在的DC会利用LDAP协议与其他DC同步记录。
根据上面的判断,检查了虚拟机防火墙规则以及网络中的安全规则,发现53端口并没有被屏蔽,所以排除网络原因。
进一步对比抓包看到正常更新主机DNS记录的交互过程如下:
更新请求会经过2次申请,第一次DNS服务器会Refuse掉,然后客户端会发送一个Query请求,进行认证:
认证完成后,会带着认证得到的Record再次进行更新。
而客户环境中的过程是:
可以看到两次都失败了。
在客户端上面查看Windows System Events中,找到下面的报错信息:
系统无法为具有以下设置的网络适配器 注册主机(A 或 AAAA)资源记录(RR):
适配器名称 : {FD2F5820-3CFB-4043-8E0C-71D01CE1988E} 主机名 : CNCSAPVDI445 主域后缀 : shiseido.cn DNS 服务器列表 : 10.26.66.14, 10.26.72.4 向服务器发送更新 : <?> IP 地址 : 10.26.72.237
系统不能注册这些 RR 的原因是因为联系的 DNS 服务器拒绝了更新请求。导致此问题的可能原因有 (a) 你没有被允许更新指定的 DNS 域名,或 (b) 对此名称有权限的 DNS 服务器不支持 DNS 动态更新协议。
若要使用此适配器的特定 DNS 域名和 IP 地址注册 DNS 主机(A 或 AAAA)资源记录,请与你的 DNS 服务器或网络系统管理员联系。 |
进一步查看客户的DNS服务器的记录的Security中有一个未知用户(Account Uknown):
查看客户端这台机器,发现这台机器的本地管理员被Disable了。对比正常的环境发现,这条记录其实是需要客户端本地管理员的Full control权限的,而这里之所以显示未知账户,是因为本地管理员Disable之后,加入域的时候识别不到这个用户了。因为缺少了这个权限,导致更新的时候被DNS服务器refuse掉。
手动添加客户端机器的本地管理员用户的权限后,再次手动同步后问题解决。