最后﹐让我们检查剩下的 named.local 档案吧。如果您还没忘记 /etc/named.conf 的内容的话﹐应知道这个档案是 zone "0.0.127.in-addr.arpa" 的‘反解’记录档﹐它的内容也很简单﹕
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
前面的部份应该不用多解释了(如果您还不清楚﹐那就必须重读前面的文章)。最后一行我们看到一个“ PTR ”记录﹐它是“Pointer”的意思。 PTR 通常用於反记录当中﹐将 IP 指向主机名称(刚好和 A 记录相反)。您或许还不是很清楚这个句子為什麼是这样设定的吧﹖或许您会这样问﹕您不是说 PTR 是从 IP 反查询主机名称的吗﹖為什麼这裡是 1 而不是 127.0.0.1 ?
哦﹐如果您有这样的问题﹐那证明您对 DNS 的查询模式还不是了解得很透彻﹐不过也不用紧张﹐在后面的实作例子中﹐您将获得更进一步的感性认识。这裡﹐我暂时简单解释上面这行就是了﹕
我们知道 127.0.0.1 所对应的主机名称就是 localhost ﹐因為这裡是反向查询﹐所以 IP 顺序是掉过来写的﹐於是这个反查询 IP 就是﹕“ 1.0.0.127.in-addr.arpa. ”﹐由於我们这裡的 ORIGIN ( @ ) 是“ 0.0.127.in-addr.arpa." ”﹐因為在记录档中﹐如果名称不带小数点﹐则被补上 $ORIGIN 或 zone 的名称﹐所以这个 “ 1 ”就成了 1.0.0.127.in-addr.arpa. ”。同样道理﹐后面的“ localhost. ”如果漏了最后的小点的话﹐则会成為“ localhost.0.0.127.in-addr.arpa. ”﹐这显然是不对的。假如您喜欢﹐可以将这行句子修改成為下面的样子﹕
﹔﹔修改前﹕
1 IN PTR localhost.
﹔﹔修改后﹕
1.0.0.127.in-addr.arpa. IN PTR localhost.
嗯~~ DNS 的设定看起来真的蛮伤脑筋的﹐或许您到这裡已经被搞得乱七八糟了。假如真的如此﹐我建议您先休息一下﹐然后回来重读上面的内容﹐直到您能理解之后﹐才继续下面的。否则﹐越往后﹐您的问题越像滚雪球那样越来越大﹐这更浪费时间啦~~~ Okay? Take it easy ...
前面所看到的设定﹐事实上已经足够让您的 DNS 主机跑起来了﹗因為它能够透过 root 查询其他 DNS 的缘故﹐您无须在再加设任何设定﹐您就可以利用这台主机為大家提供 Internet 的 DNS 查询服务。只是﹐这样的 DNS 主机﹐我们称之為 cache only name server 而已。如果您了解 DNS 的查询流程﹐您应该知道 DNS 的 cache 作用和它的效益。所以﹐就算您不打算设定自己的 domain name 服务 ﹐我也建议您至少可以将 cache only NS 跑起来。
设定 NAMED
当您对 /etc/named.conf 档案和 /var/named 目录的设定有初步了解之后﹐下面﹐让我们用一个实际例子来看看如何设定自己的 domain name 服务吧。我个人的习惯是先将网域和主机的资料整理出来﹐并列成一个表格﹕
Domain 名称 IP 位址
rh71.siyongc.domain 192.168.100.23
acer.siyongc.domain 192.168.100.20
mdk.siyongc.domain 192.168.100.24
emilie.siyongc.domain 192.168.100.11
rh71.dmz.domain 10.0.1.131
lp64.dmz.domain 10.0.1.130
当所有的主机名称和 IP 整理出来之后﹐再看看我们这裡需要设定哪些 domain ﹖ 从上面的资料中﹐我们不难发现有两个正解 zone 和两个反解 zone 需要设定﹐分别是﹕
区域名称 记录项名称
siyongc.domain emilie﹑acer﹑rh71﹑mdk
dmz.domain lp64﹑rh71
100.168.192.in-addr.arpa 11﹑20﹑23﹑24
1.0.10.in-addr.arpa 130﹑131
因為这些 IP 和 domain 都在内部网路使用﹐所以我们省却了註册这关﹐同时也不必担心授权的问题。但这些资讯也只能在内部网路使用﹐无论如何是不能设定在对外的 DNS 上面的 (為什麼﹖除了安全的考量之外﹐private IP 的使用本来就有这样的规定﹐就算您真的对外散佈这些 DNS 资讯﹐在 IP 的路由上还是有问题﹐所以﹐内部的资讯﹐只能内部使用)。
一般来说﹐我会先设定“反查询区域(revers zone)”﹐当然﹐这是个人习惯而已。所以﹐我首先在 /etc/named.conf 上面补上两个反解 zone 的设定﹕
zone "100.168.192.in-addr.arpa" IN {// 定义反解区域名称
type master;// 定义伺服器类型
file "192.168.100.rev";// 指定记录档名称
};// 结束区域设定
zone "1.0.10.in-addr.arpa" IN {
type master;
file "10.0.1.rev";
};
注意哦﹕如果您要设定外部 DNS 的反解﹐那就先获得 ISP 的授权才能自己设定﹔否则反解部份就不用自己担心了﹐但一定要请 ISP 帮忙。
Tips﹕假如您是 hinet 的固定制 ADSL 用户﹐可以到 hinet 的网站填写表格﹐请他们帮忙设定反解﹕
其它 ISP 的用户﹐请自行接洽 ISP 的客服部门。无论如何﹐如果没有取得授权﹐那就不要自己设﹗
这裡﹐我们再一次碰到反解区域的识别标誌﹕“ .in-addr.arpa ”﹐同时﹐我们解释一下上次关於本机反解还没说明的地方﹕如果您了解 DNS 的授权和查询过程(这章一开始的时候﹐我就已要求您一定要学习的)﹐您会知道反解查询是先从 root 开始(正解也是一样)﹐然后到 arpa ﹑到 in-addr ﹑到第一组 IP ﹑到第二组 IP ﹑...... 这样查询下来的。所以﹐在设定反区域的时候﹐您一定要将您的 net ID 部份反过来写﹐例如﹕我的网路為 192.168.100.0/24﹐它的反查询区域名则是﹕“100.168.192.in-addr.arpa”﹔假如我将 netmask 改為 16 bit ﹐即变成 192.168.0.0/16﹐它的反解区域名就会变成﹕“168.192.in-addr.arpa”。如果您还搞不懂如何区分 Net ID 和 Host ID﹐请立即去看一看“学习网路”中的“IP 基础”。