不知道您是否有灵感了﹖没错﹕刚纔在 named.conf 裡面﹐每一个 zone 所指定的 file 都出现在这裡﹗先让我们看看 root zone 的档案内容吧﹕ 下载这个文件并保存成named.ca。这样就可以保证你的DNS服务器能解析外网的域名了
; This file holds the inFORMation on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . "
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC registration services
; under anonymous FTP as
; file /domain/named.root
; on server FTP.RS.INTERNIC.NET
; -OR- under Gopher at RS.INTERNIC.NET
; under menu InterNIC Registration Services (NSI)
; submenu InterNIC Registration Archives
; file named.root
;
; last update: Aug 22, 1997
; related version of root zone: 1997082200
;
;
在 /var/named 中的 RR 记录档裡面的註解符号﹐和 /etc/named.conf 的註解符号不一样哦﹕在 named.conf 中是用双斜线“ // ”﹔而在这裡则使用 “ ﹔”符号。无论如何﹐您都不能用 “ # ”来做註解符号就是了。(好混乱哦~~~ 这就是电脑﹗^_^ )
在上面这个 named.ca 档案裡面﹐您如果将所有的註解行拿掉﹐您会发现一共有 13 行是以‘ . ’开头的﹐那就是所谓的 root zone 了﹗然后﹐第二栏都是‘ 3600000 ’﹐这是 TTL (Time To Live) 设定﹐也就是在 cache 中保留的时间﹐以秒為单位(所以这裡是 100 小时)。其后的‘ NS ’是“Name Server”的意思﹐是 DNS 记录名称之一﹐也就是负责这个记录的 name server 是哪一台主机(这裡一共由 13 台主机共同负责 root zone 的 NS 服务)。
虽然我们这裡用 NS 指定了 name server 的主机名称﹐但对电脑系统来说﹐这些名称必须能解释為 IP 位址才有用(呵~~ 这个正是 DNS 系统的功能)﹐所以﹐这裡分别用 13 个‘ A ’记录﹐也就是 Address 的意思﹐解释 [A-M].ROOT-SERVER.NET. 这些主机各自的 IP 位址所在。
如果您了解 DNS 的查询模式﹐您会知道 DNS 伺服器在查询非自己管辖的 zone 的时候﹐首先会向 root 查询下一级的 zone 在哪裡﹐然后逐级查询下去。但问题是﹕当 named 刚啟动的时候﹐在 cache 裡面一片空白﹐它怎麼知道 root zone 的 servers 在哪裡呢﹖这不是一个矛盾吗﹖所以﹐就必须靠这个档案告诉 named 关於 root zone 的 servers 有哪些﹖以及在哪裡﹖ --- 明白了吗﹖
因為这个档是以静态的方式维护的﹐很难保证这个档的内容永远都正确﹐如果 root zone 的记录发生改变了怎麼办(虽然这机会不大)﹖或许﹐您已经在档案的开头註解那裡得知﹐您可以在任何时候透过 ftp 或 gopher 取得这个档案的最新版本。如果您还没读过那些註解﹐那就请带著字典读一下吧。如果您真的有需要更新这个 named.ca 档﹐那可以按如下步骤进行﹕
ftp FTP.RS.INTERNIC.NET
anonymous
your_account@your.mail.server
cd domain
get named.root
bye
cp /var/named/named.ca /var/named/named.ca.bak
cat named.root > /var/named/named.ca
除了刚才的 named.ca 之外﹐第二个 zone 的记录档是 localhost.zone ﹐从 named.conf 中您应该知道它是 zone "localhost" 的记录档﹐它的内容如下﹕
$TTL 86400
$ORIGIN localhost.
@1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS @
1D IN A 127.0.0.1
内容很简单﹐但您是否真的了解每一行的设定意思呢﹖如果不清楚或不确定﹐那就让我们一起探讨探讨吧。
首先﹐第一行是一个 TTL 设定﹐目前是定义出这个记录档裡面的各项记录的预设 TTL 值為 86400 秒(刚好是一天)。您的记录档或许没有这行﹐事实上没什麼关系﹐您可以自己补上﹐否则﹐在啟动 named 的时候会碰到一些警告﹐无伤大雅的﹔但如果您的确在意那些警告﹐那就加上这行。您要知道﹐在记录档中宣告的所有资源记录(RR - Resource Record)﹐都一定有一个 TTL 设定﹐如果没有﹐则使用这裡预设的值。
第二行是一个 ORIGIN 设定﹐说明下面的记录源出何处(这裡是源出 localhost. 的记录)。请您加倍留意最后的一个小数点“ .”﹐少了它或多了它﹐记录名称完全不一样﹗在 DNS 记录中﹐我们称这样以小数点结尾的名称為“ 全域名称 ”即 FQDN ( Fully Qualified Domain Name ) 。如果缺少了这个点会怎样呢﹖就会将所属的 ORIGIN ( @ ) 附加在记录名称后面﹔而这 ORIGIN 就是上一个 $ORIGIN 宣告之后的名称﹐如果在前面找不到 $ORIGIN 宣告﹐那就以 /etc/named.conf 中定义的 zone 名称為基準。以目前的例子来说﹐如果没有这个小数点的话﹐“localhost”会变成“localhost.localhost”﹔但如果有小数点的话“localhost.”就只能是“localhost.”。所以﹐这个小点“.”非常重要﹐在以后设定中一定要非常留神﹗﹗(这也初学者最常犯的错误之一)
然后﹐第三行﹐是一个 SOA 记录的设定﹐在这裡我们看到一个特殊字符“ @ ”﹐它就是 ORIGIN 的意思﹐也就是刚纔所定义的 $ORIGIN localhost. 内容﹐您可以写成 localhost. 也可以用 @ 来代替。假如这个档前面没有定义 $ORIGIN 的话﹐那这个 @ 的值就以 named.conf 裡的 zone 為準。既然这样﹐当然是使用“@”啦﹐尤其对於像我这样的懒惰鬼来说﹐巴不得少打一串字﹐同时还能避免因打字不準所造成的失误﹐何乐不為﹖
在 @ 之后﹐是 TTL 的设定﹐这裡是 1D﹐也就是一天的意思﹐如果您喜欢﹐可以用 86400 (秒) 来设定﹐如果这裡的 TTL 没有设定﹐则参考前面的 $TTL 值﹐如果前面没有定义 $TTL﹐那就参考其后介绍的 minium ttl 设定。
Tips﹕事实上﹐您可以為每一个 RR 记录设定其自己的 TTL ﹐只要将数字写在第二个栏位﹐也就是‘IN’前面就可以了。