linux
8.1 建立DNS 服务器✧ 工作情境人们使用互联网,通常采用域名,而计算机又好使用IP 地址,域名如何实现与IP 地址的对应关系?实现的方式就是DNS 服务器。从这一章节开始,将介绍Linux 系统
8.1 建立DNS 服务器
✧ 工作情境
人们使用互联网,通常采用域名,而计算机又好使用IP 地址,域名如何实现与IP 地址的对
应关系?实现的方式就是DNS 服务器。
从这一章节开始,将介绍Linux 系统强大的网络功能,如Web 服务器、FTP 服务器和邮件服
务器。为了实现真实的网络情境,首先要建立DNS 服务器,以便后续章节的实例可以采用域名访
问,达到实际应用的模式。
✧ 学习目标
通过本章节的学习,能够理解Internet 上DNS 域名空间结构和DNS 服务器的工作模式。通
过实例的学习,能够建立一个DNS 服务器,并能为局域网工作站提供域名解析服务。
✧ 考核评价
模拟一个企业机构的网络环境,能够建立一个DNS 服务器,为局域网内部的Web 服务器、FTP
服务器、邮件服务器以及其他工作站提供域名服务。
能够熟练的进行DNS 客户端的配置,不论是Linux 系统,还是Windows 系统为客户端工作站。
网络体系中使用的是IP 地址,IPV4地址是4个点分十进制数,难于记忆应用。因此,人们采用了域名系统DNS (Domain Name System),DNS 是Internet 和Intranet 中重要的网络服务,它是一种组织成域层次结构的计算机和网络服务命名系统。
通过DNS 服务可以将域名解析为IP 地址,从而使得人们能通过简单好记的域名来代替IP 地址访问网络。
3.8.1 DNS 的域名服务
在引入DNS(Domain Name System,域名系统) 之前,Linux 系统是将容易记忆的域名映射到IP 地址并将它保存在一个共享的静态文件hosts (/etc/hosts)中,再由它来实现网络中域名的管理。但随着网络的庞大,特别是当Internet 上的计算机数量迅速增加时,通过一个中心授权机构为所有Internet 主机管理一个主机文件的工作将无法进行。
开发DNS ,通过DNS 将存储在数据库中的域名数据分布在不同的服务器上,就可以减轻对任何一台服务器的负载,并且提供了以区域为基础的对域名系统的分布式管理能力。
1. DNS 域名系统的简介
网络中为了区别各个主机,为每台主机分配一个唯一的IP 地址。但这些数字难于记忆,所以就采用“域名”的方式来取代这些数字。
不过最终还是必须将域名转换为对应的IP 地址才能访问主机。通过建立DNS 数据库,记录主机名称与IP 地址的对应关系,驻留在服务器端,为客户端的主机提供IP 地址解析服务,这就是域名服务所提供的域名解析。当某台主机要与其他主机通信时,就可以利用主机名称向DNS 服务器查询该主机的IP 地址。
整个DNS 域名系统由以下4个部分组成。
(1) DNS 域名空间
DNS 是基于客户/服务器模型设计的。本质上,整个域名系统以一个的分布式数据库的方式工作。DNS 域名空间的分层结构,如同一颗倒立的树,层次结构非常清晰。
,目前由InterNIC 管理全世界的 IP 地址,在 InterNIC 之下的 DNS 结构分为多个Domain, 其中 root domain (根域) 下的七个 top-level domain(顶级域) 都归 InterNIC 管理。top-level domain 可以再细分为 second-level domain (二级域) ,而 second-level domain 又可以分成多级的 subdomain (子域)如 "example 、www" ,在最下面一层被称为 hostname(主机名称) 如 "host-a" ,一般用户使用完整的名称来表示 (FQDN全部有资格的域名) ,如 "host-a.example.Microsoft.com" 。
在Internet 的DNS 域名空间中,域是其层次结构的基本单位,任何一个域最多属于一个上级域,但可以有多个或没有下级域。在同一个域下不能有相同的域名或主机名,但在不同的域中则可以有相同的域名或主机名。

图3.8.1 DNS域名空间的层次结构
根域(Root Domain)
在DNS 域名空间中,根域只有一个,它没有上级域,以圆点" . " 来表示。全世界的IP 地址和DNS 域名空间都是由位于美国的InterNIC(Internet Network Information Center,因特网信息管理中心) 负责管理或进行授权管理的。目前全世界有13台根域服务器,这些根域服务器也位于美国,并由InterNIC 管理。
但是,在根域服务器中并没有保存全世界的所有Internet 网址,其中只保存着顶级域的“DNS 服务器--IP 地址”的对应数据。
⏹ 顶级域(top-level domain,TLD)
在根域之下的第一级域便是顶级域,它以根域为上级域,其数目有限且不能轻易变动。顶级域是由InterNIC 统一管理的。在FQDN 中,各级域之间都以原点" . " 分隔,顶级域位于最右边。
⏹ 常用的地理域和机构域
● 地理域
. AU 澳大利亚 . RU 俄联邦 . FR 法国 . DE 德国 . JP 日本 . KR 韩国 . TW 台湾省 . CN 中国 . CA 加拿大 . IT 意大利 . CH 瑞士 . SG 新加坡 . UK 英国 . US 美国
● 机构域
. com 商业组织 . edu 教育组织 . net 网络支持组织 . mil 美国军事机构 . gov 美国政府机构 . org 非商业性组织 . int 国际组织
⏹ 各级子域(Subdomain)
在DNS 域名空间中,除了根域和顶级域之外,其它域都称为子域。
⏹ 反向域(in-addr.arpa)
为了完成反向域解析过程,需要使用到另外一个概念,即反向域。
(2) 资源记录
将DNS 域名映射到特定类型的资源信息,以便在名称注册和解析时使用。
(3) DNS 服务器
提供存储和应答资源记录的名称查询服务。
(4) DNS 客户端 ⏹
,用来查询DNS 服务器,将域名称解析为查询中指定的资源记录类型。
2. DNS 查询解析
当DNS 客户端需要查询所使用的名称时,它会查询DNS 服务器来解析该名称。
DNS 查询以各种不同的方式进行解析。客户端可以使用从先前的查询获得的缓存信息就地应答查询;DNS 服务器也可使用其自身的资源记录信息缓存来应答查询;DNS 服务器还可以代表请求客户端查询或联系其他DNS 服务器,以便完全解析该名称,并将应答返回至客户端,这个过程称为递归。
此外,客户端本身也可尝试联系其他的DNS 服务器来解析名称。然后根据来自DNS 服务器的参考答案,使用其他的独立查询,该过程称作迭代。
总之,DNS 查询过程按两部分进行:
⏹ 本地解析——名称查询从客户端计算机开始,并传送给本机的DNS 客户服务程序进行解析; 当客户端提出解析请求时,首先将请求传送至DNS 客户服务,.以便使用本地缓存信息进行解析,如果可以解析所要查询的名称,则DNS 客户服务应答该查询,该请求处理过程结束。
⏹ 查询DNS 服务器——如果不能在本机解析查询,可根据设定的查询DNS 服务器来解析名称。 当客户端请求无法在本地解析时,将请求发送至DNS 服务器。DNS 服务器接收到查询请求时,首先检查它能否在服务器的本地配置区域中获取资源记录信息做出应答,如果查询的名称与本地区域信息中的相应资源记录匹配,则使用该信息来解析查询的名称,服务器做出应答,此次查询完成。如果区域信息中没有查询的名称,则服务器检查它能否通过来自先前查询的本地缓存信息来解析该名称。如果从中发现了匹配的信息,则服务器使用该信息应答查询,此次查询完成。如果无论从缓存还是从区域信息,查询的名称在首选服务器中都未发现匹配的应答,那么查询过程可继续进行,使用递归来完全解析名称。
例如,如果要递归查询certer.example.com 的地址,首选DNS 服务器通过分析完全合格的域名,向顶层域com 查询,而com 的DNS 服务器与example.com 服务器联系以获得更进一步的地址,这样循环查询直到获得所需要的结果,并一级级向上返回查询结果,最终完成查询工作。
需要注意的是,为了让DNS 服务可以正确运行递归查询,需要有一些必要的信息,该信息通常以根目录的形式来提供,借助使用根目录提示寻找根域服务器,DNS 服务器可以完成递归查询。
如果客户端申请使用递归过程,但在DNS 服务器上禁用递归或查询DNS 服务器时客户端没有申请使用递归,则使用迭代的方式查询。
例如,要迭代查询user.certer.example.com 的地址,首先DNS 服务器在本地查询不到客户端请求的信息时,就会以DNS 客户端的身份向其他配置的DNS 服务器继续进行查询,以便解析该名称。在大多数情况下,可能会将搜索一直扩展到Internet 上的根域服务器,但根域服务器并不会对该请求进行完整的应答,它只会返回example.com 服务器的IP 地址,这时DNS 服务就根据该信息向example.com 服务器查询,由example.com 服务器完成对user.certer.example.com 域名的解析后,再将结果返回DNS 服务器。
对于大多数的迭代查询而言,如果它的主DNS 不能解析该名称,那么客户端会使用本地配置的DNS 服务器列表,在整个DNS 名称空间中联系其他名称服务器。
3. 如何使用DNS
在网络中开始使用DNS 之前,必须先规划DNS 域名称空间。名称空间规划包括确定要如何使用DNS 命名和通过使用DNS 要达到什么目的等。
首先选择和注册一个可用于维护Internet 上公司的一个顶级或二级域名作为父DNS 域名,如teach.com 。
其次,将父域名称与公司内使用的位置或公司名称组合起来形成其他子域名,如mail.teach.com 。 但必须注意,在选择域名时必须符合RCF 1123中的规定:所有大写字母(A~Z) 、小写字母(a~z) 、数字(0~9) 和连字符(-) 。
除了需要内部DNS 名称空间支持,许多网络还需要外部DNS 名称支持,例如在Internet 上使用的支持。DNS 服务器提供了集成和管理分离名称空间的方法,在这些名称空间中,外部和内部DNS 名称都在网络上解析。
,如果决定将名称服务DNS 的使用限制在专用名称空间内,对于如何设计和实现它则不存在限制。例如,可以选择任何DNS 命名标准配置DNS 服务器,使之作为网络DNS 分布式设计的有效根服务器,或形成一个自身包含DNS 域树的结构和层次。但如果需要提供对外部DNS 名称空间的引用或Internet 上的整个DNS 服务时,则需要考虑专用和外部名称空间之间的兼容性。
4. Linux 系统的hosts 文件说明
hosts 文件是Linux 系统中一个负责IP 地址与域名快速解析的文件,以ASCII 格式保存在“/etc”目录下,文件名为“hosts”。hosts 文件包含了IP 地址和主机名之间的映射,还包括主机名的别名。在没有域名服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP 地址,否则就需要使用DNS 服务程序来解决。通常可以将常用的域名和IP 地址映射加入到hosts 文件中,实现快速方便的访问。
hosts 文件的格式如下:IP 地址 主机名/域名
[实例3.8.1]在主机名为RHEL5的/etc/hosts文件中添加本机域名、IP 地址和另一个工作站fedora 的域名和 IP地址记录。

3.8.2 建立DNS 服务器
Linux 下架设DNS 服务器通常是使用Bind 软件来实现,Bind 是一款实现DNS 服务器的开放源码软件。已经成为世界上使用最为广泛的DNS 服务器软件,目前Internet 上绝大多数的DNS 服务器都是用Bind 来架设的。以下以一个实例,详细说明创建一个DNS 服务器的过程。
[实例3.8.2]假定一个教学机构,建立一个DNS 服务器,使用了域名:teach.com ,在企业内部局域网内使用。要求局域网内的工作站都能使用域名访问这些服务器。该机构内有几台服务器,其IP 地址和域名分别如下:
文件服务器: IP 地址 192.168.1.253 域名 ftp.teach.com
邮件服务器: IP 地址 192.168.1.252 域名 mail.teach.com
Web 服务器: IP 地址 192.168.1.251 域名 DNS 服务器: IP 地址 192.168.1.254 域名 要建立这样一个DNS 服务器,为这个机构提供DNS 服务,按以下步骤进行安装和测试。
1. DNS 服务的安装
Red Hat Enterprise Linux 安装程序默认没有安装DNS 服务。可以先验证是否已经安装,如果未安装,就安装Bind 软件包。
,
2. 安装chroot 软件包
为什么要安装chroot 软件包呢?由于早期Linux 服务都是以root 权限启动和运行的,黑客利用服务的漏洞入侵系统,能获得root 级别的权限,从而控制整个系统。
为了减缓这种攻击所带来的负面影响,现在服务器软件通常设计为以root 权限启动,然后服务器进程自行放弃root ,再以某个低权限的系统账号来运行进程。这种方式的好处在于该服务被攻击者利用漏洞入侵时,由于进程权限很低,攻击者得到的访问权限又是基于这个较低权限的,因此对系统造成的危害比以前减轻了许多。
chroot 是Change Root的缩写,它可以改变程序运行时所参考的“/”根目录位置,即将某个特定的子目录作为程序的虚拟“/”根目录。chroot 对程序运行时可以使用的系统资源、用户权限和所在目录进行严格控制,程序只在这个虚拟的根目录具有权限,一旦跳出该目录就无任何权限了。
使用了chroot 后,就算黑客入侵了某个服务,由于具有的权限相当有限,因此最多也只能破坏该服务的虚拟根目录,不会威胁到整个服务器的安全。对DNS 服务而言,有经验的网络管理员都会对其使用chroot 技术来增强bind 的安全。
在安装光盘的Server 目录下找到bind-chroot 的RPM 安装包文件bind-chroot-9.3.4-10.P1.el5.i386.rpm ,使用下面的命令安装chroot 。

使用了chroot 后,由于Bind 程序的虚拟根目录是/var/named/chroot/,因此,所有的DNS 服务器配置文件、区域数据文件和配置文件内的语句,都是相对这个虚拟根目录而言,如/etc/named.conf,其真正的路径是/var/named/chroot/etc/named.conf ; 而目录/var/named/,其真正的路径是/var/named/chroot/var/named/。
3. 配置DNS
(1) DNS 主配置文件
DNS 的主配置文件为/var/named/chroot/etc/named.conf。安装DNS 服务后,安装程序不会自动生成
,这个配置文件,用户需要自行创建或将/usr/share/doc/bind-9.3.4/sample/etc/named.conf范本文件复制到/var/named/chroot/etc/named.conf,该文件只包括Bind 的基本配置,不包含任何DNS 区域数据,需对默认文件做相应的配置后,才能使DNS 服务按照要求运行起来。
named.conf 文件格式有如下规则:
⏹ 配置文件中语句必须以分号结尾;
⏹ 需用花括号将容器指令(如options) 中的配置语句包含起来;
⏹ 注释符号可以使用c 语言中的符号对 “/*”和“*/”、c 语言的“//”和Shell 脚本的“#”。 依据实例3.8.2修改后的/var/named/chroot/etc/named.conf内容如下:
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "teach.com" {
type master;
file "teach.com.zone";
allow-transfer {
192.168.1.254;
};
};
zone "1.168.192.in-addr.arpa" {
type master;
file "192.168.1.arpa";
allow-transfer {
192.168.1.254;
};
};
include "/etc/rndc.key";
(2) 根服务器信息文件named.ca
/var/named/named.ca是一个非常重要的文件,该文件包含了Internet 的根服务器名字和地址,Bind 接到客户端主机的查询请求时,如果在Cache 中找不到相应的数据,就会通过根服务器进行逐级查询。例如,当服务器收到来自DNS 客户机查询www.sina.com 域名的请求时,如果Cache 没有相应的数据,就会向Internet 的根服务器请求,然后根服务器将查询交给负责域.com 的权威名称服务器,域.com 权威名称服务器再将请求交给负责域sina.com 的权威名称服务器进行查询。
由于named.ca 文件经常会随着根服务器的变化而发生变化, 应从国际互联网络信息中心 (InterNIC) 的 FTP服务器下载最新的版本,下载地址为: ftp://ftp.rs.internic.net/domain/named.root。下载完后,应将该文件改名为named.ca ,并复制到“/var/named/chroot/var/named/”目录下。然后,可以用命
,令:chown named:named named.ca命令将named.ca 文件的用户和组改为named 。一个named.ca 的示例文件如下:
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache .
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.root
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: Dec 12, 2008
; related version of root zone: 2008121200
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30
;
; FORMERLY NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
;
; FORMERLY C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; FORMERLY TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
;
; FORMERLY NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; FORMERLY NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
,F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2F::F
;
; FORMERLY NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; FORMERLY AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803F:235
;
; FORMERLY NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
;
; OPERATED BY VERISIGN, INC.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30
;
; OPERATED BY RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FD::1
;
; OPERATED BY ICANN
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42
;
; OPERATED BY WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:DC3::35
; End of File
(3) 正向解析区域文件
一个区域内的所有数据(包括主机名和对应IP 地址、刷新间隔和过期时间等) 必须存放在DNS 服务器内,而用来存放这些数据的文件就被称为区域文件(区域数据文件使用“;”符号注释) 。DNS 服务器的区域数据文件一般存放在/var/named/chroot/var/named/目录下,一台DNS 服务器内可以存放多个区域文件,
,同一个区域文件也可以存放在多台DNS 服务器中。
下面是实例中的区域文件:/var/named/chroot/var/named/teach.com.zone的内容。
WinXP.teach.com. IN A 192.168.1.20$ttl 38400
teach.com. IN SOA dns.teach.com. admin.teach.com. (
2005090509
10800
3600
604800
38400 )
teach.com. IN NS dns.teach.com.
dns IN A 192.168.1.254
RHEL5.teach.com. IN A 192.168.1.254
ftp.teach.com. IN A 192.168.1.253
mail.teach.com. IN A 192.168.1.252
www.teach.com. IN A 192.168.1.251
fedora.teach.com. IN A 192.168.1.10
(4) 反向解析区域文件
反向解析区域文件的结构和格式与区域文件类似,只不过它的主要内容是建立IP 地址映射到DNS 域名的指针PTR 资源记录。
下面是一个在/var/named/chroot/var/named/192.168.1.arpa文件定义反向解析区域的例子。 $ttl 36000
1.168.192.in-addr.arpa. IN SOA dns.teach.com. admin.teach.com. (
2005090503
10800
3600
604800
36000 )
1.168.192.in-addr.arpa. IN NS dns.teach.com.
254.1.168.192.in-addr.arpa. IN PTR dns.teach.com.
253.1.168.192.in-addr.arpa. IN PTR ftp.teach.com.
252.1.168.192.in-addr.arpa. IN PTR mail.teach.com.
251.1.168.192.in-addr.arpa. IN PTR www.teach.com.
254.1.168.192.in-addr.arpa. IN PTR RHEL5.teach.com.
10.1.168.192.in-addr.arpa. IN PTR fedora.teach.com.
20.1.168.192.in-addr.arpa. IN PTR WinXP.teach.com.
4. 域名服务器的测试
完成域名服务器DNS 的配置后,应该对其进行测试。
(1) 测试前的准备
⏹ 启动DNS 服务,并验证“named ”是否运行

修改/etc/resolv.conf文件,添加域名解析服务器的IP 地址
修改/etc/resolv.conf内容为:

⏹
修改后,最好重新启动Linux 服务器。
,(2) 使用nslookup 程序测试
⏹ 正向解析

⏹ 反向解析

3.8.3 启动和停止DNS 服务的命令
1. 启动DNS 服务
/etc/init.d/named start
2. 停止DNS 服务
/etc/init.d/named stop
3. 重新启动DNS 服务
/etc/init.d/named restart
4. 自动启动DNS 服务
运行ntsysv 找到named 服务进行确定