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