Linux 版 (精华区)

作  家: titi (江山依旧) on board 'unix'
题  目: Linux HowTo: DNS
来  源: 哈尔滨紫丁香站
日  期: Mon Jun  2 12:31:17 1997
出  处: rary.bbs@bbs.net.tsinghua.edu.cn

发信人: redhat (Linux), 信区: Linux
标  题: Linux HowTo: DNS
发信站: BBS 水木清华站 (Tue Jan 21 16:51:25 1997)

原始文件:DNS HOWTO
          Nicolai Langfeldt janl@math.uio.no
          Version 1.1, 30 June 1996
档案叙述:领域名称系统说明文件
文件编号:LRG.LDTP.HOWTO.004
翻译日期:1996/08/20
翻译维护:asdchen@ms1.hinet.net                                  O
---------------------------------------------------------------X---
                                                                 O
  如何成为一个能有完整了解的小型 DNS  管理者。

  关键字: DNS, bind, named, dialup, ppp, slip, Internet, domain,
  name, hosts, resolving

  版权声明:

  (C)opyright 1995 Nicolai Langfeldt 。 没有修订版权者请勿修改,
  可自由散布但必须保留版权讯息。作者希望能对无数次阅读这份文件的
  草稿并提供许多有用建议的 Arnt Gulbrandsen 表达感谢。
  (C)opyright 1995 Nicolai Langfeldt.  Do not modify without amending
  copyright, distribute freely but retain copyright message.  The
author
  wishes to thank Arnt Gulbrandsen who read the drafts to this work
  countless times and provided many useful suggestions.

  其它声明:

  这份文件将永远不会有完成的一天,请把你的问题以及成功的经验寄给
  我,这可以使它成为一份更好的说明文件。所以请把钱,评论以及/或
  是问题寄给 janl@ifi.uio.no  。

  谨以这份说明文件献给 Anne Line Norheim 。 虽然她可能永远都不会
  阅读这份文件,因为她不是这类型的女孩。

  1.  简介。

  这是什麽以及这不是什麽。

  DNS 是,对新手(你;-)而言,网路管理中比较晦暗不明的地方之一
  。这份说明文件将会试著让几件事情能清楚一点。它描述如何设立一个
  简单的 DNS  名称伺服器。至於更复杂的设定你将得阅读真正的文件。
  我将会在”最後一章”回过头来说明这里所谓真正的文件包含有哪些。

  在你可以开始进行这项工作之前你应该要先配置好你的机器以便可以从
  远端签入它以及由它对其它机器作远端签入,并且使所有各种对网路的
  连线(all kinds of connections to the net) 都能成功地进行,尤其
  你应该要能够对 127.0.0.1  进行远端签入并且进入你自己的这台机器
  。同时你也需要一份良好的 /etc/host.conf, /etc/resolv.conf 以及
  /etc/hosts  档案作为一个起始点。因为我将不会在这里解释它们的功
  能。如果你还没有完成所有这些设定并使其运作那麽 the networking/
  NET-2 HOWTO 会解释如何设立它们。阅读之。

  如果你使用 SLIP 或者是 PPP  那麽你得要能让它运作。若是它还不能
  运作的话阅读 PPP HOWTO  。

  当我说‘你的机器’时我的意思是你正要尝试在上面设立 DNS  的那台
  机器。不是任何可能在你网路环境里的其它机器。

  我假设你并不是处於任何会阻碍名称查询的防火墙後面。如果你是那麽
  你将会需要特别的配置,参见讨论”防火墙以及其它特异的网路物体”
  该节。
  在 Unix 上的名称服务是藉由一支称为 named  的程式来执行的。这是
  属於 bind 套件的一部份,这个套件是由 Paul Vixie 为网际网路软体
  集团(Internet Software Consortium)所协调发展的。大部分的 Linux
  发行套件都包含有 named  而且通常安装於 /usr/sbin/named  。如果
  你的系统有个 named  那麽你大概可以直接使用它;如果你的系统没有
  的话那麽你可以从某个 Linux ftp  站取回一份二进位执行码,或是从
  ftp.vix.com:/pub/bind 底下的 release  或者 testing  目录里取得
  最新最棒的原始程式码,端视哪个种类的版本最能符合你的生活格调。

  DNS 是个以整个网路为范围的(net-wide)资料库。要小心你放进里面的
  资料。如果你放些废物进去,你,以及其它人都将会从中取出些废物。
  保持你 DNS  的整齐一致那麽你将能从中取得良好的服务。学习去使用
  它,管理它,侦查它的错误那麽你将会是另一个保持网路免於因为管理
  不善而效率低落的好管理者。

  在这份文件里我断然地叙述几件并不完全是真实的事情(然而它们至少
  有一半是真的)。全都是为了简化。如果你相信我所说的那麽这些大概
  就能运作。

  要诀: 如果你已经拥有我指示你去改变的档案那麽所有这些档案都要做
  备份,如此一来如果经历这些过程之後没有东西能运作的话你可以回复
  到你旧的,可以运作的情形。

  2.  暂存专用(caching only)名称伺服器。

  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

______________________________________________________________________

  `directory' 这一行告诉 named  到哪里去找寻档案。所有其後命名的
  档案都将是相对於此目录的。根据 Linux  档案系统标准 (Filesystem
  Standard) 这个 /var/named 是正确的目录所在。就个人而言,我使用
  的是 /local/named 但这是我的任性。

  称为 /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
  的线上使用手册里有这个档案的描述,但是这,IMHO,最适合那些
  已经了解 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
  。(注意: Named 从不读取这个档案,而是使用 named  的名称解答器
  会读取。)
  来简介这个档案有什麽作用: 如果某个客户端尝试要找寻 foo  的话,
  那麽首先尝试的是 foo.subdomain.your-domain.edu  这个名称,然後
  接下来是 foo.your-domain.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/hosts.conf

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


______________________________________________________________________
  order hosts,bind

______________________________________________________________________

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

  起始 named  。

  这些全部完成後现在是起始 named  的时候了。如果你使用拨接连线的
  话那麽请先连上网路。键入 `ndc start'  并且按下 return 键,没有
  选项。如果它倒弹(back-fires)那麽试著使用 `/usr/sbin/ndc start'
  来取代。现在你可以测试你的设定。当你在起始 named  的时候如果你
  有观察一下(使用 tail -f /var/adm/messages  指令)系统记录讯息
  档案(通常是称为 /var/adm/messages  的档案)那麽你应该会看见像
  样的一些东西:

       Jun 30 21:50:55 roke named[2258]: starting.  named 4.9.4-REL
Sun Jun 30 21:29:0
       3 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 (s
       erial 1)

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

       $ nslookup
       Default Server:  localhost
       Address:  127.0.0.1

       >

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

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

       > 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  系统。来杯啤酒,牛奶,
  或是任何你喜欢的东西来庆祝吧。

  3.  一个简单的领域。

  如何设立你自己的领域。

  在我们真的开始进行这一节以前我将会提供你一些关於 DNS  如何运作
  的理论。而你即将阅读它因为这对你有益。如果你不‘想要’那麽至少
  你也得很快地略读一下。当你看到应该放进你 named.boot 档案里去的
  内容时再停止这种略读方式。

  DNS 是一个阶层式的系统。其顶端写作 `.'  而其发音为 `root' 。在
  . 之下有几个顶层领域(TLDs),最知名的是 ORG, CPM, EDU  以及 NET
  这几个,但是还有更多。当你想要找出 prep.ai.mit.edu  的位址时你
  的名称伺服器必须找到服务 edu  的一台名称伺服器。这个问题它会去
  查问 root.cache 档案,而 .  伺服器会给它一份 edu  伺服器列表。
  我将会在这里对此加以介绍:

       $ nslookup
       Default Server:  localhost
       Address:  127.0.0.1

  开始查问某台根伺服器。

       > server c.root-servers.net.
       Default Server:  c.root-servers.net
       Address:  192.33.4.12

  设定查询型态为 NS (名称伺服器记录 name server records)。

       > set q=ns

  查问关於 edu. 的资料。

       > edu.

  结尾的 .  在这里非常重要,它告诉该伺服器我们所查问的 edu  是在
  . 之下的那一个,这稍能缩小搜寻的范围。

       edu     nameserver = A.ROOT-SERVERS.NET
       edu     nameserver = H.ROOT-SERVERS.NET
       edu     nameserver = B.ROOT-SERVERS.NET
       edu     nameserver = C.ROOT-SERVERS.NET
       edu     nameserver = D.ROOT-SERVERS.NET
       edu     nameserver = E.ROOT-SERVERS.NET
       edu     nameserver = I.ROOT-SERVERS.NET
       edu     nameserver = F.ROOT-SERVERS.NET
       edu     nameserver = G.ROOT-SERVERS.NET
       A.ROOT-SERVERS.NET      internet address = 198.41.0.4
       H.ROOT-SERVERS.NET      internet address = 128.63.2.53
       B.ROOT-SERVERS.NET      internet address = 128.9.0.107
       C.ROOT-SERVERS.NET      internet address = 192.33.4.12
       D.ROOT-SERVERS.NET      internet address = 128.8.10.90
       E.ROOT-SERVERS.NET      internet address = 192.203.230.10
       I.ROOT-SERVERS.NET      internet address = 192.36.148.17
       F.ROOT-SERVERS.NET      internet address = 192.5.5.241
       G.ROOT-SERVERS.NET      internet address = 192.112.36.4

  这告诉我们 *.root-servers.net 服务 edu. 领域,所以我们可以藉此
  继续查问 c. 伺服器。现在我们想要知道是谁服务下一层的领域名称:
  mit.edu.:

  > mit.edu.
  Server:  c.root-servers.net
  Address:  192.33.4.12

  Non-authoritative answer:
  mit.edu nameserver = STRAWB.mit.edu
  mit.edu nameserver = W20NS.mit.edu
  mit.edu nameserver = BITSY.mit.edu

  Authoritative answers can be found from:
  STRAWB.mit.edu  internet address = 18.71.0.151
  W20NS.mit.edu   internet address = 18.70.0.160
  BITSY.mit.edu   internet address = 18.72.0.3

  steawb, w20ns 以及 bitsy  服务 mit  领域,选择其中一个并且调查
  ai.mit.edu:

       > server W20NS.mit.edu.

  主机名称不分大小写,但是我使用我的滑鼠来剪贴所以这些资料是萤幕
  的拷贝。

       Server:  W20NS.mit.edu
       Address:  18.70.0.160

       > ai.mit.edu.
       Server:  W20NS.mit.edu
       Address:  18.70.0.160

       Non-authoritative answer:
       ai.mit.edu      nameserver = WHEATIES.AI.MIT.EDU
       ai.mit.edu      nameserver = ALPHA-BITS.AI.MIT.EDU
       ai.mit.edu      nameserver = GRAPE-NUTS.AI.MIT.EDU
       ai.mit.edu      nameserver = TRIX.AI.MIT.EDU
       ai.mit.edu      nameserver = MUESLI.AI.MIT.EDU

       Authoritative answers can be found from:
       AI.MIT.EDU      nameserver = WHEATIES.AI.MIT.EDU
       AI.MIT.EDU      nameserver = ALPHA-BITS.AI.MIT.EDU
       AI.MIT.EDU      nameserver = GRAPE-NUTS.AI.MIT.EDU
       AI.MIT.EDU      nameserver = TRIX.AI.MIT.EDU
       AI.MIT.EDU      nameserver = MUESLI.AI.MIT.EDU
       WHEATIES.AI.MIT.EDU     internet address = 128.52.32.13
       WHEATIES.AI.MIT.EDU     internet address = 128.52.35.13
       ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.32.5
       ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.37.5
       GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.32.4
       GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.36.4
       TRIX.AI.MIT.EDU internet address = 128.52.32.6
       TRIX.AI.MIT.EDU internet address = 128.52.38.6
       MUESLI.AI.MIT.EDU       internet address = 128.52.32.7
       MUESLI.AI.MIT.EDU       internet address = 128.52.39.7

  所以 weaties.ai.mit.edu 是 ai.mit.edu 的一台名称伺服器:

       > server WHEATIES.AI.MIT.EDU.
       Default Server:  WHEATIES.AI.MIT.EDU
       Addresses:  128.52.32.13, 128.52.35.13

  现在我改变查询的型态,我们已经找到该名称伺服器所以现在我们将要
  查问 wheaties 关於 prep.ai.mit.edu  它所知道的任何事情。

       > set q=any
       > prep.ai.mit.edu.
       Server:  WHEATIES.AI.MIT.EDU
       Addresses:  128.52.32.13, 128.52.35.13

       prep.ai.mit.edu CPU = dec/decstation-5000.25    OS = unix
       prep.ai.mit.edu
               inet address = 18.159.0.42, protocol = tcp
                #21 #23 #25 #79
       prep.ai.mit.edu preference = 1, mail exchanger =
life.ai.mit.edu
       prep.ai.mit.edu internet address = 18.159.0.42
       ai.mit.edu      nameserver = alpha-bits.ai.mit.edu
       ai.mit.edu      nameserver = wheaties.ai.mit.edu
       ai.mit.edu      nameserver = grape-nuts.ai.mit.edu
       ai.mit.edu      nameserver = mini-wheats.ai.mit.edu
       ai.mit.edu      nameserver = trix.ai.mit.edu
       ai.mit.edu      nameserver = muesli.ai.mit.edu
       ai.mit.edu      nameserver = count-chocula.ai.mit.edu
       ai.mit.edu      nameserver = life.ai.mit.edu
       ai.mit.edu      nameserver = mintaka.lcs.mit.edu
       life.ai.mit.edu internet address = 128.52.32.80
       alpha-bits.ai.mit.edu   internet address = 128.52.32.5
       wheaties.ai.mit.edu     internet address = 128.52.35.13
       wheaties.ai.mit.edu     internet address = 128.52.32.13
       grape-nuts.ai.mit.edu   internet address = 128.52.36.4
       grape-nuts.ai.mit.edu   internet address = 128.52.32.4
       mini-wheats.ai.mit.edu  internet address = 128.52.32.11
       mini-wheats.ai.mit.edu  internet address = 128.52.54.11
       mintaka.lcs.mit.edu     internet address = 18.26.0.36

  所以我们从 .  开始连续找出在领域名称里的下一层名称伺服器。如果
  你使用你自己的 DNS  伺服器取代使用所有这些个其它的伺服器,你的
  named 当然会暂存所有这些在为你寻找这个答案时所找到的资讯,而且
  在一段时间内它不必再次查问。

  一个比较起来很少被论及,但是同样重要的是 in-addr.arpa 领域。它
  也像‘正常的’领域一样是巢状的。in-addr.arpa  让我们可以在拥有
  主机位址的时候得知该主机的名称。在这里有件重要的事情是要注意在
  in-addr.arpa  这个领域中 ip#s 是以反向顺序书写的。如果你有某台
  机器的位址: 192.128.52.43 那麽 named  会以像是 prep.ai.mit.edu
  这个范例的方式来处理: 找出 in-addr.arpa.  的伺服器,然後再找出
  192.in-addr.arpa. 的伺服器,找出 128.192.in-addr.arpa 的伺服器
  ,接著找出 52.128.192.in-addr.arpa. 的伺服器,最後再找出所需之
  43.52.128.192.in-addr.arpa. 的记录。聪明乎?(说‘是的’)。头
  两年这反向的数字也引起过一些困扰。

  我刚刚说了一个谎。DNS 并非完完全全地像我告诉你的这样运作。但是
  这已经够接近的了。

  我们自己的领域。

  现在来定义我们自己的领域。我们将会创造出 linux.bogus  这个领域
  并且定义其中的机器。我使用一个完全是虚拟出来的领域名称以便确定
  我们不会扰乱到网路上的其它地方。

  我们早就已经以 named.boot 里的这一行开始了这个部份的设定:


______________________________________________________________________
  primary         0.0.127.in-addr.arpa            pz/127.0.0

______________________________________________________________________

  请注意在这个档案里的领域名称结尾并没有加上 `.'  符号。第一行把
  定义 0.0.127.in-addr.arpa 的档案命名为 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.

______________________________________________________________________

  请注意在这个档案里所有的完整领域名称结尾的 `.'  符号,这与上面
  提到的 named.boot 档案形成对比。有些人喜欢以 $ORIGIN  指令启始
  每个区域档案,但这是不必要的。一个区域档案的基点(就是其所属的
  DNS 阶层架构位置)是在 named.boot 档案的‘领域’行里指定的,在
  这个例子里是 0.0.127.in-addr.arpa 。

  这个‘区域’档案中包含三种‘资源记录’(resource records: RRs):
  一个是 SOA  资源记录。一个是 NS 资源记录以及一个 PTR 记录。SOA
  是授权起始(Start Of Authority)的缩写。`@' 是个意思为基点的特殊
  标记,而因为这个档案的‘领域’行说是 0.0.127.in-addr.arps 所以
  第一行实际上是说

         0.0.127.IN-ADDR.ARPA. IN      SOA ...

  NS  是名称伺服器资源记录,它告诉 DNS  什麽机器是这个领域的名称
  伺服器。而最後的 PTR  记录说 1(等於是 1.0.0.127.IN-ADDR.ARPA,
  ie. 127.0.0.1 )的名称是 localhosts 。

  SOA 这个记录是所有区域档案的序文,而且在每一个区域档案里都应该
  有唯一的一个,最开头的记录。它描述该区域,它从何而来(一台称为
  linux.bogus 的机器),谁负责其内容(hostmaster@linux.bogus),这
  个区域档案是什麽版本(serial: 1) ,以及其它必须做的,有关暂存与
  次要 DNS  伺服器的事。剩下的栏位如 refresh, retry, expire 以及
  minimum 可以使用这份说明文件里所用的数字而且你应该不会出问题。

  NS  这个记录告诉我们谁为 0.0.127.in-addr.arpa 提供 DNS  服务,
  是 ns.linux.bogus 这台机器。PTR 这个记录告诉我们 1.0.0.127.in-
  addr.arpa (aka 127.0.0.1) 也称为 localhost  。

  现在重新起始你的 named(使用 ndc restart 指令)并使用 nslookup
  来检验我们做了什麽:

       $ nslookup

       Default Server:  localhost
       Address:  127.0.0.1

       > 127.0.0.1
       Server:  localhost
       Address:  127.0.0.1

       Name:    localhost
       Address:  127.0.0.1

  所以它管理从 127.0.0.1  得到 localhost  的过程,很好。不要急。
  现在开始我们的主要任务,linux.bogus 这个领域,在 named.boot 里
  插入新的一行 primary  指令:


______________________________________________________________________
  primary               linux.bogus                     pz/linux.bogus

______________________________________________________________________

  注意,在 named.boot 档案里领域名称的结尾还是没有 '.'  符号。

  在这个 linux.bogus  区域档案里我们将会放入一些完全虚拟的资料:


______________________________________________________________________
  ;
  ; Zone file for linux.bogus
  ;
  ; Mandatory minimum for a working domain
  ;
  @       IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                          199511301       ; serial, todays date +
todays serial #
                          28800           ; refresh, seconds
                          7200            ; retry, seconds
                          3600000         ; expire, seconds
                          86400 )         ; minimum, seconds
                  NS      ns.linux.bogus.
                  NS      ns.friend.bogus.
                  MX      10 mail.linux.bogus   ; Primary Mail
Exchanger
                  MX      20 mail.friend.bogus. ; Secondary Mail
Exchanger

  localhost       A       127.0.0.1
  ns              A       127.0.0.2
  mail            A       127.0.0.4

______________________________________________________________________

  在这个档案里有一种新的资源记录型态,即 MX 型态,或是邮件交换者
  资源记录(Mail eXchanger RR) 。这种资源记录型态告诉邮递系统地址
  someone@linux.bogus 的邮件要寄送到哪里,换句话说也就是应该寄送
  到 mail.linux.bogus 或是 mail.friend.bogus。在每个机器名称前面
  的数字是 MX 资源记录的优先权,数字比较低 (10) 的资源记录是邮件
  主要应该寄往的机器。如果失败可以把它寄往数字比较高的机器,一台
  次要的邮件处理者,如在这里具有优先权 20 的 mail.friend.bogus。

  藉由执行 ndc restart  重新起始 named  。以 nslookup 检验结果:

       $ nslookup
       > set q=any
       > linux.bogus
       Server:  localhost
       Address:  127.0.0.1

       linux.bogus
               origin = linux.bogus
               mail addr = hostmaster.linux.bogus
               serial = 199511301
               refresh = 28800 (8 hours)
               retry   = 7200 (2 hours)
               expire  = 604800 (7 days)
               minimum ttl = 86400 (1 day)
       linux.bogus     nameserver = ns.linux.bogus
       linux.bogus     nameserver = ns.friend.bogus
       linux.bogus     preference = 10, mail exchanger =
mail.linux.bogus.linux.bogus
       linux.bogus     preference = 20, mail exchanger =
mail.friend.bogus
       linux.bogus     nameserver = ns.linux.bogus
       linux.bogus     nameserver = ns.friend.bogus
       ns.linux.bogus  internet address = 127.0.0.2
       mail.linux.bogus        internet address = 127.0.0.4

  由小心地检验你将会发现一个错误。这一行

         linux.bogus     preference = 10, mail exchanger =
mail.linux.bogus.linux.bogus

  全都错了。它应该是

         linux.bogus     preference = 10, mail exchanger =
mail.linux.bogus

  我故意犯了个错误所以你可以藉此学习:-)仔细看看该区域档案我们
  会发现这一行

       @               MX      10 mail.linux.bogus     ; Primary Mail
Exchanger

  遗漏了一个句点。或是说多了个 `linux.bogus'  。在区域档案里如果
  一个机器名称不是以句点结尾那麽会在其结尾加入基点。所以不论是


______________________________________________________________________
  @               MX      10 mail.linux.bogus.    ; Primary Mail
Exchanger

______________________________________________________________________

  或者是


______________________________________________________________________
  @               MX      10 mail                 ; Primary Mail
Exchanger

______________________________________________________________________

  都是正确的。我比较喜欢後面这种形式,它需要的打字比较少。在一个
  区域档案里领域名称应该要不就是写出来并以 `.'  结尾或者就是一点
  都不要包含进去,而在这种情况下其领域预设为基点。我必须强调的是
  在 named.boot 档案里领域名称後面不应该有 `.'  的存在。你不知道
  有多少次因为多了或少了一个 `.'  而砸锅并且对许多人造成困扰。

  所以在加入我强调的重点後这里是一份新的区域档案,其中还包含一些
  额外的资讯:


______________________________________________________________________
  ;
  ; Zone file for linux.bogus
  ;
  ; Mandatory minimum for a working domain
  ;
  @       IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                          199511301       ; serial, todays date +
todays serial #
                          28800           ; refresh, seconds
                          7200            ; retry, seconds
                          604800          ; expire, seconds
                          86400 )         ; minimum, seconds

                  NS      ns              ; Inet Address of name
server
                  NS      ns.friend.bogus.
                  MX      10 mail         ; Primary Mail Exchanger
                  MX      20 mail.friend.bogus. ; Secondary Mail
Exchanger

  localhost       A       127.0.0.1
  ns              A       127.0.0.2
  mail            A       127.0.0.4
  ;
  ; Extras
  ;
  @               TXT     "Linux.Bogus, your DNS consultants"

  ns              MX      10 mail
                  MX      20 mail.friend.bogus.
                  HINFO   "Pentium" "Linux 1.2"
                  TXT     "RMS"
  richard         CNAME   ns
  www             CNAME   ns

  donald          A       127.0.0.3
                  MX      10 mail
                  MX      20 mail.friend.bogus.
                  HINFO   "i486"  "Linux 1.2"
                  TXT     "DEK"

  mail            MX      10 mail
                  MX      20 mail.friend.bogus.
                  HINFO   "386sx" "Linux 1.0.9"

  ftp             A       127.0.0.5
                  MX      10 mail
                  MX      20 mail.friend.bogus.
                  HINFO   "P6" "Linux 1.3.59"

______________________________________________________________________

  你也许会想要移动前面三个 A  记录以便让它们邻近於它们其它的相关
  记录,而不是像这样放在最前端。

  这里有几个新的资源记录: 主机资讯(HINFO: Host INFOrmation) 包括
  两个部份,使用引号涵括每个部份是个好习惯。第一个部份是机器上的
  硬体或是中央处理单元,而第二个部份是机器上的软体或是作业系统。
  ns  有一颗 Pentium CPU  并且执行 Linux 1.2  系统。TXT 记录是个
  自由的文字记录,你可以用它来做任何你想做的事。正式名称(CNAME:
  Canonical NAME) 可以用来给每台机器数个名称。所以 richard  以及
  www 都是 ns 的一个别名。很重要的一点是 A, MX, CNAME,  以及 SOA
  记录永远不该参照 CNAME  记录设定的别名,它们只应该参照 A  记录
  所设定的名称,所以这样的记录是错的


______________________________________________________________________
  foobar  CNAME   richard                 ; NO!

______________________________________________________________________

  但是这样是对的


______________________________________________________________________
  foobar  CNAME   ns                      ; Yes!

______________________________________________________________________

  还有一点也很重要的是注意正式名称所设定的对电子邮递位址而言不是
  合法主机名称: webmaster@www.linux.bogus 以上面的设定而言是一个
  不合法的电子邮递位址。即使它在你的系统上可以运作,可以预料的是
  很少有电子邮件管理者会去实行这项规则。避免这个问题的方法是使用
  A 记录(或者也可能是一些其它的,像是 MX 记录)来取代之:


______________________________________________________________________
  www     A       127.0.0.2

______________________________________________________________________

  Paul Vixie, 主要的 named  专家,建议不要使用正式名称这个设定。
  所以应该考虑不要很认真地去使用它。

  藉由执行 ndc reload 载入新的资料库,这会使 named  再一次读取其
  档案。

       $ nslookup
       Default Server:  localhost
       Address:  127.0.0.1

       > ls -d linux.bogus

  这意指应该列出所有的记录。

  [localhost]
   linux.bogus.                   SOA   linux.bogus
hostmaster.linux.bogus. (1995
  11301 28800 7200 604800 86400)
   linux.bogus.                   NS    ns.linux.bogus
   linux.bogus.                   NS    ns.friend.bogus
   linux.bogus.                   MX    10   mail.linux.bogus
   linux.bogus.                   MX    20   mail.friend.bogus
   linux.bogus.                   TXT   "Linux.Bogus, your DNS
consultants"
   localhost                      A     127.0.0.1
   mail                           A     127.0.0.4
   mail                           MX    10   mail.linux.bogus
   mail                           MX    20   mail.friend.bogus
   mail                           HINFO 386sx       Linux 1.0.9
   donald                         A     127.0.0.3
   donald                         MX    10   mail.linux.bogus
   donald                         MX    20   mail.friend.bogus
   donald                         HINFO i486        Linux 1.2
   donald                         TXT   "DEK"
   www                            CNAME ns.linux.bogus
   richard                        CNAME ns.linux.bogus
   ftp                            A     127.0.0.5
   ftp                            MX    10   mail.linux.bogus
   ftp                            MX    20   mail.friend.bogus
   ftp                            HINFO P6          Linux 1.3.59
   ns                             A     127.0.0.2
   ns                             MX    10   mail.linux.bogus
   ns                             MX    20   mail.friend.bogus
   ns                             HINFO Pentium     Linux 1.2
   ns                             TXT   "RMS"
   linux.bogus.                   SOA   linux.bogus
hostmaster.linux.bogus. (1995
  11301 28800 7200 604800 86400)

  很好。让我们检查它对於单独的 www  会说什麽:

       > set q=any
       > www.linux.bogus.
       Server:  localhost
       Address:  127.0.0.1

       www.linux.bogus canonical name = ns.linux.bogus

  ns.linux.bogus

       linux.bogus     nameserver = ns.linux.bogus
       linux.bogus     nameserver = ns.friend.bogus
       ns.linux.bogus  internet address = 127.0.0.2

  而 ns.linux.bogus 拥有 127.0.0.2  这个位址。看起来也很好。

  继续深入

  当然,这个领域是高度虚拟的,里面所有的位址也都是。真正的领域要
  在其中插入真正的领域名称和位址以及所有其它的资讯。这些工作完成
  时你需要一个反向找寻用的区域档案,它应该会是像 127.0.0  这样的
  档案并且为每个其中所使的位址包含唯一的一个 PTR  资源记录,像是

       127.0.0.2       PTR     ns.linux.bogus.
       127.0.0.3       PTR     donald.linux.bogus.
       127.0.0.4       PTR     mail.linux.bogus.
       127.0.0.5       PTR     ftp.linux.bogus.

  对於作为我们范例的领域(当然是附加於 SOA  资源记录的)。该档案
  的领域名称(基点)应该要是反向的,这个情况正如同 127.0.0  之於
  0.0.127.in-addr.arpa  一样。

  现在是你开始操作并设立你的领域的时候了。当你玩够了 linux.bogus
  领域的操作後从你的 named.boot 档案里把它移除。

  4.  防火墙以及其它特异的网路物体

  问: 如何从防火墙里面使用 DNS  呢? 答: 有几个提示: `forwarders'
  `slave',  并详阅在这份说明文见後面所列举的文献。

  问: 我该如何使 DNS  能够为某种服务轮回切换可以使用的位址,例如
  回应 www.busy.site  这个名称不同的位址以便能取得平衡负载的功效
  ,或者类似的功用? 答: 为 www.busy.site  设定几个 A  记录,如此
  bind 4.9.3  或更晚的版本将会每次更替答案。这在较早的 bind 版本
  是无法运作的。

  5.  维护

  维持它的运作。

  维持它们的继续执行之外,对於 named  你还有个维护的任务得要做。
  那就是维持 root.cache 档案的更新。最简单的方法是使用 dig  程式
  ,首先不加任何参数执行 dig  程式,你将会取得根据你自己伺服器的
  root.cache  。然後以 dig @rootserver  查问所列出的根伺服器其中
  之一。你将会注意到这份输出看起来非常地像一个 root.cache 档案,
  除了一堆额外的数字以外。这些数字不会有什麽妨碍。把它存放到档案
  里(dig .@e.root-server.net > root.cache.new)并且用它来取代原本
  旧的 root.cache 档案。

  取代了原先的 cache  档案之後要记得重新启动 named  程式。

  Al Longyear 寄给我这个指令稿,它可以自动执行来更新 named.cache
  为它安装个 crontab  项目然後忘了它。这个指令稿假设你的电子邮件
  可以运作而且 `hostmaster' 这个邮件别名有定义。你应该修订它以便
  符合你的设定。


______________________________________________________________________
  #!/bin/sh
  #
  # Update the nameserver cache information file once per month.
  # This is run automatically by a cron entry.
  #
  (
   echo "To: hostmaster <hostmaster>"
   echo "From: system <root>"
   echo "Subject: Automatic update of the named.boot file"
   echo

   export PATH=/sbin:/usr/sbin:/bin:/usr/bin:
   cd /var/named

   dig . @rs.internic.net >named.cache.new

   echo "The named.boot file has been updated to contain the following
  information:"
   echo
   cat named.boot.new

   chown root.root named.cache.new
   chmod 444 named.cache.new
   rm -f named.cache.old
   mv named.cache named.cache.old
   mv named.cache.new named.cache
   ndc restart
   echo
   echo "The nameserver has been restarted to ensure that the update
is complete.
  "
   echo "The previous named.cache file is now called
  /var/named/named.cache.old."
  ) 2>&1 | /usr/lib/sendmail -t
  exit 0

______________________________________________________________________

  6.  拨接连线的自动设定

  这一节解释我如何设定以便自动化每个过程。我的方法可能一点都不适
  合你,但是你可能从我所作的一些事情里得到一些点子。同时,我使用
  ppp 拨接,然而有许多人使用 slip 或是 cslip  连线方式,所以你的
  设定里几乎某个地方都可能跟我的不同。但是 slip 使用的 dip  程式
  应该能够完成我所作的许多事情。

  一般来说,当我没有连上网路时我的 resolv.conf  档案单纯地包含这
  一行

       domain uio.no

  这确保我不必等待主机名称解析函式库去尝试联系某台不可能帮助我的
  名称伺服器。但是当我连上线的时候我想要起始我的 named  并且拥有
  一个看起来像前面所描述的 resolv.conf  档案。我藉由保持两份名为
  resolv.conf.local 以及 resolv.conf.connected  的档案以便作为该
  resolv.conf 的‘样板’档案来解决这个问题。後面这一个看起来像在
  这份文件前面所描述过的 resolv.conf 档案。

  要自动化连线到网路的过程我执行一个称为 `ppp-on' 的指令稿:


______________________________________________________________________
  #!/bin/sh
  echo calling...
  pppd

______________________________________________________________________

  pppd  有个称为 options  的档案,这告诉它关於如何取得连线的一些
  特殊事项。一旦我的 ppp  连线完成後 pppd 起始一个称为 ip-up  的
  指令(这在 pppd 的线上使用手册里有描述)。这里是该指令稿里面的
  一部份:


______________________________________________________________________
  #!/bin/sh
  interface="$1"
  device="$2"
  speed="$3"
  myip="$4"
  upip="$5"
  cp -v /etc/resolv.conf.connected /etc/resolv.conf
  /usr/sbin/named

______________________________________________________________________

  I.e.  我在这里起始我的 named  程式。当 ppp  离线时 pppd 执行一
  个称为 ip-down  的指令稿:


______________________________________________________________________
  #!/bin/sh
  cp /etc/resolv.conf.local /etc/resolv.conf
  read namedpid </var/run/named.pid
  kill $namedpid

______________________________________________________________________

  所以这在连线时配置并设定相关事宜并且在离线时解除该配置并结束相
  关程式。

  Some programs, irc and talk come to mind, make a few too many
  assumptions, and for irc the dcc features and talk to work right you
  have to fix your hosts file.  I insert have this in my ip-up script:


______________________________________________________________________
  cp /etc/hosts.ppp /etc/hosts
  echo $myip      roke >>/etc/hosts

______________________________________________________________________

  hosts.ppp simply contains


______________________________________________________________________
  127.0.0.1       localhost

______________________________________________________________________

  and the echo thing inserts the ip# i have received for my host name
  (roke).  You should use the name your host knows itself by instead.
  This can be found with the hostname command.

  当你没有连线到网路上时执行 named  可能并不聪明,这是因为 named
  将会尝试送出查询到网路上而且其终止时限(timeout) 很长,而每次有
  某些个程式尝试解析一个名称的时候你就得等待到这个终止时限。如果
  你使用拨接的话你应该在连上网时起始 named  并且在离线时杀掉它。
  我已经接到一些邮件说不是这样的,但是我不能使它能够等待这麽长的
  时间。如果你有更好的资讯请寄给我所有的细节。

  某些人喜欢在慢速的连线上使用 forwarders 指令。如果你的网际网路
  提供者在 1.2.3.4  以及 1.2.3.5  设有 DNS  伺服器那麽你可以插入
  这麽一行


______________________________________________________________________
  forwarders 1.2.3.4 1.2.3.5

______________________________________________________________________

  到 named.boot 档案里去。同时也让 named.cache  档案保持为空白。
  这将会减低源自你主机的 IP 流量,任何可能提升的速度。如果你是依
  线路的资料量付费的话这特别重要。这还有个附加价值,让你脱离作为
  一个暂存的 named  维护者所应负起的责任: 你不需要去更新一个空的
  named.cache 档案。

  7.  如何成为一个大型的 DNS  管理者。

  文件以及工具。

  存在有真正的文件。在线上的或是印好的。要跨出从小型 DNS  管理者
  到大型 DNS  的一步阅读几份这些文件是必要的。印好的标准参考书是
  DNS and BIND by C. Liu and P. Albitz from O'Reilly & Associates,
  Sebastopol, CA, ISBN 0-937175-82-X. 我阅读过,它很棒。在另一本
  TCP/IP Network Administration, by Craig Hunt from O'Reilly...,
  ISBN 0-937175-82-X  有一节是关於 DNS  的。另一本对管理 DNS  很
  好的(或者是对任何这一类工作都很好)书则是 Zen and the Art of
  Motorcycle Maintenance by Robert M. Prisig :-) ISBN 0688052304
  and others.

  线上的资料你可以在这里找到 <http://www.dns.net/dnsrd/>,
  <http://www.vix.com/isc/bind.html>; 常见问题集,参考手册(BOG;
  Bind Operations Guide)是协订定义以及 DNS  研究的文献。这些文件
  我大部分没有阅读过,但是因此我不是个大型 DNS  管理者。另一方面
  Arnt Gulbrandsen  已经读过 BOG  而且对此很熟稔:-)。
  网路新闻讨论群 comp.protocol.rcpip.domains  是有关 DNS  的讨论
  群。此外还有好几份关於 DNS  的 RFCs, 最重要的可能是这些:

     RFC 1918
        Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear,
        Address Allocation for Private Internets, 02/29/1996.

     RFC 1912
        D. Barr, Common DNS Operational and Configuration Errors,
        02/28/1996.

     RFC 1713
        A. Romao, Tools for DNS debugging, 11/03/1994.

     RFC 1712
        C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding
of
        Geographical Location, 11/01/1994.

     RFC 1183
        R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS
RR
        Definitions, 10/08/1990.

     RFC 1035
        P. Mockapetris, Domain names - implementation and
specification,
        11/01/1987.

     RFC 1034
        P. Mockapetris, Domain names - concepts and facilities,
        11/01/1987.

     RFC 1033
        M. Lottor, Domain administrators operations guide, 11/01/1987.

     RFC 1032
        M. Stahl, Domain administrators guide, 11/01/1987.

     RFC 974
        C. Partridge, Mail routing and the domain system, 01/01/1986.

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.10.128]

--
※ 来源:·哈尔滨紫丁香站 bbs1.hit.edu.cn·[FROM: rary.bbs@bbs.net.tsi] 
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:607.898毫秒