在Windows平台架设DNS服务器

ISC (Internet Systems Consortium) 在二零零七年八月二十七日宣布了 Bind 8 历史使命的终结。ISC 鼓励还在使用 Bind 8 的用户从安全方面考虑要迅速迁移到 Bind 9。 Bind 是互联网上应用最广泛,却又最不为人所注意的开源应用。从本质上说 Bind 是一个分布式数据库,里面储藏了整个互联网的数字类型地址和字母类型域名的对应。没有它,我们在网上就寸步难行!

Windows 平台架设 DNS 服务器
+lzy
DNS 的概念
DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。 DNS 命名用于 Internet TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时, DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。
例如,多数用户喜欢使用友好的名称(如 [url]www.netadmin.com.cn[/url] )来查找计算机,如网络上的邮件服务器或 Web 服务器。友好名称更容易了解和记住。但是,计算机使用数字地址在网络上进行通讯。为更容易地使用网络资源, DNS 等命名系统提供了一种方法,将计算机或服务的用户友好名称映射为数字地址。
下图显示了 DNS 的基本用途,即根据计算机名称查找其 IP 地址。

本例中,客户端计算机查询 DNS 服务器,要求获得某台计算机( [url]www.netadmin.com.cn[/url] )的 IP 地址。由于 DNS 服务器能够根据其本地数据库应答此查询,因此,它将以包含所请求信息的应答来回复客户端,即一条主机 (A) 资源记录,其中含有 [url]www.netadmin.com.cn[/url] IP 地址信息 (219.141.209.244)
此例显示了单个客户端与 DNS 服务器之间的简单 DNS 查询。实际上, DNS 查询要复杂得多,包含此处未显示的许多其他步骤。
 
DNS 的劫持及架设自有DNS 服务器的必要性
首先解释一下什么是 DNS 劫持。 DNS 劫持是网络安全界常见的一个名词,意思是通过某些手段取得某一目标域名的解析记录控制权,进而修改此域名的解析结果,通过此修改将对此域名的访问由原先的 IP 地址转入到自己指定的 IP ,从而实现窃取资料或者破坏原有正常服务的目的。举个例子,例如新浪原指向 60.28.175.137 ,这个 IP 是新浪正常服务的服务器 IP 。而某骇客拿到了修改 [url]www.sina.com.cn[/url] 域名解析的权利,将其解析记录修改为 2.2.2 .2 ,则修改后对于 [url]www.sina.com.cn[/url] 的访问都会指向 2.2.2.2 这个 IP 。此骇客在 2.2.2.2 这个他自己所有的 IP 上放了一个完全仿冒的新浪主页,只是将登陆新浪邮箱的这个界面改为把客户填写的邮箱名和密码记录下来。这样普通客户访问 [url]www.sina.com.cn[/url] 时看到的是表面为新浪主页,而实际为假冒页面的李鬼了。此时客户如果继续登陆其新浪邮箱,则其帐户就被黑人拿到了。
有些省份的电信运营商,出于某种目的对于自所辖的 DNS 服务器做了明显违反互联网行为规范的某些做法,只是表现有所差异,导向的并不都是同一个结果,但大多都是搜索引擎。搜索引擎成了金矿,劫持用户流量成了国内电信运营商的家常便饭。
要不想被 DNS 劫持,只有用别处的 DNS 服务器或者干脆架设自己的 DNS 服务器。笔者将在本文讲述如何在 Windows 平台上架设自己的 DNS 服务器,一来可以避免 DNS 被劫持的现象;二来也可以避免 DNS 不稳定造成访问障碍。
 
DNS 服务器的简介
Windows Server 2000/2003 )都集成了 DNS 服务器组件,但不在本文讨论范畴之内。本文即将讨论的是 BIND 服务器程序。 Bind 的全名是 Berkeley Internet Name Domain ,最初的时候是由加州大学柏克莱分校所发展出来的 BSD UNIX 中的一部份,目前则由 ISC 组织来负责维护与发展。
Bind 是用来解决网域名称与 IP 地址对应的软件,且是个被广泛使用的 DNS 服务器软件,它提供了强大及稳定的名称服务,因此有近九成的 DNS 服务器主机都是使用 Bind 。目前最新的版本到 Bind 9 BIND 支持各种 UNIX 版本,也有 Windows 版本。鉴于 BIND 在互联网中地位的重要性,本文将介绍 BIND Windows 平台下最基本的安装和配置。
 
准备BIND 软件包
BIND 官方站点为 [url]www.bind.com[/url] 。目前最新版本为 9.4.0 ,可在 [url]http://www.isc.org/index.pl?/sw/bind/[/url] 中下载相应的版本。 BIND 9.4 9.3 之上增加了很多特点,限于篇幅,详情读者可参见 [url]http://www.isc.org/index.pl?/sw/bind/[/url]
在官方站点下载 BIND 9.4.0 .zip ,下载地址是:
[url]http://ftp.isc.org/isc/bind9/9.4.0/BIND9.4.0.zip[/url]
 
BIND 的安装
下载回来的是一个 zip 压缩包,解压之,双击其中的 BINDInstall.Exe 来安装 BIND

缺省安装在 C:\WINDOWS\system32\dns ,服务账户名默认为 named ,可以自定义为其他名称,并为此账户定义一个密码。注意的是,缺省是不会生成配置文件和一些默认的域名解析。但可以到 [url]http://www.bind.com/bind.html[/url] 下载一些标准的配置文件。按缺省方式安装后,将在 C:\WINDOWS\system32\dns\ 可看到两个子文件夹 bin etc etc 文件夹是存放配置文件(熟悉 UNIX 的读者应该明白,典型的 UNIX 风格)。
 
BIND 的配置
       BIND 毕竟是从 UNIX 平台下发展过来的软件,所以很多风格上和 Windows 软件完全不同,而和 UNIX 软件包相似,采用 conf 文件来配置,而不是靠注册表和视窗界面来配置。
       C:\WINDOWS\system32\dns\bin 下建立一个文件 named.conf ,这是比较基础的配置文件,关系到 BIND 能否正常运行。
有一点地方要注意,对于 Windows 平台下的配置文件,和 UNIX 版本的有少许不同,那就是路径的写法不同,如类 UNIX 版本为 /var/log/named.log ,而相应的 Windows 版本则为 C:\windows\system32\dns\log\named.log ,切记修改!以后程序中如果读取文件,都要注意路径的写法。
本段将分析 named.conf 文件,其中的数据仅作演示之用,请根据实际具体情况参考配置。
logging {
channel default_syslog { syslog local2; severity error; };
channel audit_log { file "C:\windows\system32\dns\log\named.log"; severity error; print-time yes; };
category default { default_syslog; };
category general { default_syslog; };
category security { audit_log; default_syslog; };
category config { default_syslog; };
category resolver { audit_log; };
category xfer-in { audit_log; };
category xfer-out { audit_log; };
category notify { audit_log; };
category client { audit_log; };
category network { audit_log; };
category update { audit_log; };
category queries { audit_log; };
category lame-servers { audit_log; };
};
    以上部分是日志文件的设置,其中的 file "C:\windows\system32\dns\log\named.log"; 这一句指定了日志文件的位置,要正常启动 named ,必须要保证这一文件是存在的,并且 named 进程对它有读写权限。
options {
directory “C:\windows\system32\dns\etc\named";
listen-on-v6 { any; };
forwarders {
your.upper.DNS.address;
};
 
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
/*
* If running in a sandbox, you may have to specify a different
* location for the dumpfile.
*/
dump-file "/etc/named_dump.db";
};
以上部分,是一些基本的配置项。要注意的地方是:
文件中提到的 C:\windows\system32\dns\etc\named 缺省是没有建立的,需要手动建立。
文件中的:
forwarders {
your.upper.DNS.address;
};

这是配置前向 DNS ,当遇到无法解析域名的时候,它将自动转发到你设置的前向 DNS 来进行解析。    
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
     以上部分是配置本地回环域、线索域。
其中, file "named.root"; 为根区文件,所在的目录是 options directory "C:\windows\system32\dns\etc\named"; 指定的。
zone "test.com" {
type master;
file "zone.test ";
};
 
zone "0.168.192.in-addr.arpa" {
type master;
file "zone.test.rev";
};
zone " 4.0.0 .f.0.5.2.0.1.0.0.2.IP6.ARPA" {
type master;
allow-transfer { any;};
allow-query { any; };
file "ipv6.rev";
};
 
zone "lowerlevelzone.test.com" {
type slave;
masters {
192.168.1.1;
};
};
以上部分是关于自定义域的配置,这一部分是配置文件中需要重点关心的部分。其中
zone "test.com" {
type master;
file "zone.test ";
};
是设定 test.com 域, type master 指明该域主要由本机解析,而 file "zone.test " 指定其解析文件为 zong.test ,目录为 options 中设定的目录本例中为 \etc\named
zone "0.168.192.in-addr.arpa" {
type master;
file "zone. test.rev";
};
是指定 ipv4 地址逆向解析, type slave 指明该域主要由低一级的域名服务器解析。
masters {
192.168.1.1;
};
是指定低一级的域名服务器 IP 地址。
至此已初步建立了一个标准的 named 的主配置文件,接下来建立对应的域名解析或逆向解析文件: \etc\namedb\zone.test
该配置文件的格式大致如下:
; From: @(#)localhost.rev 5.1 ( Berkeley ) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the \etc\namedb directory.
;
@ IN SOA ns.test.com. root.test.com.(
2005030116; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.test.com.
ns IN A 192.168.0.1
www 6 IN AAAA 2001:250:f004::10
www IN A 192.168.0.2
 
本文件前半部分是一些默认的参数设置,只需把域名改成对应你要设置的域即可,限于篇幅,对几个参数只稍做解释。
几个需要注意的地方:
IN NS ns.test.com;
这一条必须有,来指定本域的域名服务器
域名必须以 "." 结尾。
该文件的第二部分(倒数三行)是指定该域上的主机:
ns IN A 192.168.0.1
ns 为主机名, A 代表地址类型为 IPV4 地址, 192.168.0.1 是实际 ip 地址,这一条记录的含义是 ns.test.com ip 地址为 192.168.0.1
www 6 IN AAAA 2001:250:f004::10
www6 为主机名, AAAA 代表地址类型为 IPV6 地址, 2001:250:f004::10 是其 IPV6 地址,这条记录的含义是 www6.test.com ip 地址是 2001:250:f004::10
接下来是关于 IP 地址逆向解析的部分:
ipv4 逆向解析: etc\namedb\zone.test.rev
 
; From: @(#)localhost.rev 5.1 ( Berkeley ) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the \etc/namedb directory.
;
@ IN SOA ns.test.com. root.test.com.(
2005030116; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns.test.com
;
 
1 IN PTR ns.test.com.
2 IN PTR [url]www.test.com./[/url]
至此,几个配置文件已基本配置完成,接下来通过 cmd (命令提示符) 进入 bin 的目录。
由于 BIND 安装软件的说明中要求,故先需要生成一个运行 rndc.key
rndc-confgen �Ca
生成密钥文件:
rndc-confgen >; rndc.conf
执行后,当前目录将有一个 rndc.conf 的密钥文件。该文件可以用文本编辑器打开,如 UltraEdit ,该文件内容大致如下:
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "o2iuzvKIljrrxw 7A 4cJITQ==";
};
 
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
 
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "o2iuzvKIljrrxw 7A 4cJITQ==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
注意,请把后面以:
# Use with the following in named.conf, adjusting the allow list as needed:
开始的这一部份,加到 named.conf 后面并去掉注释 # ,否则会导致问题,稍后讲述。后面的 rndc status 将显示超时退出。
 
BIND 的测试
安装、配置完 BIND 后,接下来就该测试 BIND 运行是否正常。
在命令提示符中,进入 C:\WINDOWS\system32\dns\ bin 目录,执行:
named -g
参数 -g 选项表示前台运行,并将调试信息打印到标准输出,这在我们安装调试阶段是非常有帮助的。
当你有看到 running 字样时,说明已经配置正确了,如果要控制 BIND 9 的运行,更方便的使用 rndc 命令来进行,再打开一个命令提示符窗口并进入 bin 目录,执行:
rndc status
当显示如下信息时,可能会显示如下信息…
number of zones: 5
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
server is up and running
如果显示以上信息,则说明配置成功, BIND 可以正常运行。如果没有显示上面的信息,请检查的 named.conf 文件里面是否配置了 rndc.conf 里面的 key
至此为止,一般可以实际运作的 BIND 9 就建立起来了,您可以 rndc rolead 一下,让最新的设置及软件生效。
如果在安装过程中出现错误,可先检查完错误,再接着安装下去。
也可以在客户端使用命令 nslookup 来测试 BIND 是否已经正常运行。 Nslookup Windows Linux 下都有相对应的版本,执行 nslookup 即进入与服务器交互状态,这时键入域名或 ip 地址就可以向服务器正向或逆向查询。
>[url]www.test.com[/url] 正向域名解析
>192.168.0.1 逆向 IP 解析
>set type=AAAA 设置查询地址类型为 IPv6 地址类型。
>set type=A 设置查询地址类型为 IPv4 地址类型。
>exit 退出。
 
总结
       虽然 Windows 也提供了 DNS 服务器组件,但是和 BIND 相比,这两款软件是各有千秋的,不过在服务器领域上,字符界面的 Linux 远胜于视窗界面的 Windows 。本文作者的初衷,是想让那些 Windows 网管员们了解一下 Windows 版本的 UNIX 软件是怎么一回事,如果能对网管员有所帮助,并激发他们产生进一步的探索热情,本文的目的也就达到了。

本文出自 “✟lzy's blog” 博客,转载请与作者联系!

你可能感兴趣的:(windows,bind,dns,休闲,混源)