在Windows下安装BIND作为DNS服务器+优化

1、下载BIND

    http://ftp.isc.org/isc/bind9/9.4.3/BIND9.4.3.zip

2、安装
    下载回来是zip的压缩包,解压以后直接双击BINDInstall.exe安装,默认安装路径是C:\WINDOWS\system32\dns。bind在win32下将自己注册成服务,服务名叫ISC BIND,程序名为named.exe,启动服务需要用一专有帐户,默认名称为named,密码由安装者自定义。点击install以后,程序便安装在C:\WINDOWS\system32\dns下,这时还不能启动bind服务,会报代号1067的错,得先经过配置。

3、配置
    先运行命令行cmd,cd 至 C:\WINDOWS\system32\dns\bin下,运行rndc-confgen.exe -a,会自动在C:\WINDOWS\system32\dns\etc\下生成rndc.key。执行 rndc-confgen > ..\etc\rndc.conf 生成rndc.conf文件. 此rndc.key是在是bind 9.x版本的新功能,是有关DNS更新以及更新时加密处理的,跟我们个人用户无太大关系,不过基于兼容性,还是照做。接下来,在C:\WINDOWS\system32\dns\etc\下建立named.conf,即bind的配置文件,文件内容如下:

include "c:\windows\system32\dns\etc\rndc.key";
zone "." {
    type hint;
    file "c:\windows\system32\dns\etc\named.root";
};

include一行主要是将rndc.key包含进去,zone "."一行是设置根节点,我们做自己个人的DNS服务器,只要设置这个足够,其他的各个参数可以自己上网去搜索了解,够用就好接下来从http://www.internic.net/下载named.root文件,里面定义了全球的根DNS服务器,下载地址是http://www.internic.net/zones/named.root,需要定期更新,不过用dig工具也可以实时查得根DNS服务器的地址,只不过win32下没有直接将输出结果存为named.root文件的功能,所以还是下载比较方便。named.root文件也是放在etc目录下。如果C盘是NTFS格式的话,还要记得定义启动bind的named用户c:\windows\system32\dns\etc这个目录的完全控制权,不然,还是会报1067的错(如果bind不作为服务启动,直接在cmd里启动,权限不必放行,因为是直接用当前用户的权限嘛)

4、启动

     从“计算机管理--》服务”启动ISC BIND服务。



5、测试


    把网络上的任意一台机器的DNS设置到安装了BIND的机器IP。Ping一下www.google.com。如果通了,恭喜你,做对了。



参考:

http://wiki.ubuntu.org.cn/Bind9%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97


优化设置:


DNS 轮询机制会受到多方面的影响,如:A记录的TTL时间长短的影响;别的 DNS 服务器 Cache 的影响;windows 客户端也有一个 DNS Cache。这些都会影响 DNS 轮询的效果。因此 DNS 的轮询机制并不能做为一个 load balancing 的解决方案,只能作为一个 load distribution 方案。

不过有一个参数你可以试试看是否能调整一下轮询的效果:

在 named.conf 中可以设置 bind 的 round-robin 的给出结果的顺序:

options {
    rrset-order { order random; };
};

rrset-order 支持三个参数:fixed, random, cyclic 。
  fix 会将多个A记录按配置文件的顺序固定给出
  random 会随机给出
  cyclic 会循环给出

下载文件 bind9中文手册

[本日志由 无语 于 2010-01-10 11:51 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 2 | 引用: 0 | 查看次数: -
回复回复无语[2010-01-11 11:54 AM | del]
使用windows自带的dns服务器 漏洞封堵
漏洞危害大,不可不防

  由于这个安全漏洞影响到Windows 2000 Server和Windows Server 2003服务器软件,而且每一种语言版本的Windows服务器都要有一个补丁。微软提供的补丁地址:http://www.microsoft.com/china/technet/security/bulletin/ms07-029.mspx,请根据自己情况选择对应的补丁。

  同时,建议管理员采取如下措施以降低威胁。首先打开注册表编辑器,找到以下注册表位置HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDNSParameters,通过右键菜单新建一个名为“RpcProtocol”的DWORD项目,然后双击新建的值并将该值的数据更改为4,最后重启DNS服务更改生效即可。

回复回复无语[2010-01-07 11:56 AM | del]
标题:BIND+Mysql实现DNS轮询泛解析和IP视图
出处:Wirlfly's Blog
时间:Mon, 02 Apr 2007 22:46:31 +0000
作者:wirlfly
地址:http://wf.xplore.cn/read.php/127.htm

内容:
文档内容:
1.关于本文档
2.Bind+Mysql+Mysql-bind环境搭建
3.Bind配置
4.Mysql数据库设置
5.常见问题解决
文档正文:

1. 关于本文档
     本文档用于DNS和BIND结合配置域名解析和其他更深化的服务,如DNS轮询和squid反向加速结合做简单的流量动态均衡,泛解析和apache mod_rewrite结合做虚拟多级域名,应用IP视图做流量处理。偶尔涉及到源码修正是为更好提供服务和进行调试所用。如果有兴趣可以发邮件至文档头处的邮箱进行讨论。另外,在后面的文档中还有一个自动安装和简单配置bind+mysql+mysql-bind的脚本auto_bind_sdb.sh,可以方便使用者使用。
文档分五个部分:
     1.关于本文档,介绍文档内容和结构。
     2.Bind+Mysql+Mysql-bind环境搭建,略为介绍Bind+Mysql+Mysql-bind的获取和安装。
     3.Bind配置,初略介绍Bind用于DNS轮询,泛解析和IP视图的配置。
     4.Mysql数据库设置,正确设置Mysql数据库取代Bind的文档格式的分布式IP库。
     5.常见问题解决,在配置过程的一些常见问题解决和分析,这是文章的重点。
     如果你是带着问题前来,前往第五和第六部分即可。如果需要了解Bind,还需要参看第二和第三部分。

2. Bind+Mysql+Mysql-bind环境搭建
     1.安装Mysql
      安装mysql的文档很多,在这里不再赘述,无非是这么几个步骤:
引用

     wget mysql*.tar.gz
     tar vxzf mysql*.tar.gz && cd mysql*
     ./configure --prefix=/usr/local/mysql --with-charset=gbk >configure.log 2>&1
     make >make.log 2>&1 && make install >install.log 2>&1


     然后运行mysql_install_db,注意/var/lib/mysql下的权限,然后便可以启动mysql了。需要注意的是,一定要确保mysql –uroot能直接访问进mysql (这是最简便的方法)。

     2.安装bind,使用bind的mysql sdb
我使用的bind版本是9.3.4,在bind的官网ftp上可以下载到最新稳定的bind版本. Bind的mysql sdb在sf.net上可以下载到0.1版本,似乎mysql-bind(mysql sdb)已经停止更新了. 下载到bind-9.3.4.tar.gz和mysql-bind-0.1.tgz后便可以安装了.

引用
tar vxzf bind-9.3.4.tar.gz && tar vxzf mysql-bind-0.1.tgz
cp mysql-bind/mysqldb.c bind-9.3.4/bin/named -f
cp mysql-bind/mysqldb.h bind-9.3.4/bin/named/include -f
同时,修改bind-9.3.4.tar.gz/bin/named/Makefile.in文件:

DBDRIVER_OBJS =
DBDRIVER_SRCS =
DBDRIVER_INCLUDES =
DBDRIVER_LIBS =
更改为
DBDRIVER_OBJS=mysqldb.@O@
DBDRIVER_SRCS = mysqldb.c
DBDRIVER_INCLUDES = -I'/usr/local/mysql/include/mysql'
DBDRIVER_LIBS = -L'/usr/local/mysql/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv
同时在bind-9.3.4/bin/named/main.c中,找到
/* xxdb_init(); */
在后面添加
mysqldb_init();
再找到
/* xxdb_clear(); */
在后面添加
mysqldb_clear();

./configure –prefix=/usr/local/named –enable-threads >configure.log 2>&1
make >make.log 2>&1 && make install >install.log 2>&1


如此,如果没有出错,正常的bind mysql sdb就已经添加了.初步配置好bind和建立mysql的dns数据库后便可以做测试了.

     3.启动并测试
关于bind的配置和mysql的dns数据库建立在第三和第四部分介绍.你可以先查看后面两部分再回来看bind启动和测试.
启动bind有几种模式,在调试的时候,建议采用 bind -u named -g 的方式运行,可以在终端看见详细的调试信息.也可以在mysqldb.c中加入query语句的输出和query.c中加入bind解析流程的输入,来查看bind的运行状态.
而以daemon方式运行则可以采用 bind -u named -c /etc/named.conf .建议采用named用户setuid方式运行.
如果named能够正常运作,这里的正常的运作是说named启动后没有任何fail或任何error,例如加载所有zone/db时都成功,而没有fail.那么便可以在随意一台能互相访问的机器上做测试了.设计client上的/etc/resolv.conf,在第一行添加nameserver named_server_ip. 然后便可以用安装bind时已经额外安装的工具dig/nslookup进行测试了.关于dig和nslookup命令,可以用man 1 dig和man 1 nslookup查看. 最常用的dig进行正向解析:
引用
dig www.mydomain.com
dig -x **.**.**.**(IP)


如果没有得到结果,却有授权信息的话,那么基本配置是正确的,问题可能在A记录或者视图是否正确上.如果连授权信息都不显示的话,那么基本配置出现了问题,如zone未能加载,db链接问题等等.可以查看调试信息分析原因.

3. Bind配置
     bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain。它是目前世界上使用最为广泛的DNS服务器软件,也是大多数系统管理员最喜欢的DNS软件,支持各种unix平台和windows平台。
bind的配置比较繁琐,在其官方网站上有为系统管理员编写的80多页的手册,对于9.0以上的版本早有汉化版本,xplore提供下载地址在此。或者,可以直接参考鸟哥的linux私房菜中关于dns配置一章,基本上能满足所需的要求(http://linux.vbird.org/lin...
这里简单介绍bind配置IP视图,DNS轮询和泛解析.(主要是两个方面: named.conf和zone文件)
bind的IP视图是在bind9中才引用的强大功能,能实现根据ip来源定义不同域名系统的功能,解决多入口则多出口的问题. 在named.conf中,IP视图的关键字是view,其定义规则和zone基本一致,只是zone没有view的一个功能,那就是对于单独的view,可以拥有zone实现域名体系.
例如:
引用
view "outside" {
     match-clients { outside; };
     recursion yes;

     zone "." IN {
         type hint;
         file "var/root.zone";
     };

     zone "test.mydomain.com.cn" IN {
         type master;
         database "mysqldb dns test_mydomain_com_cn_outside localhost root rootroot";
#         file "var/test.mydomain.com.cn.outside";
     };

     zone "10.in-addr.arpa" IN {
         type master;
         database "mysqldb dns 10_outside localhost root rootroot";
#         file "var/10.outside";
     };

     zone "localhost" IN {
         type master;
         file "var/localhost.zone";
         allow-update { none; };
     };

     zone "0.0.127.in-addr.arpa" IN {
         type master;
         file "var/127.0.0.zone";
         allow-update { none; };
     };
};


当然,上面的view_name: “outside”是在前面acl中定义的.但是需要注意的是,多个视图的并集最好是一个ip全集,不要丢掉某些ip.而且,在view视图配置中,如果定义master/slaver模式做分布式的话,slaver接受的notify和数据只会匹配slaver自己ip所在视图的数据,也就是说,如果单个ip的slaver需要和master同步数据的话,永远只能同步一个view,而其他的则不能.解决办法可以考虑在slaver的机器上进行ip alias,设置多个别名分别位于master的不同view中,在master的allow-transfer和allow-notify中添加这些ip别名,便可以完成所有view的数据同步了.更详细的信息参看这篇文档( http://www.chinaunix.net/j... ).
对于DNS轮询,主要是在zone里进行设置.zone的SOA,NS记录基本不变.例如需要将www.mydomain.com关联到192.168.0.[1-4],则可以这么写:
引用

www.mydomain.com.   IN A 192.168.0.1
www.mydomain.com.   IN A 192.168.0.2
www.mydomain.com.   IN A 192.168.0.3
www.mydomain.com.   IN A 192.168.0.4


在逆向zone里可以这么写:
引用

1.0.168.192.in-addr.arpa. IN PTR www.mydomain.com
2.0.168.192.in-addr.arpa. IN PTR www.mydomain.com
3.0.168.192.in-addr.arpa. IN PTR www.mydomain.com
4.0.168.192.in-addr.arpa. IN PTR www.mydomain.com


利用bind做DNS轮询(round rabin)可以将多个session分散到不同的ip上去减缓单台机器的链接压力.但是,它并不能真正做到负载均衡,因为一旦某个ip失效,那么在轮询到该ip的session将全部丢失,bind本身并不能多做些什么.但是,如果使用了bind的mysql sdb的话,这个问题能够得到一定缓解.因为,基于某个协程(一段时间间隔内监听bind做round-rabin的ip)可以动态剔除失效ip,并动态加入复效ip.然而,并不能保证,bind不会将某个session分配给负载最重的ip.
泛解析在多级虚拟域名上有很好的利用.它可以将符合某个规则的域名解析到一个ip上,利用该ip上的其他应用结合(如apache的mod_rewrite),可以实现额外的功能(如多级虚拟域名). 在zone配置中,对于一条这样的记录:
引用
* IN A 192.168.0.111


对于任意匹配到该zone的域名,首先都会查询和该域名完全匹配的记录,如果存在完全匹配的,则将这个域名关联到与之对应的ip上. 如果没有完全匹配的,则将之关联到192.168.0.111上. 而不论* IN A 192.168.0.111写在zone A记录的何处,都遵循该流程(bind9). 这点在named.conf中的view和zone的访问原则是不同的,view和zone只会在第一个匹配的里面进行解析.
对于一般的bind配置,建议参看文章前面提到的鸟哥的linux私房菜关于dns部分.包括如何设置根zone和localhost zone等等,还有rndc控制bind等等.
然而,在mysql的sdb中最初并不能支持泛解析.需要进行源码修改才能支持.这个问题在第五部分给出.

4. Mysql数据库配置

需要注意的是,如果需要利用mysql的sdb,那么需要在named.conf中的zone资源中用database关键字,而不是file关键字或者其他.规则如下:
引用
database "mysqldb dns 10_outside localhost root rootroot";


mysqldb是sdb驱动注册的名称, dns是mysql中bind使用的数据库名, 10_outside是表明,对应于一个zone(里面的内容也就是zone file中的内容), localhost是mysql的host, root是登陆mysql的用户, rootroot是登陆mysql用户的密码(需要明文显示,可以自己修改即可).
看到上面的说明,那么,很显然,需要在mysql中做相应的配置.如创建一个dns的数据库;将root密码改成rootroot(就本例子而言,其实你可以不用root,同时grant权限便可以);创建一个表名10_outside;往表10_outside中按bind的要求引入数据记录,SOA/NS/A/PTR/CNAME/MX/TXT/HINFO等等.但是,需要注意的是,在sdb中,没有设计$ORIGIN和$TTL这两个全局变量,因此,$TTL一般都在记录里写明,$ORIGIN则全部默认为.(根), 也就是说所有记录的第一项都必须以根作为$ORIGIN. 而IN字段是sdb默认的方式,一般省略,目前,非基于inet的DNS已经很少了.
进行如下操作:
引用
mysqladmin -uroot password rootroot
mysqladmin -uroot -prootroot create dns

cat tmpfile user, dbi->passwd, dbi->database, 0, NULL, 0 ))
{
fprintf(stderr,"\nconnect successfully .............. \n");
return (ISC_R_SUCCESS);
}
else
{
fprintf(stderr,"\nconnect fail:%s , host %s,user %s,passwd %s,db %s,port %d ...................\n",mysql_error(&dbi->conn),dbi->host,dbi->user,dbi->passwd,dbi->database);
return (ISC_R_FAILURE);
}


这样方便得到出错信息.然后根据出错信息调试mysql,使bind sdb能成功链接mysql.
4.Dig结果分析处理.
   如果在执行dig xx.mydomain.com 出现以下几种情况:
引用
;; QUESTION SECTION:
;xx.mydomain.com.        IN    A
;; AUTHORITY SECTION:
*****************************************************************
;; Query time: 8 msec


这说明在bind的基本配置都正确,但是数据库表项中没有添加该A记录或者添加的记录有问题,特别是那些对file方式配置bind用熟的管理员,他们已经能很好的使用$ORIGIN进行处理,但是需要明白那就是mysql是不识别$ORIGIN的,一定需要写全称. 同时第一项的最后一个点是不必要的. 如果上面的分析还不能解决问题,请在mysqldb.c中凡事出现mysql_query() API之前将query的str打印出来.便可以知道问题是否出在mysql查询中.
而其他错误,如没有出现
引用
;; AUTHORITY SECTION:


这一选项,说明bind的基本配置出现问题,诸如在mysql的表中是否丢失SOA/NS记录,或者SOA/NS记录出现错误.特别是SOA/NS的第一项后面多了一个小黑点.
具体原理分析请参看第四部分的第三段.自动脚本请参见下一篇文章:http://wf.xplore.cn/read.p...

本文参考了如下网络资源,谨向这些文章的作者致敬:
1. http://linux.vbird.org/lin...
2. http://www.study-area.org/...
3. 官方文档


Generated by Bo-blog 2.0.3 sp1

发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.