发信人: albin.bbs@bbs.dlut.edu.cn (阿乐斌), 信区: cnlinux
标  题: DNS HOWTO(中文,一个简单的领域)
发信站: 碧海青天 (Thu Jul 10 13:51:08 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!DUT
出  处: rose.dlut.edu.cn

  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 = 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      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 档案里把它移除。

--
※ 来源:.碧海青天 bbs.dlut.edu.cn.[FROM: 202.118.66.18]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:421.571毫秒