当前位置:Linux教程 - Linux - DNS HOWTO 中译版

DNS HOWTO 中译版



        


    作者: Nicolai Langfeldt [1][email protected]
    译者: [2]Asd L. Chen & [3]C.W.Huang

    v1.4.2, 1 January 1998 翻译日期: 8 January 1998
    _________________________________________________________________

    如何成为一个称职的小型 DNS 管理者.
    _________________________________________________________________

    1. 前言

    * 1.1 版权宣告
    * 1.2 感谢与求助
    * 1.3 题献辞

    2. 简介

    3. 暂存专用名称伺服器

    * 3.1 起始 named

    4. 一个简单的领域

    * 4.1 先来一点纯理论
    * 4.2 我们自己的领域
    * 4.3 继续深入

    5. 真实领域的例子

    * 5.1 /etc/named.boot (或 /var/named/named.boot)
    * 5.2 /var/named/root.cache
    * 5.3 /var/named/zone/127.0.0
    * 5.4 /var/named/zone/land-5.com
    * 5.5 /var/named/zone/206.6.177

    6. 维护工作

    7. Bind version 8

    8. 拨接连线的自动设定

    9. 常见问题解答

    10. 如何成为一个大型的 DNS 管理者
    _________________________________________________________________

    1. 前言

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

    1.1 版权宣告

    (C)opyright 1995 Nicolai Langfeldt. Do not modify without amending
    copyright, distribute freely but retain copyright message.
    没有修订版权者请勿修改,可自由散布但必须保留版权讯息.

    1.2 感谢与求助

    我要向无数次阅读这份文件的草稿并提供许多有用建议的 Arnt Gulbrandsen 表达感谢之意. 我也要感谢那些将建议寄给我的人.

    这份文件将永远不会有完成的一天,请把你的问题以及成功的经验寄给我, 这可以使它成为一份更好的说明文件.所以请把钱,评论以及/或是问题寄给
    [4][email protected]. 如果你寄信给我并希望得到回答请表现基本的礼貌,确定回信地址是正确而且可以运作的. 还有,写信给我前请先阅读 [5]FAQ 一节.

    如果你想翻译这篇 HOWTO 请与我联络,这样我才知道我的文章被变成何种语言 :-).

    1.3 题献辞

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

    2. 简介

    这是什麽以及这不是什麽

    首先,DNS 就是领域名称系统(Domain Name System). 为机器命名的规则以及将
    这些名称转换为 IP 数字的软体. 这份 HOWTO 文件说明了如何用 Linux 定义这
    样的对应. 对应指的是这两件事的联系,机器名称,像 ftp.linux.org, 以及
    机器的 IP 数字,像是 199.249.150.4.

    DNS,对新手(你;-)而言,是网路管理中比较晦暗不明的地方之一. 这份说明
    文件将会试著让几件事情能清楚一点.它描述如何设立一个简单的 DNS 名称伺服
    器. 开始先说明暂存专用(caching only)伺服器,然後是为一领域设立主
    要(primary)名称伺服器. 至於更复杂的设定你可以参考这份文件的 [6]FAQ 一
    节. 不用说你将得阅读真正的文件. 我将会在 [7]最後一章 回过头来说明这里
    所谓真正的文件包含有哪些.

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

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

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

    我假设你并不是处於任何会阻碍名称查询的防火墙後面.如果你是那麽你将会需
    要特别的设定, 参见 [9]FAQ 一节.

    在 Unix 上的名称服务是藉由一支称为 named 的程式来执行的. 这是属於
    bind 套件的一部份,这个套件是由 Paul Vixie 为网际网路软体集团(Internet
    Software Consortium)所协调发展的. 大部分的 Linux 发行套件都包含有
    named,而且通常安装於 /usr/sbin/named. 如果你的系统有个 named 那麽你大
    概可以直接使用它;如果没有的话那麽你可以从某个 Linux ftp 站取回一份二进
    位执行档,或是从 [10]ftp.isc.org:/isc/bind/src/cur/ 目录里取得最新最棒
    的原始程式码. 本文件是说明 bind version 4 的.如果你安装 version 8 你
    要自己想办法.稍後有一节可能会对你有些帮助.

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

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

    要诀: 如果你已经拥有我要你去改变的档案,那麽所有这些档案都要先做备份,
    这样一来如果经历这些改变之後没有东西会动的话你可以回复到你旧的,可以运
    作的情形.

    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
    _________________________________________________________________

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

    这个档案描述了在这个世界上的根名称伺服器.这会随时间而改变并且必须加以
    维护. 如何能保持它随时更新请参见 [11]维护篇. 在 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\ 来取代. 再不行的话请参考 [12]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:0
    3 MET DST 1996 [email protected]:/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 程序并回
    头检查那些档案.

    现在可以用 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) 使用者请阅读 [13]拨接连线专节,里面有一些给你
    的建议.

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

    4. 一个简单的领域

    如何建立你自己的领域

    4.1 先来一点纯理论

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

    DNS 是一个阶层式的系统.其顶端写作 `.\ 而其发音为 `root\ . 在 . 之下有
    几个顶层领域(TLDs),最知名的是 ORG, COM, 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 数字是以反向顺序书写的. 如果你有某台机器的位址: 192.128.52.43 那
    麽 named 会以类似 prep.ai.mit.edu 这个□例的方式来处理: 找出 arpa. 的伺
    服器,找出 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 并非完完全全地像我告诉你的这样运作.但是这已经够接
    近的了.

    4.2 我们自己的领域

    现在来定义我们自己的领域.我们将会创造出 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.arpa 所以第一行实际上是指

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

    NS 是名称伺服器资源记录,它告诉 DNS 什麽机器是这个领域
    0.0.127.in-addr.arpa 的名称伺服器,也就是 ns.linux.bogus. 而最後的 PTR
    记录说 1 (等於是 1.0.0.127.IN-ADDR.ARPA, 也就是 127.0.0.1)的名称是
    localhost.

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

    现在重新起始你的 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
    _________________________________________________________________

    关於 SOA 记录有两件事需要注意.首先 ns.linux.bogus 必须 是一台具有 A 记
    录的真正机器. 在 SOA 记录中用 CNAME 记录为名称的机器是不合法的.它的名
    字不一定要是 ns,它可以是任何合法的主机名称. 再来
    ,hostmaster.linux.bogus 应该被视为 [email protected]s,这应该是一
    个邮件位址或别名, 是维护这个 DNS 的人经常读信的位址.任何关於此领域的
    信件会被送到这个位址. 它的名字不一定要是 hostmaster,它可以是任何合法
    的电子邮件位址,然而这个位址 `hostmaster\ 应该能工作正常.

    在这个档案里有一种新的资源记录型态,即 MX 型态,或是邮件交换者资源记
    录(Mail eXchanger RR). 这种资源记录型态告诉邮递系统地址
    [email protected]s 的邮件要寄送到哪里, 换句话说也就是应该寄送到
    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.bogu
    s

    全都错了.它应该是

    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: H
    发布人:netbull 来自: