Windows下安装BIND作为DNS缓存服务器
以前写过一篇文章,也是关于windows下面的dns 缓存服务器的,叫《Acrylic:让你在win一分钟建立DNS缓存服务器》 , Acrylic的确够小巧的,这次要介绍的是大名鼎鼎的bind啦。
由于我以前在LINUX下架设过bind9,因此这次在WINDOW下的配置也基本上按照LINUX下的来。
说明:我的window 7安装在E盘。 安装bind主要目的是方便自己和寝室的兄弟们上网,加速解析网站域名的速度。
本文所讲匀在windows 7 专业版下测试通过。
1、下载BIND
http://www.isc.org/downloads/current
目前最新版本为:BIND9.7.0-P1.zip
本文相关文件下载
2、安装
下载回来是zip的压缩包,解压以后直接双击BINDInstall.exe安装,默认安装路径是C:\WINDOWS\system32\dns。 bind在win32下将自己注册成服务,服务名叫ISC BIND,程序名为named.exe,启动服务需要用一专有帐户,默认名称为named,密码自己弄一个吧。
这里我为了方便操作,就把它安装在 E:\dns 了。点击install以后,程序便安装在 E:\dns下,如果这里通过命令net start named 或者运行services.msc打开服务管理启动named服务,会报代号1067的错:应用程序意外终止。必须先经过配置才行,如果配置后还报这个错误,很可能是配置文件有错误。比如我这次由于一个include 指令没有加分号,也会报这个错误。
3、配置
先运行命令行cmd,cd 至 C:\dns\bin下,运行
1 | rndc-confgen.exe -a |
,会自动在C:\dns\etc\下生成rndc.key。此rndc.key是在是bind 9.x版本的新功能,是有关DNS更新以及更新时加密处理的,跟我们个人用户无太大关系,不过基于兼容性,还是照做。接下来,在C:\dns\etc\下建立named.conf,即bind的配置文件。
named.conf内容如下:
1 2 3 | include "e:/dns/etc/named.conf.options"; include "e:/dns/etc/named.conf.local"; include "e:/dns/etc/named.conf.default-zones"; |
1 | mkdir e:/tmp/bind |
注意,这里我指定了三个DNS服务器,前两个是铁通的,第三个是电信的,这里你要根据你的实际情况修改成自己的),
e:/dns/etc/named.conf.options内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 | options { directory "e:/tmp/bind"; forwarders { 61.234.254.6; 61.234.254.5; 59.51.78.211; }; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; }; |
named.conf.local包含了rndc.key,另外还有我自己配置的一些DNS解析,如果只是要作缓存服务器可以不要那两个zone(这里我定义了两个zone,一个是正解区域,另一个是反解区域),
named.conf.local内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // // Do any local configuration here // include "e:/dns/etc/rndc.key" ; zone "test.domain" { type master; file "e:/dns/etc/db.test.domain"; }; zone "30.172.in-addr.arpa" { type master; file "e:/dns/etc/db.172.30"; }; |
named.conf.default-zones 定义了根节点的文件和其它一些保留地址的文件,named.root里面定义了全球的根DNS服务器,下载地址是http://www.internic.net/zones/named.root,需要定期更新。可以从 http://www.internic.net/或者 ftp.internic.net下载named.root文件,并重命名为db.root放在 e:\dns\ect\下面。
named.conf.default-zones内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // prime the server with knowledge of the root servers zone "." { type hint; file "e:/dns/etc/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "e:/dns/etc/db.local"; }; zone "127.in-addr.arpa" { type master; file "e:/dns/etc/db.127"; }; zone "0.in-addr.arpa" { type master; file "e:/dns/etc/db.0"; }; zone "255.in-addr.arpa" { type master; file "e:/dns/etc/db.255"; }; |
4、启动ISC BIND服务
在cmd 中:
1 | net start named |
或者直接运行 services.msc 打开”服务“,启动ISC BIND服务。
如果bind安装目录所在的磁盘是NTFS格式的且启动服务时还是报1067的错的话,还要记得修改权限,使得启动bind的named用户对e:\dns\etc这个目录有完全控制权。
5、测试
把网络上的任意一台机器的DNS设置到安装了BIND的机器IP。Ping一下www.google.com 如果通了,OK,well done!
或者直接在装BIND的机器上,
1 2 3 | cd e:\dns\bin dig google.com #或者nslookup google.com |
win_bind9.zip 下载 (2.3 MB, 138 次)
有图为证:







博主好,有没有直接配置bind,而不是使用转发的教程呢
还有 这个缓存越来越多 会不会占用太多的资源 如何限制大小或者清空?
弱弱问一句 如果test.com 在前面定义的三个DNS服务器中有解析 那么test.com最后的解析结果究竟是来自那三个DNS服务器呢 还是来自自己定义的zone 也就是优先级的问题
如果上网的机子把主DN设置为此服务器,那么查到的肯定是此服务器的记录,也就是说,本服务器的优先级是大一些的。
那么如何将DNS的缓存保存成文件写入硬盘而不是只在内存中呢 我搜索了很长时间没有结果
虽然每条缓存都有TTL 但是因为我不是服务器 不是24小时连续开机 经常要重启 关机 每次重启 内存中的缓存就没了 需要再向上级DNS提交查询 无形中浪费了一部分时间
这么好的文章 收藏了!
这东西原理是什么?
为什么可以加速域名解析?
难道域名解析到你自己电脑上了?
不懂
@白银时代, 嗯 ,本机相当于dns cache服务器。在TCP/IP设置里将DNS设置为127.0.0.1 即可实现加速了
@荒野无灯, 这样做对其他访客岂不是无意义?
@白银时代, 首先是加速本机访问时的解析速度,但是,其它计算机与你在同一个小局域网(比如连接同一个交换机)中,那么他们把首选DNS设置为你的IP也能相应地加速解析。
有点难度,先留个记号,以后回来慢慢吃透,呵呵
这个…太专业了 不懂