电脑技术学习

DNS的名称记录

dn001

  事实上DNS不仅仅是用来解释地址用的而且还可以回答更多关於网路和主机的其它信息其中很重要的一个功能就是可以供邮件系统进行路由。这些资料通常会以不同的“记录”名称出现在DNS的资料档案中。

下面让我们参考一个Linux的DNS档案看看这些记录是如何表示的


Zone file for siyongc.domain

Then full zone file

$TTL 86400
@ IN SOA redhat52.siyongc.domain. netman.siyongc.domain. (
1999092801 ; serial
8H ; refresh
2H ; retry
1W ; eXPire
1D ) ; minimun

IN TXT "A test domain, created by Netman"
IN NS redhat52
IN NS debian.home.
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.

localhost IN A 127.0.0.1

gw IN A 192.168.0.17
IN HINFO "Redhat" "MASQ"
IN TXT "The masquerade gateway to internet"

redhat52 IN A 192.168.0.17
IN MX 10 redhat52
IN MX 20 debian.home.
IN HINFO "Dell PII 266" "Linux RedHat"
www IN CNAME redhat52
mail IN CNAME redhat52
FTP IN CNAME redhat52
news IN CNAME redhat52
smtp IN CNAME redhat52

pii266 IN A 192.168.0.15
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.

slware36 IN A 192.168.0.18
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.

rhroute IN A 192.168.0.4
IN MX 10 redhat52.siyongc.domain.
IN MX 20 debian.home.


我们姑且不理会开头那几行的意思那是给DNS系统本身使用的(我将会在“学习Linux”文章里面再具体讨论)这里我们只是看看几个记录名称而已

类别名称 代表意思
TXT 只是一些说明文字可以用来说明主机/网路环境设定
NS 名称伺服器也就是该zone指定的DNS伺服器名称
MX 邮件伺服器负责经由DNS查询进行邮件传递的邮件伺服器。这样的好处是假如您要更换邮件伺服器的话只需修改DNS记录就可以了而对方的邮件伺服器则无需理会您要使用的究竟是哪一台电脑来负责邮件交换。同时您也可以指定多台邮件伺服器来分担邮件交换工作在MX後面的号数用来指定伺服器的使用顺序数字越低越优先。
A 用来对应主机名称和其IP地址这个记录最常用而且也是最重要的记录之一
HINFO 和TXT差不多是回答“Host Information”查询用的
CNAME 是一个“别名”记录可以给A记录使用另外一个(或多个)名称让外面查询。CNAME可以对应一个A记录但不鼓励对应另一个CNAME记录。
AAAA 和A记录一样只不过对应的是IP v6 格式

分担DNS工作

Primary(master) DNS伺服器是架设在某一个网域下被主要授权并控制所有名称记录的主控制伺服器管辖着所有该网域的记录资料这些记录资料只有primary(master)可以修改。

但假如在一个比较大型的网路中DNS伺服器就会变得很繁忙了所以您可以设定多个DNS来分担master的工作但您或许不愿意到每一个DNS伺服器去更新资料吧而且就算您愿意这样做也轻易出现错误或资料不同步的情形。这样您可以设定其它的伺服器为secondary (slave) DNS来master上面的记录资料这样其它的电脑可以被指定到不同的DNS做查询既可以分担master的工作而且资料也可以自动进行同步工作。您可以设定DNS资料同步的时间间隔在dns档案中的Refresh设定就是了。同时您还会看到Serial当slave的上面的serial数字少於它资料就会被否则会被忽略。

验DNS工作

当您建立好一个DNS伺服器之後除了可以直接使用命令 ping (这个会在後面章节说明)直接ping一下上面的记录之外最好还是使用“nslookup”这个命令进行检测或除错(Windows9x系统并不包含此命令)。下面让我们在Linux中验一下当您输入nslookup之後您会看到您机器目前指定的DNS伺服器的回应

Default Server: redhat52.siyongc.domain
Address: 192.168.0.17


然後您输入欲查询的主机或IP地址您会看到从DNS回来的结果

> pii266.siyongc.domain
Server: redhat52.siyongc
Address: 192.168.0.17

Name: pii266.siyongc.domain
Address: 192.168.0.15

> www.hinet.net
Server: redhat52.siyongc.domain
Address: 192.168.0.17

Non-authoritative answer:
Name: w3c2.hinet.net
Address: 168.95.1.84
Aliases: www.hinet.net


这是一个标准模式下面的查询我们可以看到不是这台DNS伺服器治理的查询而且已经在 cache 里面了会附加一个“Non-authoritative answer:”的回应信息。但假如我们先将查询模式设为any之後再输入同样的主机名称

> set q=any
> pii266.siyongc.domain
Server: redhat52.siyongc.domain
Address: 192.168.0.17

pii266.siyongc.domain preference = 20, mail exchanger = debian.home
pii266.siyongc.domain preference = 10, mail exchanger = redhat52.siyongc.domain
pii266.siyongc.domain internet address = 192.168.0.15
siyongc.domain nameserver = debian.home
siyongc.domain nameserver = redhat52.siyongc.domain
debian.home internet address = 192.168.0.2
redhat52.siyongc.domain internet address = 192.168.0.17


您就可以看到更多的资料了例如MXNS和它们的IP地址等信息。假如您使用“除错模式”的话看到的资料还将更多

> set debug
> www.hinet.net
Server: redhat52.siyongc.domain
Address: 192.168.0.17

res_nmkquery(QUERY, www.hinet.net, IN, ANY)
------------
Got answer:
HEADER:
opcode = QUERY, id = 3102, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 3, additional = 3

QUESTIONS:
www.hinet.net, type = ANY, class = IN
ANSWERS:
-> www.hinet.net
canonical name = w3c2.hinet.net
ttl = 76134 (21h8m54s)
AUTHORITY RECORDS:
-> hinet.net
nameserver = HNTP1.hinet.net
ttl = 162533 (1d21h8m53s)
-> hinet.net
nameserver = HNTP3.hinet.net
ttl = 162533 (1d21h8m53s)
-> hinet.net
nameserver = DNS.hinet.net
ttl = 162533 (1d21h8m53s)
ADDITIONAL RECORDS:
-> HNTP1.hinet.net
internet address = 168.95.192.1
ttl = 162533 (1d21h8m53s)
-> HNTP3.hinet.net
internet address = 168.95.192.2
ttl = 162533 (1d21h8m53s)
-> DNS.hinet.net
internet address = 168.95.1.1
ttl = 162533 (1d21h8m53s)

------------
Non-authoritative answer:
www.hinet.net
canonical name = w3c2.hinet.net
ttl = 76134 (21h8m54s)

Authoritative answers can be found from:
hinet.net
nameserver = HNTP1.hinet.net
ttl = 162533 (1d21h8m53s)
hinet.net
nameserver = HNTP3.hinet.net
ttl = 162533 (1d21h8m53s)
hinet.net
nameserver = DNS.hinet.net
ttl = 162533 (1d21h8m53s)
HNTP1.hinet.net
internet address = 168.95.192.1
ttl = 162533 (1d21h8m53s)
HNTP3.hinet.net
internet address = 168.95.192.2
ttl = 162533 (1d21h8m53s)
DNS.hinet.net
internet address = 168.95.1.1
ttl = 162533 (1d21h8m53s)

另外您还可以用 set q=mx 或 set q=ptr 等模式来查询特定的记录也可以用 ls 後接 domain name 来查看某个 domain 的所有主机记录。善用 nslookup 我们可以找到许多 DNS 的信息而当有问题发生的时候这个工具就变得非常有用了。

同时在设定 DNS 的时候需要比较慎密的设计以免不实资料的滥。治理好 DNS 系统是每一个网路治理员应尽的义务来的。