当前位置:Linux教程 - Linux文化 - bind8配置参考

bind8配置参考


前些天在这儿问有没有中文的bind8资料,结果没找到,只好啃man,
前天和linuxrat聊,要我把心得写一写,今天周末有点时间,把一点心得
贴出来,与朋友们共享,希望对你配置bind8有所帮助。

同时也把这篇文章献给一个在国外的老朋友yi tang.希望她在异国他
乡工作顺利,生活快乐。

众所周知,以前在internet上用的DNS系统是bind4, bind8是bind4的
后一个版本。和bind4相比,bind8更完善,管理者能更充分的控制它的行
为,但这两者之间的差别还是很大的,变化的不仅是格式,也多了很多新
的概念。在bind8里可用的语句有logging,options,zone,acl,key,trusted
-keys,server,controls,include. 它里面的说明可以用c,c++,或shell/
perl的格式。我想主要介绍一下用bind8配置基本的能工作的主、辅域名
服务器的方法(它们是internet上主要使用的两种域名服务器),如果有兴
趣更深入的了解可以参考man和
RFC 882, RFC 883, RFC 973, RFC 974, RFC 1033, RFC 1034, RFC1035,
RFC 1123, RFC 2308 "Name Server Operations Guide for BIND".

主域名服务器正常工作的必要条件:
1. 安装bind8软件,这在很多unix的发行版中都可以找到,
在小红帽里有rpm包可以直接安装.或者去http://freesoft.online.sh.cn,
ftp://studio.sinet.net.cn都可以找到。
2. 几个必须的配置文件:
named.conf
named.ca
named.local
mater file(就是bind4里的zone file)

在这几个配置文件中,最主要的是named.conf,在/etc下,
它是named启动时缺省的启动文件.一个典型的named.conf文件至少包括
options,和zone.如:

options {
directory "/var/named";
};

zone "0.0.127.in-addr.arpa" in {
type master;
file "named.local";
};

zone "." in {
type hint;
file "named.ca";
};

zone "99.cn.net" in {
type master;
file "db.99.cn.net";
};

在这里面,options定义master file存放的路径,对应于某一个域,
named就会到这里找数据文件,如有一个www.99.cn.net的require请求,
named就会到/var/named下找db.99.cn.net这个文件,查出www.99.cn.net
的ip. Zone定义一个域,如99.cn.net这个域,type定义域名服务器的类
型,master 说明这是一个主域名服务器,第一个zone定义本地服务器为
它自己的回送域的主服务器,将地址127.0.0.1映射为localhost,几乎在
所有类型的域名服务器里都可以看见这个域。第二个 zone用来定义一个
高速缓存初始化文件,在named.ca 里至少包含着根服务器的名字和地址
(这些根服务器也会变化). 一般named.ca不需要修改,named.local里只
需要修改SOA纪录里域和联系人。(有些书上说named.local里的NS纪录是
个摆设,但我建议最好还是有这一句) file定义99.cn.net这个域的
master file.以下就是这个master file的内容:


@ IN SOA ns.your.domain. Root.your.domain. (
1999110901 ; Serial Number
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
3600000 ; Expire after 6 weeks
86400 ) ; Minimum TTL of 1 day

@ IN NS ns.your.domain.
Localhost IN A 127.0.0.1
www IN A 202.98.106.12

这里面的@定义当前域,也就是your.domain, IN定义这是一个inter
-net类型的纪录,SOA(start of authority)标志一个授权域的开始,
ns.your.domain. 为开创该域的服务器,可以用主域名服务器,
root.your.domain.定义联系人,root后的. 就是email里的@,括号里的几
个数字定义和本域有关的几个参数,单位是秒,前四个参数用于辅域名服
务器更新master file,其中;后面的是说明,serial number用于辅域名服
务器判断主域名服务器的 master file是否更新,所以如果你有辅域名服
务器,在每次修改 master file后就应该修改这个序列号,以便辅域名服
务器更新这个域的 master file. Refresh定义辅域名服务器刷新的时间,
retry定义如果主服务器未响应,辅服务器重试的时间间隔,expire 定义
这个域的过期时间,就是说如果辅服务器在连续42天里都没有从主服务器
取到该域的信息,辅服务器就丢弃该域。第五个参数定义这个域在其他域
名服务器的cache 里的有效期,过了这个时间其他的域名服务器就会到这
里来重新查询相关的信息。

NS表明这个域的域名服务器是ns.your.domain. NS纪录可以有多个。
Localhost和www这两条A纪录的含义是将localhost解析到127.0.0.1 和将
www.your.domain解析到202.98.106.12, 现在一个基本的主域名服务器就
建立好了,但需要特别说明的是,在master file里,ns.your.domain.后
面的. 这个. 表示这是一个完整的纪录,否则服务器就会自动给你加上当
前域,例如,www表示www.your.domain,而www.your.domain就会变成
www.your.domain.your.domain,正确的表示方法可以是www或www.your.domain.
如果不给这个.足够的重视,就很容易出错。

如果你需要维护很多域,可以在named.conf里加上相应的zone,然后
在/var/named下建立该域的master file,最后用SIGHUP来reload域名服务
器。如果你需要作反向解析,可以仿照上面named.conf里第一个zone进行,
在它相应的master file里用PTR指针将ip转换为域名。

辅域名服务器的建立

建立辅域名服务器的方法和主域名服务器基本相同,主要的区别在于
named.conf里的zone类型,它的type为slave,以下是一个辅域名服务器的
named.conf:

options {
directory "/var/named";
};


zone "0.0.127.in-addr.arpa" in {
type master;
file "named.local";
};

zone "." in {
type hint;
file "named.ca";
};

zone "99.cn.net" in {
type slave;
file "db.99.cn.net";
masters { 202.98.21.141; };

可以看出,这个配置文件与主域名服务器的区别,type用salve定义
该服务器为辅域名服务器,然后指出主域名服务器的 ip。但是需注意第
一个zone的type仍为master.另一个区别就是辅域名服务器的master file
不用手动建立,它自己会从主域名服务器传过来,named-xfer 缺省一次
传10个域。辅域名服务器的master file和主域名服务器的master file
基本没有什么区别。这样一个可以工作的辅域名服务器就建好了,如果这
是一个新建的辅域名服务器,那么在你启动它后很快就会看见/var/named
下多了很多master file. :)

还有一点我想说明的是,如果 internet上的域名服务器乱了,那么
整个internet 就乱了,所以维护域名的人一定要谨慎从事。因为以前在
internet上工作的都是bind4,如果你维护的域比较多,在从bind4转到
bind8时可能会为建立格式完全不同的named.conf而头痛,一个好消息是
在bind8的发行版中有一个named-bootconf的shell脚本和named-bootconf.pl
的perl脚本可以帮你完成从bind4的named.boot到bind8的named.conf的
转换,为了偷懒,我也写了一个perl脚本完成从主域名服务器的named.conf
到辅域名服务器的named.conf的转换,见附录(仅供参考)。

附录:named-masterslave.pl

作用:将主域名服务器的named.conf转换为辅域名服务器的named.conf
用法:将主域名服务器的named.conf和这个脚本放在同一个目录下,
将脚本中masters里的ip改为你自己的主域名服务器的ip,运行这个脚本,
就会得到一个named.confd的文件,将文件中有关named.local和named.ca
的zone按上面的例子修改,然后存成 /etc/named.conf就可以了。如果你
有兴趣也可以把这个脚本改进一些,使其他人用起来更方便, 不过不要忘
了告诉我一声噢。 *_^

#!/usr/bin/perl
$filename="named.conf";
open(In,"$filename");
@lines=;
close(In);
open(Out,">named.confd");
foreach $line(@lines) {
if ($line=~ /type/)
{ $line=~ s/master/slave/;}
if ($line=~ /file/) {
$line=~ s/;/;\n masters { 202.98.21.141; };/;}
print Out "$line";
}
close(Out);


--
※ 修改:·ttao 於 Nov 13 00:25:09 修改本文·[FROM: bbs.ndc.neu.edu]
※ 修改:·ttao 於 Nov 13 12:40:09 修改本文·[FROM: bbs.ndc.neu.edu]
※ 修改:·ttao 於 Nov 13 13:11:58 修改本文·[FROM: bbs.ndc.neu.edu]
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: bbs.ndc.neu.edu]


——摘自:水木清华站