bind9新手入门

来源:互联网 发布:java开方 编辑:程序博客网 时间:2024/05/16 10:37

这是介绍bind和dns的权威书籍,由于市面上介绍bind和dns的书比较少,所以本书的
份量也就更重了。本书从dns的基本概念到dns的实现程序bind都作了详细的介绍。如果
你是dns的维护人员,应该通读这本书。如果你想了解一下dns的概念和bind程序的基本
应用,这本书也提供的大量的相关知识。不同层次的人员可根据自已的实际情况选读相关章
节。由于我应用dns只是在局域网内做一下名字解析,应用较浅,所以我只挑了个别章节看
了一下,没有深入dns的高级部份,所以读书笔记也就只包含这部分的内容了。
第一章 背景
    dns是针对ARPnet的特殊问题发展起来的,在整个20世纪70年代,ARPnet还是一个
有几百台主机的很小很友好的网络。仅仅需要一个名为HOSTS.TXT的文件就能容纳所有需
要了解的主机信息。该文件由SRI(Stanford Research Institute的前身)的网络信息中心
(Network Information Center NIC)负责维护,并从一台主机SRI-NIC上分发到整个网络。
ARPnet的管理员通常定期通过电子邮件的方式将他们的变更通知SRI,同时还定期ftp到
sri-nic,以获取最新的HOSTS文件。但随着ARPnet的增长,这种方法行不通了。流量和负
载使SRI的线路不堪重负;名字冲突,造成网络混乱;在不断扩张的网络上要维护文件的
一致性变得越来越难。关键问题是HOSTS文件的结构不是很好,最终导至了hosts文件的
失败和落伍。
    ARPnet的管理者们开始投入研究,为HOSTS.TXT文件寻求继任者。Paul Mockapetris,
当时在南加州大学的信息科学所,负责设计新系统的体系架构。1984年,他发布了描述DNS
的RFC882和RFC883。后来它们被RFC1034和RFC1035所取代,也就是目前的DNS规范。
目前,还有很其它RFC补充RFC1034和RFC1035的内容,它们描述了DNS的安全问题,
实现问题,管理问题等。
DNS 简述
实际上,DNS是一个分布式数据库,它允许对整个数据库的各个部份进行本地控制;同时
整个网络也能通过客户-服务器方式访问每个部份的数据。借助备份和缓存机制,DNS将具
有强壮性和足够的性能。DNS的数据库结构同unix文件系统的结构非常相似,就像一棵倒
着的树。
第二章 DNS是如何工作的
介绍了DNS的工作原理,一些功能和名词。

略。
第三章 如何开始工作
获是bind软件
选择一个域名
第四章 建立BIND
建立区数据,包括正向解析文件(名字到地址的映射),反向解析文件(地址到名字的映射)。
每个网络都有包含它自已的反向映射数据文件。名字服务器用named.conf配置文件把所有
的区数据文件绑定在一起。
区数据文件
区数据文件中的大部份条目被称为DNS资源记录。DNS查找是不区分大小写的,但大写是
被系统保留的,建议用小写。资源记录必须从一行的第一列开始。在DNS RFC中,表示资
源的记录是按特定顺序排列的,但这不是必须的。顺序如下:
SOA记录        指示该区的权威
NS记录        列出该区的一个名字服务器
A        名字到地址的映射
PTR        地址到名字的映射
CNAME        规范名字(相对于别名而言)
注释是以“;”号开始的
设置区默认的TTL值。
在8.2版本前,SOA记录中最后一个字段设置区默认的TTL值。在8.2版出来前,公布了
RFC2308,将SOA记录中最后一个字段的含义改为了“否定缓存TTL”,它的意思是一个远
程名字服务器能将区的否定响应缓存多长时间,否定响应是报告某个域名或某个域名的某个
数据类型不存。8.2版及后继版中用$TTL控制语句。名字服务器在查询响应中提供这个值,
允许其它服务器将数据在缓存中存放TTL所指定的时间。如果数据不是经常变动的,可以
考虑把它的值设为几天,1周大概是使之有意义的最大值。1小时会引起不必要的DNS流量。
如:$TTL 3h
SOA记录
表示对于该区数据而言,这个名字服务器是最好的信息来源。根据这个SOA记录,我们的
名字服务器就享有对该区的权威。
movie.edu    IN    SOA    terminator.movie.edu.    al.robocop.movie.edu. (
            1    ;序列号
            3h    ;3小时后刷新
            1h    ;1小时后重试
            1w    ;1周后期满
            1h)    ;否定缓存TTL为1小时
IN 代表Internet类
terminator.movie.edu. 代表主名字服务器
al.robocop.movie.edu. 把第一个点号换成@,代表邮件地址,对电脑没意义,只对人有意义
在反解文件的头几行也添加类似的SOA记录。在这些文件中把movie.edu改为
249.249.192.in-addr.arpa
NS记录
在文件中添加的下一条记录是NS记录。这些记录表明区movie.edu有两个名字服务器。这
些名字服务器运行在主机terminator.movie.edu and wormhole.movie.edu上。
movie.edu    IN    NS    terminator.movie.edu
movie.edu    IN    NS    wormhole.movie.edu
同SOA记录一样,也在反解文件中添加记录
地址和别名记录
接下来创建名字到地址的映射
;主机地址
localhost.movie.edu.    IN    A    127.0.0.1
robocop.movie.edu.    IN    A    192.249.249.2
terminator.movie.edu.    IN    A    192.249.249.3
misery.movie.edu.    IN    A    192.249.253.2
;
;多宿主主机
wormhole.movie.edu.    IN    A    192.249.249.1
wormhole.movie.edu.    IN    A    192.249.253.1
;
;别名
bigt.movie.edu.        IN    CNAME    terminator.movie.edu.
wh.movie.edu.        IN    CNAME    wormhole.movie.edu.
wh249.movie.edu        IN    A    192.249.249.1
wh253.movie.edu        IN    A    192.249.253.1
像bigt.movie.edu这样的别名不能出现在资源记录的右边。换名话说,在资源记录的数据部
份总是要使用规范名(terminator.movie.edu)。
如果一台主机是多宿主的(具表不止一个网络接口),让每个接口对应一个唯一的别名,再
为这个别名创建一个地址(A)记录,为每个对所有地址都通用的别名创建一个CNAME记
录。能否在所有情况下都使用地址记录而不用CNAME记录呢?大部份程序是可以的,但
sendmail会有问题。sendmail通常用规范名替换邮件首部中所有使用的别名,只有当邮件首
部中的名字有相关的CNAME记录时才进行这种规范化。如果你的别名没有对应的CNAME
记录,你的SENDMAIL就必须知道你的主机所有可能为外界所知的别名,这就要求你对
SENDMAIL进行一些额外的调整。
PTR记录
创建地址到名字的映射,使用PTR资源记录
1.249.249.192.in-addr.arpa.    IN    PTR    wormhole.movie.edu.
2.249.249.192.in-addr.arpa.    IN    PTR    robocop.movie.edu.
3.249.249.192.in-addr.arpa.    IN    PTR    terminator.movie.edu.
对于192.249.253/24也创建类似的数据。
需要设置回送网络的正反解文件。如果没有则查找127.0.0.1就会失败。
根线索(root hint)数据。从ftp.rs.internic.net里上载。
建立BIND配置文件
从版本4到版本8,BIND配置文件的语法变化非常大,版本8到版本9没有变化。可以通
过运行named-bootconf程序把版本4的配置文件转换成版本8的文件。这个程序随BIND源
码一起发布。
h2n工具是一个PERL脚本,用来把HOSTS文件转换成区数据文件。
运行名字服务器
#named
设置本地域名,这样可以直接查找主机名而不用加上域名。有两种方法设置:hostname or
/etc/resolv.conf。在resolv.conf的第一行加入domain  movie.edu。或者在terminator主机上
把hostname设置为terminator.movie.edu。不要在名字后加点号。
用远程的名字服务器来查找你的区中的域名,把本地域名作为第一个参数,远程名字服务器
作为第二个参数。如果失败,可能是你的区还没有向你的父名字服务器注册。需与父域管理
员联系,检查区授权。
# nslookup carrie getekeeper.dec.com
运行辅名字服务器
需要再建立一个名字服务器以增强DNS的健壮性。以便分担负荷和容错。在named.conf文
件中定义是主还是辅服务器。主要区别是主名字服务器从区数据文件中读取数据,辅服务器
是通过网络从其它的名字服务器装载数据的,这个过程称为“区传送”(zone transfer)。
建立
在辅名字服务器建立区数据文件目录(/etc/named),并把named.conf,named.root,db.127.0.0
这三个文件拷贝过来。修改配置文件,把域的master改为slave,然后添加一个带主服务器ip
地址的masters行。例如:
zone "movie.edu" in {
    type master;
    file "db.movie.edu";
};
改为
zone "movie.edu" in {
    type slave;
    file"bak.movie.edu";   如果不想在辅名字服务器上保存区数据文件的备份,可以删除这
行。
    masters {192.249.249.3};
};
SOA值
序列号:格式为yyyymmddnn,nn代表这一天是第几次修改。在每次更新了你的区数据后
不要忘了增加序列号的值。辅名字服务器通过比较这个序列号是否加载一份新的区数据拷
贝。
refresh(刷新):告诉该区的辅名字服务器相隔多久检查该区的数据是否是最新的。
retry(重试):如果辅名字服务器超过刷新间隔时间后无法访问主服务器,那么它就开始隔
一段时间重试连接一次。这个时间通常比刷新时间短,但也不一定非要这样。
expire(过期或期满):如果在期满时间内辅名字服务器还不能和主服务器连接上,辅名字服
务器就使用这个我失效。这就意味着辅名字服务器将停止关于该区的回答,因为这些区数据
太旧了,没有用了。设置时间要比刷新和重试时间长很多,以周为单位是较合理的。
否定缓存TTL(生存期):这个值对来自这个区的权威名字服务器的否定响应都适用。
新版的bind的时间设置灵活了很多,以前只接收以秒为单位(一周有608400秒)。现在可
以用h(小时),d(天),w(周)表示。
RFC1537建议顶级名字服务器采用以下值:
refresh        24h
retry        2h
expire        30d
否定缓存ttl    4d
新版8,9改变了区数据传播的方式,轮询的特性还在,但增加了当区数据改变后进行通知
的功能,在15分钟之内通知辅名字服务器,要加载该区的一份新的拷贝了。
多个主服务器
可配置最多十个主名字服务器,以分号分隔。辅名字服务器会依序尝试每个IP地址对应的
主服务器。一直到收到回答为止。但从8.2以后,辅服务器会查询所有的主服务器,从具有
最高序列号的服务器那里传送区数据。
第五章 DNS与电子邮件
DNS与主机表相比的一个优势在于支持高级邮件路由。当邮件收发器只用HOSTS文件工作时,所能做的最多也就是试着把邮件直接发送到主机的IP地址,如果失败,要么延迟发送,过一会再重试,要么就将邮件退回给发送者。dns提供一种机制,能为邮件的发送者指定备份主机,它还允许一台主机为别的主机承担邮件处理任务。
DNS用一种资源类型来实现增强的邮件路由,那就是MX记录。它为一个域名指定一个邮件交换器。它是一台主机,负责处理或转发该域名的邮件。还定义了一个优先级值,它决定了邮件收发器使用它们顺序,优值小的先使用。
peets.mpk.ca.us.    IN    MX    10    relay.hp.com 指定relay.hp.com是peets.mpk.ca.us的邮件交
换器,优先级是10
第六章 配置主机
reslov.conf中有五个命令可你使用,domain,search,nameserver,sortlist,options。
domain定义本地域名,从第一行开始,后跟一个空格,然后是本地域名,本地域名后面不
要有点号。
例如:domain movie.ecu
LOCALDOMAIN环境变量也可以设置每个用户的本地域名。
建议使用hostname设置。
search指令
search corp.hp.com paloalto.hp.com hp.com
解析器会首先搜索corp.hp.com,然后是paloalto.hp.com,再是这两个域的父域hp.com。
nameserver指令
默认地,解析器首先查找本地上的名字服务器,也可以通过该指令指示解析器去使用其它主
机的域名服务器。
nameserver 15.32.17.2
nameserver 15.32.17.3  (可指定多个服务器)
注意:在多个nameserver的情况下不要使用回送地址。
sortlist指令
当查询收到的响应包括多个地址时,该设置允许你选择更希望使用的子网和网络。
sortlist 128.32.42.0/255.255.255.0    最多可指定十个优先的子网和网络。
options指令
options debug    设置RES_DEBUG,在标准输出上产生大量调试数据。前提是在编译BIND时
定义了DEBUG参数。
options ndots:2    如果域名参数中的点号大于或等于这个值,那么解析器会在使用搜索列表
之前,先查找这个域名。如果你相信你的用户更有可能输入部份域名而需要使用搜索列表时,
你可以增加这个值。
8.2版引入以下选项
options attempts:2  允许你指定在放弃之前向resolv.conf文件中每个名字服务器发送查询的
次数。
options timeout:2 指定每个对resolv.conf文件中名字服务器的查询的初始超时时间。默认为
5,最大为30。对第二轮以及接下来的几轮查询,解析器会把初始超时时间加倍。再除以
resolv.conf中文件服务器的数量。
options rotate    使你的解析器能使用resolv.conf文件中所有的名字服务器。从而分散负载。默
认只要第一台服务器正常,解析器是不会去查询其它服务器。
options no-check-names 关掉解析器的名字检查功能,默认是打开的。它检查响应的域名是
否合法。
如果你想指定多个选项,可以把它们写成一行:
options attempts:4 timeout:2 ndots:2
第七章 维护BIND
BIND9与8一样,也用controls来决定服务器如何监听控制信息的。
controls {
    inet * allow {any;} keys {"rndc-key"}
};
这决定了rndc用户要用什么加密密钥来验证身份才能给服务器发送控制信息。如果没有指
定keys,服务器启动时会出错
key "rndc-key" {
    algorithm hmac-md5;
    secret "xxxxx";
};
为安全起见,使用包括文件:
include "/etc/rndc.key"。唯一支持的算法是HMAC-MD5。
要使用rndc,你需要创建一个rndc.conf文件告诉rndc要用哪个认证密钥。而哪些名字服务
器要使用它们。
options {
    default-server localhost;
    default-key "rndc-key";
};
key "rndc-key" {
    algrithm hmac-md5;
    secert "xxxxx";
};
更新区数据文件,两种方法,手工 或 h2n。
重新开始一个SOA序列号。改变主服务器序列号,重启,停止辅服务器,删除所有备份区
数据文件。因为备份文件被删除,所以辅服务器就会加载一个新的区数据文件,这个区数据
文件就是最新的。
TXT
xxx    IN    TXT    "this is a test"   限制2K字符串数据
RP  负责人邮件地址
robocop        IN    RP    root.movie.edu
组织文件
当域大的时候,区数据文件就会越来越多,有两个命令可以帮助我们组这些文件:
$ORIGIN        改变一个区数据文件的起点
$INCLUDE    在当前区数据文件中插入一个新文件
改变系统文件的位置,主要是从安全角度考虑。
options {pid-file "server1.pid";}    改变PID的文件名,可以在一台主机上运行两个名字服务
器。
options {named-xfer "/HOME/....";}    在9版中没有这个文件。
options {dump-file "/home/yangjing/named/named_dump.db";}    服务器转储数据库
options {statistics-file "/home/yangjing/named/named.stats";}     服务器统计数据
日志
有七个级别,允许存在文件中或伸用syslog日志系统。
critical
error
warning
notice
info
debug [level]    dns服务器特有
dynamic        dns服务器特有
语法如下:
logging {
            [ channel channel_name {
              ( file path_name
                 [ versions ( number | unlimited  ]
                 [ size size_spec ]
               | syslog ( kern | user | mail | daemon | auth | syslog | lpr |
                          news | uucp | cron | authpriv | ftp |
                          local0 | local1 | local2 | local3 |
                          local4 | local5 | local6 | local7  
               | null ;
              [ severity ( critical | error | warning | notice |
                           info  | debug [ level ] | dynamic ; ]
              [ print-category yes_or_no; ]
              [ print-severity yes_or_no; ]
              [ print-time yes_or_no; ]
            }; ]
            [ category category_name {
              channel_name; [ channel_name; ... ]
            }; ]
            ...
          };
example:
logging {
    channel my_syslog {
        syslog daemon;
        severity info;
    };
    channel my_file {
        file "my_named.log" versions 3 size 10k;
        severity dynamic;
        print-category yes;    在日志中输出附加信息:消息类别,严重性,时间。
        print-severity yes;
        print-time yes;
    };
    category default {unll;};    如果对于某个类别你没有指定任何通道,那么就会把这些消息发
送到default类所分配的通道中。
    category statistics {my_syslog;my_file;};
    category queries {my_file;};
};
要记录这些日志,还要再打开名字服务器的调试功能。
#rndc trace
versions 3    文件版本,会保存file,file.0,file.1,file.2,如果不设置将有99个版本。在服务
器启动和重新加载时将file.1-file.2,file.0-file.1,file-file.0。
size 10k    文件的大小限制。
default_stderr通道可把信息写到服务器的stderr中。
null通道可以用来丢弃不想要的信息。
bind9类别
general        包括所有未明确分类的信息。
client        处理客户端请求
config        配置文件分析和处理
database    数据库相关信息
dnssec        处理DNSSEC签名响应
lame-servers    发现错误授权
network        网络操作
notify        异步区变动通知
queries        查询日志
resolver    名字解析,包括对来自解析器的递归查询的处理
security    认可/非认可的请求
update        动态更新事件
xfer-in        从远程名字服务器到本地服务器的区传送
xfer-out    从本地到远程的区传送
第八章 扩展你的域

略。

第九章 担当父域

略。
第十章 高级特性
新版BIND8.1.2 9.10有大量的新特性,其中最突出的是支持DNS动态更新,异步区变动通
知(NOTIFY),以及增量区传送。
地址匹配列表和ACL
acl name {address_match_list;};        定义一个列表,以后可用name引用
acl "hp-net" {192.168.1.192/26;};
有四个预定义的列表:none,没有任何IP地址;any,所有IP地址;localhost,本地主机的
任一IP地址;localnets,本地主机任一网络接口所在的网络。
第十一章 安全
限制查询  allow-query{}
防止未授权的区传送 allow-transfer{}
以最小权限运行bind,-u 以该用户运行, -g 以该组运行,-t 使用chroot()转到的目录。
使用chroot步骤见书例子。
第十二章 nslookup and dig

略。

原创粉丝点击