10. 什么是DNS数据库?有什么用?
一个域的DNS数据库是由该域的主名字服务器的系统管理员维护的一个文本文件集合。这些文本文件成为区文件。就是你在"named.conf"中定义的file。
他们包括2种类型的项:分析器命令(如$ORIGIN和$TTL)和资源记录(Resource Records)。资源记录是数据库的真实地部分,而分析器命令只是提供输入记录的一些简便途径。
资源记录的基本格式:
[name] [ttl] [class] type data
name字段:表示一个主机或者一个域。我经常在配置文件中看到“@”,其实就是代表本域,可以写全。待会实验中作测试。
ttl字段:以秒为单位,和TCP/IP中的ttl差不多含义,就是存活时间,只是网络中ttl是指跳数(好像是这样)。在BIND9中,要用$TTL指令,而在8里面,则没有这个指令。一般将存活时间设为一周,这样,可以明显减少网络流量和DNS的负载。
class字段:一般都使用“IN”,对应的是internet。
type字段:有SOA,A,NS,PTR,MX,CNAME等,我待会会详细看这些类型。
data字段:根据type字段不同而不同。
一般,一个区的资源记录写在最前面,然后是NS记录,其他顺序可以任意。
下面我将列出来一些经常用到的记录。并且结合实例说明。
(1)SOA记录:每个区仅有一个SOA记录,该区一直延伸到遇见另一个SOA记录为止。SOA记录包括区的名字,一个技术联系人和各种不同的超时值。下面是例子:
; 在named.conf中指定的zone语句中指定的名字。假设为marco.fudan.edu
@ IN SOA ns.marco.fudan.edu. admin.marco.fudan.edu. (
20040701 ;Serial
8H ;Refresh, 8 hours
1H ;Retry, 1 hour
2W ;Expire, 2 weeks
1D ) ;Minimum, 4 days
详细说明:
"@"是当前区名的简写。在这里可以用marco.fudan.edu.代替(千万不可忘了最后的".",后面也是)。它的值是在named.conf文件中的zone语句中指定的名字;可以在这个区文件中使用$ORIGIN分析器指令进行更改。
这里没有ttl字段。
class当然是IN了。
ns.marco.fudan.edu.是该区的主名字服务器(注意后面的"."哦)
admin.marco.fudan.edu.是域管理员的邮箱,要把第一个"."换成"@",并且舍弃最后一个"."才行。
圆括号不能乱放,用来让SOA记录跨越好几行。不过在9中可以随便放。做实验时测试。
第一个数值Serial代表这个区的序列号。可以供从服务器判断何时获取新数据的。这里我设成今天的日期。更新数据文件必须要更新这个序列号,否则从服务器将不更新。切记!!!
第二个数值Refresh指定多长时间从服务器要与主服务器经行核对。(当然现在有了notify这个参数,一旦更新了主服务器,将立即通知从服务器进行更新,那这个参数有什么用呢?用来当notify参数关闭时...嘻嘻)
第三个数值Retry代表如果从服务器试图检查主服务器的序列号时,主服务器没有响应,则经过这个时间后将重新进行检查。
第四个数值Expire将决定从服务器在没有主服务器的情况下权威地持续提供域数据服务的时间长短
第五个数值Minimum指高速缓存否定回答的存活时间。可能指客户机如果要解析某台服务器的ip,而这台服务器是不代表客户查询的存活时间。
$TTL,expire和minimum参数最终决定使用DNS的每个人放弃旧数据值。
(2)NS记录:识别对一个区有权威性的服务器(即所有主服务器和从服务器),并把子域委托给其他机构。
格式为:
zone [ttl] IN NS hostname
例如:
marco.fudan.net. IN NS ns.marco.fudan.net.
marco.fudan.net. IN NS anchor.marco.fudan.net.
marco.fudan.net. IN NS ns.marco.tj.net.
(3)A记录:是DNS数据库的核心。他们提供了以前在/etc/hosts文件中指定的主机名到IP地址的映射。一个主机必须为它的每个网络接口得到一条A记录。
格式为:
hostname [ttl] IN A ipaddr
例如:
anchor IN A 192.168.1.10
表示anchor.marco.fudan.net.的ip为192.168.1.10
(4)PTR记录:从ip地址到主机名的反向映射。与A记录一样,必须为每个网络接口有一条PTR记录。
先介绍in-addr.arpa:这下面的域的命名类似于反向字节顺序的IP地址。例如,我们的243子网的区是243.151.128.in-addr.arpa。
格式为:
addr [ttl] IN PTR hostname
例如,在243.151.128.in-addr.arpa区中与anchor的A记录相对应的PTR记录为:
100 IN PTR auchor.marco.fudan.net.
(5)MX记录:电子邮件系统就是使用MX记录来更有效的路由邮件。
格式为:
name [ttl] IN MX preference host ...
例如:
(1)除非停机否则自己接收邮件。这里列出了3个,当前2个都停机时,将发送给第三个。而第3个必须写全,因为他不是默认域的成员。
yuyu IN MX 10 yuyu
IN MX 20 mailbox
IN MX 50 lpq.com.
(2)自己不接收邮件
yuyu IN MX 10 mailbox
IN MX 20 anchor
IN MX 50 lpq.com.
说明一点,中间的优先级自己定,中间隔开一点是为了将来能够插入新的主机而不用重新编号。
(6)CNAME记录:为主机分配额外的名字。用来缩短一个长主机名或者用来和某种功能联系起来。
格式为:
nickname [ttl] IN CNAME hostname
当BIND遇到一条CNAME记录时,它就会停止对该昵称的查询,并切换到真实的名称。并且注意,如果一台主机引用了别名,那么他的A,NS,MX等都必须用真实名称。
例如:
colo-gw IN A 128.138.243.25
colo IN CNAME colo-gw
www IN CNAME colo
其余的诸如LOC记录,SRV记录,TXT记录,IPv6资源记录,A6记录,DNAME记录等我认为自己几乎用不到,即使用到了再查也可以,不用去用心记住这些并不常用的记录。也根本记不住:(
11. 更新区文件的步骤是什么?
如果你对某个区做了一次更改时,你就要做:
(1)主服务器上的数据文件必须更新
(2)必须增加区的SOA记录中的系列号
(3)运行ndc reload,发信号通知named实施这些更改
(4.a)如果notify是打开的,则从服务器会马上更新更新后的区数据。
(4.b)如果notify是关闭的,则需要等SOA记录中的refresh后才能得到新的区数据,或者在从服务器上运行ndc reload