Next Previous Contents

3. 暂存专用名字服务器

DNS 配置的首种尝试,对拨号使用者非常有用.

一台暂存专用名字服务器将会为域名查询找出答案并且在下一次你需要那个域名的时候记得答案.

首先你需要一个称为 /etc/named.boot 的文件.当 named 启动时会读取这个文件. 目前它应该单纯地包含:


;  Boot file for nicolais caching name server
;
directory /var/named
;
; type          domain                          source file or host
cache           .                               root.cache
primary         0.0.127.in-addr.arpa            pz/127.0.0

非常重要: 在这文件的某些版本中这个文件的本列表会在第一个非空白字符前包含一些空格或 tab 键. 这些不应该出现在文件中.如果你从本 HOWTO 剪贴下来,记得删除任何前面的空白

`directory' 这一行告诉 named 到哪里去找寻文件.所有其後命名的文件都将是相对于此目录的. 根据 Linux 文件系统标准正确的目录应该是在 /var/named. 因此 pz 是位於 /var/named 之下的,也就是,/var/named/pz

称为 /var/named/root.cache 的这个文件是在此命名的. 这个 /var/named/root.cache 应该包含:


 .       518400  NS      D.ROOT-SERVERS.NET.
 .       518400  NS      E.ROOT-SERVERS.NET.
 .       518400  NS      I.ROOT-SERVERS.NET.
 .       518400  NS      F.ROOT-SERVERS.NET.
 .       518400  NS      G.ROOT-SERVERS.NET.
 .       518400  NS      A.ROOT-SERVERS.NET.
 .       518400  NS      H.ROOT-SERVERS.NET.
 .       518400  NS      B.ROOT-SERVERS.NET.
 .       518400  NS      C.ROOT-SERVERS.NET.
;
D.ROOT-SERVERS.NET.     3600000 A       128.8.10.90
E.ROOT-SERVERS.NET.     3600000 A       192.203.230.10
I.ROOT-SERVERS.NET.     3600000 A       192.36.148.17
F.ROOT-SERVERS.NET.     3600000 A       192.5.5.241
G.ROOT-SERVERS.NET.     3600000 A       192.112.36.4
A.ROOT-SERVERS.NET.     3600000 A       198.41.0.4
H.ROOT-SERVERS.NET.     3600000 A       128.63.2.53
B.ROOT-SERVERS.NET.     3600000 A       128.9.0.107
C.ROOT-SERVERS.NET.     3600000 A       192.33.4.12

记住我说过要去掉空白字符!

这个文件描述了在这个世界上的根名字服务器.这会随时间而改变并且必须加以维护. 如何能保持它随时更新请参见 维护篇. 在 named 的在线使用手册里有这个文件的描述,但是这,以我看来,最适合那些已经了解 named 的人们.

named.boot 里的下一行是 primary 这一行. 我将会在稍後的章节里解释它的用法,目前只要把它设为在 pz 子目录下一个称为 127.0.0 的文件:


@               IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

接下来,你需要一份看起来像这样的 /etc/resolv.conf 文件:


search subdomain.your-domain.edu your-domain.edu
nameserver 127.0.0.1

`search' 这一行指出对于任何你想连往的主机域名应该搜寻的领域. `nameserver' 这一行指出你的机器可以在哪个地址上找到一台名字服务器, 在这个例子中是你自己的这台机器,因为你在它上面执行 named. 如果你想列出好几个名字服务器把它们都放在一行 `nameserver' 里,用空格隔开. (注意: named 从不读取这个文件,而是使用 named 的域名解答器会读取.)

来说明一下这个文件有什么作用: 如果某个客户端尝试要找寻 foo 的话, 那么首先尝试的是 foo.subdomain.your-domain.edu 这个域名, 然后接下来是 foo.your-fomain.edu 这个域名,最后则是 foo 这个域名. 如果有某个客户端尝试要找寻 sunsite.unc.edu 的话, 那首先尝试的是 sunsite.unc.edu.subdomain.your-domain.edu 这个域名(没错,它真笨! 不过它就是这么做), 然后接下来是 sunsite.unc.edu.your-domain.edu 这个域名,最后则会是 sunsite.unc.edu 这个域名. 你可能不会想放太多领域到 search 该行里去,搜寻它们会多花时间.

这个范例假设你属於 subdomain.your-domain.edu 这个领域, 那么你的机器,可能会称为 your-machine.subdomain.your-domain.edu. 在 search 这行里不应该包含你的 TLD (顶层领域 Top Level Domain,在这个例子中是 edu 这个领域). 如果你经常需要连线到在另外一个领域里的主机你么你可以把该领域像这样地加进 search 这行里:


search subdomain.your-domain.edu your-domain.edu other-domain.com

依此类推.很明显的是你得放入真实的域域名来取代这些域名.请注意在域域名的最后面并没有句号 '.'.

接下来,根据你 libc 版本的不同需要修正 /etc/nsswitch.conf 或者是 /etc/host.conf 文件.

/etc/nsswitch.conf

这是一个很长的文件,它指出到何处去取得各种不同的数据格式,从什么文件或是数据库取得. 它的顶端经常会包含一些有用的注解.找出以 `hosts:' 作为开头的那一行,它应该是这样:


hosts:      files dns

如果文件里没有以 `hosts:' 作为开头的行那么把上面这一行加上去. 它是说程序应该先在 /etc/hosts 文件里找寻,然后根据 resolv.conf 询问 DNS.

/etc/host.conf

它可能包含有数行,其中应该有一行以 order 作为开始而且它看起来会像这样:


order hosts,bind

如果文件里没有 `order' 这一行的话那么你应该贴一份上去. 它告诉主机域名解析函数先在 /etc/hosts 里找寻,然后查问名字服务器 (在 resolv.conf 里你说在 127.0.0.1 这个地方). 在大部分 Linux 发行套件中最后这两个文件的文件在 resolv(8) 的在线使用手册中(执行 `man 8 resolv' 即可). 本在线用手册我觉得可看,而且每个人,特别是 DNS 管理者,都应该要阅读它. 现在就做,如果你对你自己说“我稍後将会去做”,你将永远不会去接近它.

3.1 起始 named

这些全部完成後就可以起始 named 了.如果你使用拨号连线的话那么请先连上网络. 键入 `ndc start' 并且按下 RETURN 键,没有选项. 如果它不行的话那么试著使用 `/usr/sbin/ndc start' 来取代. 再不行的话请参考 FAQ 一节. 现在你可以测试你的设定.当你在起始 named 的时候如果你观察一下 (使用 tail -f /var/adm/messages 指令)系统记录讯息文件 (通常是称为 /var/adm/messages 的文件,但也可能在 /var/log 下,或是叫 syslog 的文件) 那么你应该会看见像样的一些东西:

Jun 30 21:50:55 roke named[2258]: starting.  named 4.9.4-REL Sun Jun 30 21:29:03 MET DST 1996   janl@roke.slip.ifi.uio.no:/var/tmp/bind/named
Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0)
Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1)

如果有任何关于错误的讯息那么就是有个错误发生, named 将会指名有错误的文件(我想是 named.boot 以及 root.cache 其中之一:-). 杀掉 named 程序并回头检查那些文件.

现在可以用 nslookup 来检查一下你的工作:

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

>

如果这是你所得到的响应那么它已经能够运作.我们希望是这样.得到任何其它响应都请回头检查每一件事. 每一次你改变 named.boot 文件之后你都得使用 ndc restart 这个指令重新起始 named 程序.

现在你可以输入查询.尝试找寻某些靠近你的机器.pat.uio.no 离我不远,在 Oslo 的大学里:

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Name:    pat.uio.no
Address:  129.240.2.50

现在 nslookup 要求你的 named 找寻 pat.uio.no 这台机器. 然后它(named)联系在你 root.cache 文件里所指名的域名服务机器其中一台, 并且从那里查问它该如何继续下去.在你取得结果之前可能得花费一点时间, 因为它搜寻你在 /etc/resolv.conf 里指名的所有领域.

如果你再试一次的话那么你将会得到:

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    pat.uio.no
Address:  129.240.2.50

注意这回我们所得到的 `Non-authoritative answer:' 这一行. 这代表 named 此次并未到网络外去查问,取而代之的是在它的暂存区里找寻并且在那里找到答案. 但是暂存的信息可能会过时.所以它藉由 `Non-authorative answer:' 来知会你有这个(很轻微的)危险性存在. 当 nslookup 说这是你第二次查问某台主机时,这是 named 能暂存该项信息并且正常运作的一个讯息. 你可以使用 `exit' 指令离开 nslookup 程序.

如果你是个拨号(ppp, slip) 使用者请阅读 拨号连线专节,里面有一些给你的建议.

现在你知道如何设立一个能够暂存的 named 系统.来杯啤酒,牛奶,或是任何你喜欢的东西来庆祝吧.


Next Previous Contents