发信人: 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)
页面执行时间:206.967毫秒