📄 dns-howto.txt
字号:
如果有任何关於错误的讯息那麽就是有个错误发生, named 将会指名有错误的档 案(我想是 named.boot 以及 root.cache 其中之一:-). 杀掉 named 程序并回 头检查那些档案. 现在可以用 nslookup 来检查一下你的工作: $ nslookupDefault Server: localhostAddress: 127.0.0.1> 如果这是你所得到的回应那麽它已经能够运作.我们希望是这样.得到任何其它 回应都请回头检查每一件事. 每一次你改变 named.boot 档案之後你都得使用 ndc restart 这个指令重新起始 named 程式. 现在你可以输入查询.尝试找寻某些靠近你的机器.pat.uio.no 离我不远,在 Oslo 的大学里: > pat.uio.noServer: localhostAddress: 127.0.0.1Name: pat.uio.noAddress: 129.240.2.50 现在 nslookup 要求你的 named 找寻 pat.uio.no 这台机器. 然後它(named)联 系在你 root.cache 档案里所指名的名称伺服机器其中一台, 并且从那里查问它 该如何继续下去.在你取得结果之前可能得花费一点时间, 因为它搜寻你在 /etc/resolv.conf 里指名的所有领域. 如果你再试一次的话那麽你将会得到: > pat.uio.noServer: localhostAddress: 127.0.0.1Non-authoritative answer:Name: pat.uio.noAddress: 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 伺服器 列表. $ nslookupDefault Server: localhostAddress: 127.0.0.1 开始查问某台根伺服器. > server c.root-servers.net.Default Server: c.root-servers.netAddress: 192.33.4.12 设定查询型态为 NS (名称伺服器记录 name server records). > set q=ns 查问关於 edu. 的资料. > edu. 结尾的 . 在这里非常重要,它告诉该伺服器我们所查问的 edu 是在 . 之下的那 一个, 这稍能缩小搜寻的□围. edu nameserver = A.ROOT-SERVERS.NETedu nameserver = H.ROOT-SERVERS.NETedu nameserver = B.ROOT-SERVERS.NETedu nameserver = C.ROOT-SERVERS.NETedu nameserver = D.ROOT-SERVERS.NETedu nameserver = E.ROOT-SERVERS.NETedu nameserver = I.ROOT-SERVERS.NETedu nameserver = F.ROOT-SERVERS.NETedu nameserver = G.ROOT-SERVERS.NETA.ROOT-SERVERS.NET internet address = 198.41.0.4H.ROOT-SERVERS.NET internet address = 128.63.2.53B.ROOT-SERVERS.NET internet address = 128.9.0.107C.ROOT-SERVERS.NET internet address = 192.33.4.12D.ROOT-SERVERS.NET internet address = 128.8.10.90E.ROOT-SERVERS.NET internet address = 192.203.230.10I.ROOT-SERVERS.NET internet address = 192.36.148.17F.ROOT-SERVERS.NET internet address = 192.5.5.241G.ROOT-SERVERS.NET internet address = 192.112.36.4 这告诉我们 *.root-servers.net 服务 edu. 领域,所以我们可以藉此继续查问 c 伺服器. 现在我们想要知道是谁负责下一层 mit.edu. 的领域名称: > mit.edu.Server: c.root-servers.netAddress: 192.33.4.12Non-authoritative answer:mit.edu nameserver = STRAWB.mit.edumit.edu nameserver = W20NS.mit.edumit.edu nameserver = BITSY.mit.eduAuthoritative answers can be found from:STRAWB.mit.edu internet address = 18.71.0.151W20NS.mit.edu internet address = 18.70.0.160BITSY.mit.edu internet address = 18.72.0.3 steawb, w20ns 以及 bitsy 负责 mit 领域,选择其中一个并且查询 ai.mit.edu: > server W20NS.mit.edu. 主机名称不分大小写,但是我使用滑鼠来剪贴所以这些资料是萤幕的拷贝. Server: W20NS.mit.eduAddress: 18.70.0.160> ai.mit.edu.Server: W20NS.mit.eduAddress: 18.70.0.160Non-authoritative answer:ai.mit.edu nameserver = WHEATIES.AI.MIT.EDUai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDUai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDUai.mit.edu nameserver = TRIX.AI.MIT.EDUai.mit.edu nameserver = MUESLI.AI.MIT.EDUAuthoritative answers can be found from:AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDUAI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDUAI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDUAI.MIT.EDU nameserver = TRIX.AI.MIT.EDUAI.MIT.EDU nameserver = MUESLI.AI.MIT.EDUWHEATIES.AI.MIT.EDU internet address = 128.52.32.13WHEATIES.AI.MIT.EDU internet address = 128.52.35.13ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4TRIX.AI.MIT.EDU internet address = 128.52.32.6TRIX.AI.MIT.EDU internet address = 128.52.38.6MUESLI.AI.MIT.EDU internet address = 128.52.32.7MUESLI.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.EDUAddresses: 128.52.32.13, 128.52.35.13 现在我改变查询的型态,我们已经找到该名称伺服器所以现在我们将要询问 wheaties 关於 prep.ai.mit.edu 它所知道的任何事情. > set q=any> prep.ai.mit.edu.Server: WHEATIES.AI.MIT.EDUAddresses: 128.52.32.13, 128.52.35.13prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unixprep.ai.mit.edu inet address = 18.159.0.42, protocol = tcp #21 #23 #25 #79prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.eduprep.ai.mit.edu internet address = 18.159.0.42ai.mit.edu nameserver = alpha-bits.ai.mit.eduai.mit.edu nameserver = wheaties.ai.mit.eduai.mit.edu nameserver = grape-nuts.ai.mit.eduai.mit.edu nameserver = mini-wheats.ai.mit.eduai.mit.edu nameserver = trix.ai.mit.eduai.mit.edu nameserver = muesli.ai.mit.eduai.mit.edu nameserver = count-chocula.ai.mit.eduai.mit.edu nameserver = life.ai.mit.eduai.mit.edu nameserver = mintaka.lcs.mit.edulife.ai.mit.edu internet address = 128.52.32.80alpha-bits.ai.mit.edu internet address = 128.52.32.5wheaties.ai.mit.edu internet address = 128.52.35.13wheaties.ai.mit.edu internet address = 128.52.32.13grape-nuts.ai.mit.edu internet address = 128.52.36.4grape-nuts.ai.mit.edu internet address = 128.52.32.4mini-wheats.ai.mit.edu internet address = 128.52.32.11mini-wheats.ai.mit.edu internet address = 128.52.54.11mintaka.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 的 机器),谁负责其内容(hostmaster@linux.bogus), 这个区域档案是什麽版 本(serial: 1),以及其它必须做的,有关暂存与次要名称伺服器的事. 剩下的 栏位如 refresh, retry, expire 以及 minimum 你可以使用这份文件里所用的数 字而且应该不会出问题. 现在重新起始你的 named(使用 ndc restart 指令)并使用 nslookup 来检验我们 做了什麽: $ nslookupDefault Server: localhostAddress: 127.0.0.1> 127.0.0.1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -