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