Windows 2000 server 以其优异的性能,逐渐被广泛的应用。在Windows 2000 server中新增了Active Directory服务,该服务存储所有网络资源的信息,如计算机、共享文件夹、用户等等。它还通过标准的 LDAP 协议(轻量目录访问协议)将此类信息提供给用户和应用程序。与Windows NT 4.0 中的域控制器相比,Active Directory 与 DNS 的关系更加密切。实际上,DNS是支持 Active Directory 所必需的。通常,安装 Active Directory 服务器时,如果网络上找不到 合适的DNS 服务器,就会在安装过程中安装 DNS 服务。
Windows 2000 中最重要的新概念之一就是:计算机不再主要用网络基本输入/输出系统 (NetBIOS) 名称来标识,而是使用 DNS 完全合格的域名称 (FQDN) 来标识。 因此,要登录并访问 Windows NT 域中的资源,Windows 2000 计算机必须查找 DNS 服务器,以定位 Active Directory 域控制器。也就是说Windows 2000 中服务位置和名称解析的主要机制是域名系统(DNS),它在启动和登陆过程使用DNS来查找如LDAP和Kerveros这类的服务,以便至少检索到一个域控制器的IP地址.因此,也可以说Windows 2000中Active Directory依赖于DNS.
Windows 2000不仅通过DNS定位资源和服务,而且将自己的名字及所提供的服务注册到DNS数据库中并动态更新。
在以下原因或事件下会发送动态更新:
? 在 TCP/IP 协议的属性中添加、删除或修改了任何网络连接的 IP 地址。
? 用 DHCP 服务器更改或刷新了任何网络连接的 IP 地址。例如,在启动计算机或者使用了 ipconfig /renew 命令的时候。
? ipconfig /registerdns 命令用于手工强制刷新 DNS 中的客户机名称注册。
? 计算机关闭后再次启动。
Windows 2000使用以下过程进行 DNS 动态更新:
1. 客户机请求其已配置的 DNS 服务器为待更新 DNS 名称的 DNS 区域查找授权名称服务器。
2. DNS 客户机的已配置 DNS 服务器会执行标准名称解析过程,并发送 SOA(起始授权机构)资源记录和负责此查询 DNS 区域授权的名称服务器的 IP 地址。
3. 客户机将动态更新请求发送给负责这个待更新 DNS 名称的区域的授权 DNS 服务器。
客户机的动态更新请求可能包括一列前提条件,只有满足这些条件后才能完成更新。前提条件类型包括:
o 存在资源记录集。
o 不存在资源记录集。
o 名称正被使用。
o 名称未被使用。
4. 授权 DNS 服务器判断这些前提条件是否满足。如果满足,授权 DNS 服务器就执行请求的更新。如果不满足前提条件,则更新失败。不论是哪种情况,授权服务器都会应答客户机,说明更新是否成功。
在 Windows 2000 中,默认情况下,所有 DNS 客户计算机的 A 资源记录和 PTR 资源记录都被注册到 DNS 中。此外,域控制器和提供服务的其它计算机将 SRV(服务)资源记录注册到 DNS 中。由于 SRV 资源记录提供了将服务名称解析到 IP 地址的途径,将它们注册到 DNS 使 Windows 2000 客户计算机可以定位域控制器和其它类型的服务器。
SRV记录格式如下:
_service. _protocol.domain.name IN SRV priority weight port target
service 是指服务的名称如ldap, protocol是指传输层的协议名如tcp, 紧跟着是域名,priority是指优先级,当客户机找到指向同一服务的多条记录时,它将使用priority值最小的一项。Weight是指权重用于负载的分配,当客户机找到多个具有相同priority值得SRV记录,它将根据weight值选择适当的服务器。Port 和target分别指服务的端口号及提供服务的主机的名字。
因此,用于支持 Active Directory的 DNS 服务器必须支持 SRV 记录。而且,Microsoft 极力推荐这些 DNS 服务器也支持RFC 2136所描述动态更新。
在实际应用过程中,我们有时会遇到这样情况:网络中使用UNIX下的BIND作主域名服务器而且由于种种原因不能把域名服务放在Windows 2000上,在这种情况下如何从 Windows NT 4的域平滑地升级到Windows2000的Active Directory呢?
经过上面的分析可知,可以使用运行于任何 OS 上的任何支持 SRV 记录的 DNS 服务器与Windows 2000协同工作。同时微软极力推荐使用支持动态更新(按照 RFC 2136)的 DNS 服务器。而BIND 在8.2.2版本以上都是完全满足要求的。
基于上述认识,我们以一个实例来说明在网络中使用UNIX下的BIND作域名服务器的情况下,如何从Windows NT 4的域平滑地升级到Windows2000的Active Directory:
在一个局域网络中,主域名、邮件放在SUN工作站上,域名是mail.ddri.com.cn。IP地址为:10.65.65.1,操作系统为solaris 2.6中文版,域名服务器软件为solaris 2.6中捆绑的的BIND 4.9.3。.另外有两台服务器安装Windows NT 4.0分别作两个域的主域控制器。主机名分别是 zyxx.ddri.com.cn和xxdc.ddri.com.cn,IP地址分别为10.65.65.16和10.65.65.56。
首先,下载BIND软件包,当前最新版本是9.2.0beta,我们使用的是9.1.3.rc1,可以在ftp://ftp.isc.org/isc/bind9/9.1.3/下载源代码包bind-9.1.3.tar.gz然后进行编译,编译方法可以参照软件包中的文档。这里我们从http://www.sunfreeware.com/下载已经预先编译好的bind-9.1.3rc1-sol26-sparc-local.gz,另外需要下载gzip-1.3-sol26-sparc-local来解压缩。先使用admintool下先安装gzip-1.3-sol26-sparc-local。然后用gzip ?d bind-9.1.3rc1-sol26-sparc-local.gz解包,最后再次使用admintool 来安装bind-9.1.3rc1-sol26-sparc-local。
其次,修改配置文件:在BIND 8.2.2以后的版本中主要使用allow-update和 update-policy语句来实现和控制动态更新。
allow-update的语法是:
allow-update { “acl-name”;} ;
或allow-update { ip_addr;} ;
update-policy用来定义简单的安全策略 。因为当使用动态更新时是会带来一些安全问题的,所以建议使用安全策略来控制动态更新。语法是:
update-policy {(grant/deny) identity nametype name [type];};
每一个动态更新请求如果成功的匹配规则。那么动态更新被允许或禁止。
下面是实际的配置文件/etc/named.conf:
options {
directory "/var/named";
pid-file "named.pid";
allow-query { any;};
auth-nxdomain yes;
transfer-format one-answer;
forwarders {
10.65.1.1;
10.65.1.2;
10.65.50.1;
};
};
zone "." {
type hint;
file "root.cache";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "localhost.rev";
notify no;
};
zone "ddri.com.cn" {
type master;
file "ddri.com.cn.db";
allow-transfer {
10.65.1.1;
10.65.1.2;
10.65.50.1;
};
allow-update {
10.65.65.0/24;
};
update-policy {
grand *.ddri.com.cn. self *.ddri.com.cn. A;
grand *.ddri.com.cn. self *.ddri.com.cn. SRV;
};
zone "65.65.10.in-addr.arpa" {
type master;
file "10.65.65.db";
allow-transfer {
10.65.1.1;
10.65.1.2;
10.65.50.1;
};
allow-update {
10.65.65.0/24;
};
update-policy {
grand *.ddri.com.cn. self *.ddri.com.cn. A;
grand *.ddri.com.cn. self *.ddri.com.cn. SRV;
};
};
};
在这个配置中允许所有IP 地址为10.65.65网段和域名为ddri.com.cn的计算机使用动态更新。(这个配置文件中还使用了转发器,并且为了在与低版本BIND进行区传送时兼容,我们使用了transfer-format one-answer;语句。)关于这个文件中的其它语句及可选项的语法,可以参考《BIND 9 ADMINISTRATOR REFERENCE MANUAL》。
接着,配置区文件中的静态项。需要注意的是区文件是要被动态更新的,所以文件权限必须是被named可写的。下面给出了写好的正向解析的区文件 /var/named/ddri.com.cn.db的例子:
@ IN SOA mail.ddri.com.cn. root.ddri.com.cn. (
2000120615 ; Serial Number
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
86400 ) ; Minimum TTL of 1 day
@ IN NS mail.ddri.com.cn.
@ IN A 10.65.65.1
ddri.com.cn. IN NS mail
localhost IN A 127.0.0.1
mail IN A 10.65.65.1
info IN A 10.65.65.18
zyxx IN A 10.65.65.16
ddri.com.cn. IN MX 10 mail
反向解析记录区文件在这里就不例举了。
最后:修改启动脚本使BIND 9 自动运行。在各种UNIX、Linux修改方法是不尽相同的,可以参考相关资料来修改。在solaris 2.6 下修改/etc/inet.d/inetsvc:
找到…
if [ -f /usr/sbin/in.named -a -f /etc/named.boot ]; then
/usr/sbin/in.named; echo "starting internet domain name server."
fi
修改为:
if [ -f /usr/local/sbin/named ]; then
/usr/local/sbin/named; echo "starting BIND 9.1.3rc1."
fi
(在缺省情况下BIND 9安装在/usr/local/sbin下)
重新启动服务器,BIND 9的配置就生效了。现在就可以升级到Windows 2000的Active D