DNS 的运作
在我们设定 IP 网路环境的时候﹐都要告诉每台主机关于 DNS 伺服器的位址(我们可以手动的在每一台主机上面设置﹐也可以使用 DHCP 来指定)。但这设定的义意何在呢?从前面的介绍我们或可知道:其目的就是请 DNS 帮忙解析主机名称与 IP 位址啦。在这个设定过程中,DNS 被称为 resolver (也就是负责解析的 DNS Server),而被设定主机,则只是单纯的 DNS Client 了,也就是提出解析请求的主机。
下面让我们看看 DNS 是怎样运作的﹕
1. 当被询问到有关本域名之内的主机名称的时候﹐DNS 伺服器会直接做出回答﹔
2. 客户端向伺服器提出查询项目﹔
3. 当被询问到有关本域名之内的主机名称的时候﹐DNS 伺服器会直接做出回答﹔
4. 如果所查询的主机名称属于其它域名的话﹐会检查快取记忆体(Cache)﹐看看有没有相关资料﹔
5. 如果没有发现﹐则会转向 root 伺服器查询﹔
6. 然后 root 伺服器会将该域名之下一层授权(authoritative)伺服器的位址告知(可能会超过一台)﹔
7. 本地伺服器然后会向其中的一台伺服器查询﹐并将这些伺服器名单存到记忆体中﹐以备将来之需(省却再向 root 查询的步骤)﹔
8. 远方伺服器回应查询﹔
9. 若该回应并非最后一层的答案,则继续往下一层查询,直到获的客户端所查询的结果为止﹔
10. 将查询结果回应给客户端﹐并同时将结果储存一个备份在自己的快取记忆里面﹔
11. 如果在存放时间尚未过时之前再接到相同的查询﹐则以存放于快取记忆里面的资料来做回应。
从这个过程我们可以看出﹐没有任何一台 DNS 主机会包含所有域名的 DNS 资料﹐资料都是分散在全部的 DNS 伺服器中﹐而 NIC 只需知道各 DNS 伺服器位址就可以了。
为了更好地理解一下 DNS 的运作﹐让我们用下图看看查询 www.home.netman.com.tw 这台主机位址的过程﹕
在这个例子中﹐www.home.netman.com.tw 台主机的 DNS 对应资料﹐是由负责 home.netman.com.tw 这个域名的 DNS 伺服器管理的。(在 DNS 术语中﹐我们称一个域名为“zone”﹐这个 zone 可以是您从 NIC 申请回来的域名﹐也可以是从该域名之下延伸出来的“sub-zone”)。在这台 DNS 伺服器上面﹐必须有一个关于 home.netman.com.tw 这个 zone 的档案﹐而这档案里面必须有一笔关于 www 的记录(任何主机都是以“记录”来表示,称为 Resource Record)。这个记录可以为一个 IP 位址﹐也可以以别名形式来对应一台主机名称﹐但无论如何﹐所对应的主机名称最终是要被一个 IP 位址所对应着就是了。
同时﹐DNS 还能提供“反查询”(reverse lookup) 功能﹐也就是以 IP 来查询主机名称。网路上面的许多服务﹐如﹕FTP, SMTP﹑等等﹐都需要到这个功能。其实﹐DNS 服务本身就必须要使用反查询功能﹐而且在设定上﹐也必须要为每个网路建立起 reverse zone。虽然有些人发觉即使没有 reverse zone 也可以使用到 DNS 服务﹐但其中弊端却不容易被察觉到﹐在这个(中文)网页﹕http://dnsrd.nctu.edu.tw/Basic/WhenToUse-Rev.html 上面﹐您可以看到忽略 revers zone 所致一些问题。
DNS 的名称记录
事实上﹐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.
﹔
home IN ns debian.home.siyongc.domain.
debian.home IN A 10.0.2.101
我们姑且不理会开头那几行的意思﹐那是给 DNS 系统本身使用的(我将会在“学习 Linux”文章里面再详细讨论)﹐这里我们只是看看几个记录名称而已﹕
分擔 DNS 工作
由於 DNS 的重要性日益顯著,為提高其容錯能力及查詢效能,我們在架設某一單一 zone 的時侯,常以多台伺服器來負責該 zone 的服務。其中,我們必需指定一台 Primary(master) DNS 伺服器,它是架設在某一個網域下被主要授權並控制所有名稱記錄的主控伺服器﹐管轄著該網域的所有記錄資料﹐這些記錄資料只有 primary(master) 可以修改。
但如果在一個比較大型的網路中﹐DNS 伺服器就會變得很繁忙﹐所以您可以設定多個 DNS 來分擔 master 的工作﹐但您或許不願意到每一個 DNS 伺服器去更新資料吧﹖而且就算您願意這樣做﹐也容易出現錯誤或資料不同步的情形。這樣您可以設定其它的伺服器為 secondary (slave) DNS 來複製 master 上面的記錄資料﹐這樣﹐其它的電腦可以被分派到不同的 DNS 做查詢﹐既可以分擔 master 的工作﹐而且資料也可以自動進行同步工作。為確保資料的一致性,master 每次更新過資料後會以 notify 機制主動通知 slave 前來同步。此外,您可以設定 DNS 資料同步的時間間隔﹐在 dns 檔案中的 Refresh 設定就是了。