第二十二章 DNS 服务器

如果说 DNS 服务器是网络上最重要的服务器一点也不为过。少了 DNS 服务器,我们要存取另一台计算机时,都必须要使用 IP。您再也不能使用 www.yahoo.com 或是 alex@twbsd.org 等好记的名称。如果您是大型网络的管理者,一定要知道如何架设 DNS 服务器。而一般的系统管理者也应该要知道 DNS 的运作原理。读完本章后,您将对下列 DNS 主题有更深入的了解:

22.1 DNS 概论

DNS (Domain Name Service) 是网域名称服务的缩写,其主要目的是在解决机器的网域名称 (Domain name) 与 IP address 的对应问题。 在因特网上,为了要联机到其它计算机,必须经由 IP 地址来判断计算机所在位置,例如 140.115.83.240 就是一个 IP 地址。但是这一长串的 IP 并不好记,因此出现了 Domain Name 来为 IP 取一个比较好记的名字,如 bbs.mgt.ncu.edu.tw。Domain Name 的架构是一个树状结构,例如上述的 bbs.mgt.ncu.edu.tw 所代表的就是台湾 (tw) 的中央大学 (ncu) 管理学院 (mgt) 所属的电子布告栏服务器 (bbs)。而 DNS 服务器的功用就是将你输入的 Domain Name 转成 IP,或者是将查询 IP 并转回所对映的 Domain Name。

图 22-1

网域架构是一个树状结构,以根网域为起点,慢慢散开成各个节点。以中央大学的 DNS 为例,我们可以看到在台湾的网域 (tw) 下有许多不同的网域,如 .net.tw、.edu.tw 等。而 .edu.tw 下又有很多的教育单位,中央大学的网域 ncu.edu.tw 就是其中之一。

在根网域下的第一层可以分为二大类,第一种是以国码为网域名称,如 .tw、.jp。而另一种是 .org、.com、.net 等不分国码的网域。由于因特网起源于美国,一开始的名称设计并没有国码,只有使用 .org 表示网织、.com 表示公司、.edu 表示教育单位、.gov 表示政府组织等,所以没有国码的网域名称一开始是美国所使用。目前顶层的网域名称皆由 ICANN (The Internet Corporation For Assigned Names and Numbers) 所公布,而每一个第一层的网域都交由各自国家管理。以台湾的网域为例,它是由台湾网络信息中心 (TWNIC) 所管理。TWNIC 将申请授权业务再委托 Hinet 等其它单位受理。如果您要申请 .tw 的网域,可以到 TWNIC 查询代理申请业务的公司。

一般而言, DNS 服务器可以分为三种,主要名称服务器 (Primary/master Server),次要名称服务器 (Secondary/slave Server),及快取名称服务器 (Cache only Server)。主要名称服务器是管理所属网域所需名称对映设定的主要服务器,如果您自己有一个网域,必须经由设定主要名称服务器来管理网域中 IP 所对映的名称。而次要名称服务器是取得主要名称服务器的数据,用以在主要服务器过于忙录或停止服务时备用。每个 DNS 服务器都会将所查询过的 Domain Name 建立快取 (cache),以供下次查询时能快速响应。每一个服务器都会设定该 Domain Name 快取的数据要保留多久,以免得到过时的数据。

DNS 有分为正解 (forward) 及反解 (reverse)。正解就是把 Domain Name 转成 IP,而反解是将 IP 转成 Domain Name。FreeBSD 内建有 DNS 的服务,只要先设定 /etc/namedb/ 下的档案即可打开该服务。

那要如何得到一个 Domain Name 呢?以学校而言,每个学校都有自己的 Domain Name 及 IP 范围,如果你只有一台机器,想要为它申请一个 Domain Name,您并不需要自己架设 DNS。只要向学校计中或是管理该 IP 的单位提出申请正反解即可。如果您想为自己的系所架设 DNS 以管理该系的 IP,必须先向上层 DNS (也就是校方计中) 申请授权,让针对您系所的查询都交有你的 DNS 服务器处理。DNS 的架构是树状结构,以查询 bbs.mgt.ncu.edu.tw 而言,管理 tw 网域的服务器会告诉你管理 ncu.tw 的服务器在哪里,而 ncu.tw 会告诉你管理 mgt.ncu.edu.tw 的服务器在哪里,最后 mgt.ncu.edu.tw 发现自己有 bbs.mgt 的资料,并传回其 IP。

如果您自己要申请一个 Domain Name,你可以到 www.twnic.com.tw 去申请一个 .tw 的名称,如 abc.com.tw;或者到 YAHOO! 去申请各国的 Domain,如 abc.com。当您去 TWNIC 申请网域名称时,你必须要有自己的 DNS 服务器,并在 TWNIC 设定 DNS 服务器的地址,接着再由您的 DNS 服务器来做解析。如果您是在 YAHOO! 申请网域名称,国外的代理申请者会帮你做 DNS 的服务,你只要在他们的网页设定你想要的名称及所对映的 IP 即可,而且不限个数,当然你也可以自行架设 DNS 服务器。

如果只一个固定 IP,您不需要架设 DNS,除非我们管理一个网域中多个 IP 才有必要。再者,如果您是固接式 ADSL 或是其它由 ISP 提供的联机方式,你的 DNS 反解必须要由上层 ISP 授权由您自行管理你的 IP ,这样你的设定才会生效,否则应该请 ISP 帮你作反解的设定,也就是告诉 ISP 你的 IP 要对映那一个 Domain Name。

对于 DNS 有初步概念之后,我们接着说明如何设定 FreeBSD 成为一台 DNS 服务器。我们以下列的数据做为设定的依据:

网域:twbsd.org
IP:123.44.55.224~123.44.55.231 (八个 IP)
Netmask:255.255.255.248

22.2 named.conf

我们先在原本 /etc/namedb/named.conf 文件的最下方加入下列设定,该档中行首以 // 开头者为批注:

# 如果在自己的 DNS 设定中找不到,则向 forwarders 中设定的 DNS Server 查询,
# 以加快查找的速度。我们通常会设成 ISP 的 DNS Server。
forwarders { 168.95.1.1;};

// 设定要正解的网域是 twbsd.org,DNS 服务器是 master server
// 并到 twbsd.fwd 这一个档案中去找 twbsdorg 的设定。
zone "twbsd.com" {
    type master;
    file "master/abc.fwd";
};

// 下面是反解的数据,设定要反解的 IP 为 123.44.55.224 到 123.44.55.231
// 设定关于该 IP 范围反解的设定档为 twbsd.rev
zone "224-29.55.44.123.in-addr.arpa" {
    type master;
    file "master/twbsd.rev";
};

第一个部份是正解档的设定,也就是设定将名称转为 IP。我们设定管理 twbsd.org 这个网域,并设定网域设定数据存放在 twbsd.fwd 这个档案中。

第二个部份是反解的设定,也就是设定将 IP 转为名称。如果您的 ISP 会帮您做 IP 反解,您可以忽略反解的设定。

在反解的设定方面,第一行的 zone 设定部份,针对不同的子网络范围有不同的设定格式。如果你的 IP 的范围是整个 Class C,子网掩码 (Netmask) 为 255.255.255.0,或是其它经由切割过的 IP,关于上面反解数据 zone 那一行的设定会有点不同。

以 123.44.55.0 为例,假设我们具有完整 Class C,IP 的范围是 123.44.55.*。则其子网掩码为 255.255.255.0, 转换为二进为后有 24 个 1,所以网域可以写成 123.44.55.0/24。在设定zone 时,我们可以设定为:

zone "55.44.123.in-addr.arpa"

若是 Class C 分成二个网域,每一段有 128 个 IP,子网掩码为 255.255.255.128,则二个网域分别可以写成 123.44.55.0/25 及 123.44.55.128/25。这二个网域分可以可设定如下:

zone "0-25.55.44.123.in-addr.arpa" ; 0-25 是第 1段
zone "128-25.55.44.123.in-addr.arpa" ;128-25 是第 2段

若是 Class C 分成四个网域,每一段有 64 个 IP,子网掩码为 255.255.255.192,则可以设定为:

zone "0-26.55.44.123.in-addr.arpa" ; 0-26 是第 1段
zone "64-26.55.44.123.in-addr.arpa" ; 64-26 是第 2段
zone "128-26.55.44.123.in-addr.arpa" ;128-26 是第 3段
zone "192-26.55.44.123.in-addr.arpa" ;192-26 是第 4段

基本上就是将 IP 倒过来写,并在开头指定起始 IP 及范围。

小提示

还记得子网掩码的计算方法吗?您可以参考「网络设定」一章中关于 IP 地址、子网掩码及切割网络的说明。

接下来就可以在 /etc/namedb/master 目录中新增并编辑 twbsd.fwd 这个正解档及 twbsd.rev 反解檔。

22.3 正解档设定

以下是 /etc/namedb/master/twbsd.fwd 的内容,档案中 ";" 之后为批注:

$TTL	172800

@	IN	SOA	twbsd.org. root.twbsd.org.  (
				2005100301  ; Serial
				172800	; Refresh
				900	; Retry
				3600000	; Expire
				3600 )	; Minimum
	IN		NS		twbsd.org.
	IN		A		123.44.55.225
www	IN		A		123.44.55.226
ftp	IN		CNAME	www
mail	IN		A		123.44.55.227
mail	IN		MX		10 www.twbsd.org
	IN		MX		20 mail.def.net

接着我们针对档案中的每一行加以解释,您可以依自己的需要来增删数据,请不要直接使用这里的设定。为了说明的需要,有的设定有点重复,例如 mail.twbsd.org 我们设定了三个项目,在真实生活中,并不会有这种情形。

让我们先看到第一行 $TTL 的部份,$TTL 代表这设定的数据要存多久,其后所接的值是以秒数计算。我们这里的设定是 172800,表示二天。

正解档中的内容中除了第一行外,每一行的格式为 [name] [ttl] [class] [type] [data]。以下是每个字段的说明:

以下让我们针对每一行来做说明。首先请看到 @ IN SOA twbsd.org. root.twbsd.org. (…) 的部份,这个部份虽然跨过很多行,但实际上是一个设定项目,只是二个括号中间的设定可以被分为很多行以利阅读。这一行的设定是最基本的,也是最详尽的,在该行中,开头的 @ 代表网域名称 twbsd.org,IN 表示为 internet 的数据型态。SOA 后面接的是 twbsd.org,表示这台 twbsd.org 机器是 twbsd.org 网域中的主要名称服务器。而 root.twbsd.org 表示管理者的Email 是 root@twbsd.org。接下来让我们看一下括号中的设定所代表的意义:

接下来的 IN NS twbsd.org. 表示将 twbsd.org 这个网域的 DNS 服务器是 twbsd.org 这台机器。这一行中,省略了 name 及 ttl 的字段,直接指定了 class、type、及 data。

IN A 123.44.55.225 表示将 twbsd.org 这台机器的 IP 设为 123.44.55.225。前面省略了主机名称,表示设定的是 @ 的主机。A 代表的就是指定 address,就是将 twbsd.org 这台机器的 IP 地址设定为 123.44.55.225。

www IN A 123.44.55.226 表示将 www.twbsd.org 的 IP 设定为 123.44.55.226。你可以看到这里使用了字段 name class type data。接着一行使用了 type CNAME,表示将 ftp.twbsd.org 这台机器设定为和 www.twbsd.org 同一个 IP。也就是这二个名字会对映到同一台机器。

另外,mail IN MX 10 www.twbsd.org 及下一行 MX 的设定表示将 mail.twbsd.org 的信件交由 www.twbsd.org 或 mail.def.net 来处理,数字 10 及 20 表示优先级,数字小者优先。这里的设定是将给 mail.twbsd.org 的信件交给 www.twbsd.org 来处理,如果 www.twbsd.org 没有回应则交由 mail.def.net 来处理。

22.4 反解档设定

如果您要设定 DNS 反解,则需要再新增并编辑 /etc/namedb/master/twbsd.rev 的档案来设定,也就是设定某一个 Domain Name 要对应到哪个 IP:

$TTL	172800
@	IN	SOA	twbsd.org. root.twbsd.org.  (
				2001080301  ; Serial
				172800	; Refresh
				900	; Retry
				3600000	; Expire
				3600 )	; Minimum
		IN	NS	twbsd.org.
225      IN       PTR       twbsd.org.
226      IN       PTR       www.twbsd.org.
227      IN       PTR       mail.twbsd.org.

和正解档重复的地方此略过,我们来看 PTR 的部份。PTR 就是将 IP 指向 Domain Name,如 225 IN PTR twbsd.org. 就是将 123.44.55.225 指向 twbsd.org 这台机器。而接下来的 226 IN PTR www.twbsd.org. 表示将 123.44.55.225 指向 www.twbsd.org。

22.5 最后的设定

若您使用 FreeBSD 6.x,在修改好正解档和反解档之后,请先到 /etc/namedb/ 目录下执行下列指令以产生 localhost 的反解设定档 /etc/namedb/master/localhost.rev

# cd /etc/namedb
# sh ./make-localhost

接着,请先编辑 /etc/resolv.conf,在 nameserver 部份的第一行加入 下列设定,以使用本机作为第一台 DNS 服务器:

nameserver  127.0.0.1

接下来,请修改 /etc/rc.conf,并加入下列一行,以在开机时启用 DNS 服务:

named_enable="YES"

接着我们就可以使用下列指令来启动 DNS 服务了:

# /etc/rc.d/named start

在执行完上述指令之后,您应该可以进行 DNS 查询了,但建议您先使用下列指令查看系统日志中是否有错误讯息。如果有错误讯息,您必须先手动排除。

# tail /var/log/messages

接着就可以用 nslookup 来试试看我们所做的设定:

# nslookup www.twbsd.org
# nslookup 123.44.55.225

如果你没有设定 /etc/resolv.conf 的话,上面的指令并不会以你的机器为预设 DNS 服务器,这时你可以使用下列指令来以 127.0.0.1 这台机器为服务器,查询 www.twbsd.org 的设定:

# nslookup www.twbsd.org 127.0.0.1

如果您要查询 MX、NS、SOA 等记录,也可以使用 nslookup 来查询,只要在查询先 set type 即可:

# nslookup
Default Server: localhost.twbsd.org
Address: 127.0.0.1
> set type=MX
> mail.twbsd.org
Server: localhost.twbsd.org
Address: 127.0.0.1
mail.twbsd.org preference = 10, mail exchanger = www.twbsd.org
twbsd.org nameserver = twbsd.org
www.twbsd.org internet address = 123.44.55.225
twbsd.org internet address = 123.44.55.225
> set type=NS
> twbsd.org
Server: localhost.twbsd.org
Address: 127.0.0.1

twbsd.org nameserver = twbsd.org
twbsd.org internet address = 123.44.55.225
> set type=SOA
> twbsd.org
Server: localhost.twbsd.org
Address: 127.0.0.1
twbsd.org
origin =twbsd.org
mail addr = root.twbsd.org
serial = 2002080301
refresh = 3600 (1H)
retry = 900 (15M)
expire = 3600000 (5w6d16h)
minimum ttl = 3600 (1H)
twbsd.org nameserver = twbsd.org
twbsd.org internet address = 123.44.55.2.225
> exit