2.37域名服务(DNS)和BIND试验
估计时间: 2个小时
目标: 安装和配置一个DNS服务器
1. 试验的起点: 标准的Red Hat Linux安装
2. 介绍
本次实验指导您通过使用Berkeley Internet Name守护进程来配置域名服务。使用模板文件作为指导,您将
⑴ 实现一个仅有缓存的域名服务器
⑵ 配置named作为example.com的从域名服务器
⑶ 配置named作为主域名服务器用于转发和IP反查询
在整个试验中,您使用的机器名称和域名将基于您使用的机器的IP地址。如果下面的试验出现了X字样的名称,您应该把X字样的名称替换成您的工作站的号码(您的IP地址的最后一个部分)。例如,如果您的工作站的IP的地址是192.168.0.3,您应该将stationX.domainX.example.com转换成station3.domain3.example.com。
将数据包过滤设定为无效状态。在本次试验开始之前,请确保您的主机上的所有包过滤已被关闭(显然,在实际使用中您可以利用Linux内核的防火墙机制,然而我们在这里关掉它是为了减少潜在的问题)。
本次试验中以root身份来使用下面命令达成上面的要求:
service iptables stop
chkconfig iptables off
3. 初始化安装
⑴ 获得必要的文件
需要bind,bind-utils和caching-nameserver软件包。使用 rpm –q 来决定这些软件包是否被安装。如果没有被安装,通过输入如下命令来安装(以root身份):
mkdir /mnt/server1; mount server1:/var/ftp/pub /mnt/server1
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-9*
rpm –Uvh /mnt/server1/RedHat/RPMS/bind-utils*
rpm –Uvh /mnt/server1/RedHat/RPMS/caching-nameserver*
RPM软件包bind包括DNS守护进程和支持脚本,但是没有配置和区域文件。caching-nameserver提供了一个通用的配置和区域文件。
⑵ 配置本地的(转换器)解析器
配置您的主机使得它能够被用来作为域名服务,而不是192.168.0.254。
注意:直到您的域名服务器被正确安装和配置,您的机器的DNS服务不会奏效。您也应该注意到当您的系统重新启动的时候或者重新设定您的网络的时候您的/etc/resolve.conf将会被改写(除非您对您的网络界面设定了在本书中提及的PEERDNS)
按照如下编辑您的(转换器)解析器配置文件
/etc/resolv.conf
search domainX.example.comnameserver 192.168.0.X
(记住将X替换成您的工作站的号码)
第一行定义了如果出现简单的不符合完整域名的主机名称时默认添加的缺省域。第二行指定了将主机192.168.0.X (您的机器)来作为DNS查询的解析器。
为了简化情况,将除了localhost主机名称的定义从您的主机名称配置文件中删除。
/etc/hosts
127.0.0.1 localhost localhost.localdomain
该步骤并不是必需的,但是可以简化DNS的调式。有时候安装程序会将符合完整域名的主机名放在localhost的这一行,这样一来会使得您无法准确的确定您的域名服务器配置是否正确。
4.配置一个仅有缓存的域名服务器
第一个配置您将建立一个仅有缓存的域名服务器。这种类型的域名服务器对于任何区域都不授权。仅有缓存的域名服务器被设定为主域名服务器。当主机名称或者IP地址需要被解析的时候,仅有缓存的域名服务器将查询请求转发到另外一台域名服务器或者到根域名服务器来决定授权的用来解析的域名服务器。一旦解析完成,仅有缓存的域名服务器在缓存中存储解析的信息,该解析信息有一段的生存周期。以后的查询将会变得很快。
您已经安装完对于此项配置所有必须的文件。按照如下步骤来配置域名服务器:
⑴ 在由caching-nameserver提供的/etc/named.conf中的“option”区域添加下面的内容:
forwarders {192.168.0.254; };
forward only;
这将导致您工作站上的仅有缓存的域名服务器转发其不能解析的DNS查询到在192.168.0.254的域名服务器,并且如果超时,不与根域名服务器直接联系。
⑵ 启动named: #service named start
⑶ 测试您的配置使用host或者dig来查询一些example.com名称和一些真实的Internet域名(如果您有Internet访问接口的话)
5.配置一个辅助域名服务器
一个从域名服务器将为一个区域提供授权的回答,但不是区域的授权开始。您现在将重新配置您的域名服务器作为example.com区域和0.168.192.in-addr.arpa区域的从域名服务器。
⑴ 在您的/etc/named.conf文件中添加如下行
zone “example.com” {
type slave;
masters { 192.168.0.254; };
file “slave-example.com.zone”;
};
zone “0.168.192.in-addr.arpa” {
type slave;
masters { 192.168.0.254; };
file “slave-192.168.0.zone”;
};
⑵ 重新启动named: # servcie named restart
⑶ 检查slave-example.com.zone和slave-192.168.0.zone文件。这些文件应该包含了从位于192.168.0.254的主域名服务器传过来的区域数据库的副本。
确保所有的正确工作。在您开始下一个部分之前,去除您刚才在第一步中在/etc/named.conf中加入的两个从区域。
6.配置一个主域名服务器
现在您将配制您的域名服务器来负责对于区域“domainX.example.com”的解析工作。您将同样负责向对应的反查区域。将采用如下的步骤:
A.编辑配置文件(named.conf)
B. 准备区域“domainX.example.com”和区域“X.0.168.192.in-addr.arpa”的数据库文件。
C. 重新启动域名服务器
D. 测试您的配置
为了您能够准备您的配置文件和区域文件,我们提供了模板文件。您可以通过匿名ftp方式从以下地址获得:
ftp://192.168.0.154/pub/namedfiles/
在如下的步骤中,记得将范例文件中中每一出出现的X替换成您的工作站的号码。
⑴ 主配置文件
下面是我们应该考虑的三个区域
① “.”(根级别)区域
“.”区域是DNS层次中的最高层。根服务器提供了哪些服务器对于给定的域享有授权。“.”节应该以如下的方式出现:
zone “.” {
type hint;
file “named.ca”;
};
② “domainX.example.com”(正向查询)区域
添加如下的行,使得您的域名服务器成为区域的主服务器。
zone “domainX.exmaple.com” {
type master;
file “domainX.example.com.zone”;
};
③ “X.0.168.192.-in-addr.arpa”(反向查询)区域
现在添加如下的行,使得您的域名服务器成为反查区域的主服务器。
zone “X.0.168.192.in-addr.arpa” {
type master;
file “192.168.0.X.zone”;
};
下面是位于192.168.0.2的station2的样例配置文件
/etc/named.conf
options {directory “/var/named”;forwarders {192.168.0.254; };forward only;};zone “.” { type hint; file “named.ca”;};zone “localhost” IN { type master; file “localhost.zone”;};zone “0.0.127.in-addr.arpa” IN { type master; file “named.local”;};zone “domain2.exmaple.com” { type master; file “domain2.example.com.zone”;};zone “2.0.168.192.in-addr.arpa” { type master; file “192.168.0.2.zone”;};
⑵. 数据库文件
您的主要配置文件指定了/var/named为数据库所在的目录。您现在必须在这个目录下面为您区域和反查区域建立数据库文件。这些数据库文件包括您的SOA,NS,A,CNAME,MX,PTR和其他的可能的记录。所有的数据文件以如下的行开头:
$TTL 86400
该数值是缺省的以秒计的生存期间,该数值对所有在该域中的记录有效
① 区域“domainX.example.com”
在主配置文件中,区域“domainX.example.com”数据库文件被存放在/var/named/domainX.example.com。这个文件含有类似的如下的记录:
① 起始授权记录:
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
2001101100; Serial
28800 ;Refresh
14400 ;Retry
3600000 ;Expire
)
“起始授权”(SOA)记录是数据库文件的第一个资源记录,但是它可能带了一个前导符$TTL(缺省存活时间)。SOA记录使得数据库文件称为该区域的授权的信息源。第一个标记是后继记录适合的域,通常以“@”简化形式出现,如果扩展开来那就是在named.conf文件中“zone”节中所指明的域名(或者是在文件通过$ORIGIN定义的当前区域,如果该定义存在的话)。
第四个标记使该域的主域名服务器,第五个是负责维护这个数据库的系统管理员的电子邮件的地址,注意第一个分隔符替换了第一个标记的@符号(你能解释为什么吗?)。接下来在记录中的条目指定了交互解析域名服务器的动态特性。
② 域名服务器记录:
@ IN NS stationX.domainX.example.com.
域名服务器(NS)标识了主机作为特定域的授权的域名服务器。他们对于这个区域指定了主和从服务器和代表授权的子域的其他的服务器(例如,server1.example.com对于所有domainX.example.com的域名服务器有一个NS记录)。正如您对于“domainX.example.com”只能有一个单一的域名服务器,您也只能有一个单一的NS记录。
③ 地址记录:
domainX.example.com IN A 192.168.0.X
stationX.domainX.example.com IN A 192.168.0.X
www IN A 192.168.0.X
ftp IN A 192.168.0.X
pop IN A 192.168.0.X
地址(A)记录将主机名称映射到IP地址(域名服务器的主要功能)。一个数据库文件通常包含A记录对应着许多IP地址。然而在我们的教室的环境里,在您的区域里面只有一台主机。注意第一个A记录设定了域的“缺省的IP地址”。接下来的A记录建立了多个主机名称对应一个IP地址。
主机名称可以是一个完全符合标准的名称(FQDN),也可以是一个缩写。所有的不以点号结尾的主机名称都将被视为缩写,并且区域名称被附加到主机名称的后面。例如,第三个A记录就是主机名称http://www.domainx.example.com./
④ 规范名称(别名)记录:
www1 IN CNAME stationX.domainX.example.com.
www2 IN CNAME stationX.domainX.example.com.
www3 IN CNAME stationX.domainX.example.com.
别名(CNAME)记录建立了主机名称的别名。注意到别名映射到主机名称而不是IP地址。
CNAME不应该出现在右边的数据区域作为真实的主机名称,对于多重别名的解析的速度会很慢。
⑤ 邮件交换记录
@ IN MX 10 stationX.domainX.example.com.
domainX.example.com IN MX 10 stationX.domainX.example.com.
邮件交换记录(MX)记录了一个主机它将会处理给定的域或者主机邮件的转发。当一个邮件传递代理(MTA)试图投递信件的时候,它将首先试图在DNS中查找目的主机的MX记录。如果该MX记录存在,那么将直接发送到MX记录指定的主机。反之,如果不存在MX记录,MTA对于目的主机进行标准的DNS查询,并且直接投递到该主机上去。MX记录用来建立邮件的网关,和作为缺省的对于域的邮件的目的地。
② 区域“X.0.168.192.in-addr.arpa”
在/etc/named.conf中,我们指定了/var/named/192.168.0.X.zone作为区域X.0.168.192.in-addr.arpa的反查区域数据库文件。他应该包含SOA记录,NS记录,和对应的PTR记录。
I 起始授权记录
@ IN SOA stationX.domainX.example.com. root.stationX.domainX.example.com. (
4;
10800;
3600;
604800;
86400)
IN NS stationX.domainX.example.com.
SOA和NS记录与前面的区域文件中的名称应该相同。
注意在NS记录开头的空白的地方是非常特别的,并且被解释为“和上一条记录相同”的缩写。在本例中,上一条记录为符号“@”,其本身就是在主配置文件中定义的域名的缩写。
II 指针记录
X.0.168.192.IN-ADDR.ARPA. IN PTR stationX.domainX.example.com.
指针(PTR)记录通过间接的机制将名称映射到IP地址。作为分离的技术来进行IP地址的反查询的替代,BIND采用了一种修改的对于特定主机名称的正向查询的方式。这种“反向域名查询”以反转的IP地址后面添加“in-addr.arpa”域的形式出现。这将允许域名服务器使用相同的机制进行正反两方面的查询。
③ 把他们放在一起
下面是位于192.168.0.2的station2的样例配置文件:
/var/named/domain2.example.com.zone
$TTL 86400@ IN SOA station2.domain2.example.com. root.station2.domain2.example.com. ( 2001101100; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 0) ; Negative @ IN NS station2.domain2.example.com. @ IN A 192.168.0.2station2.domain2.example.com. IN A 192.168.0.2www IN A 192.168.0.2ftp IN A 192.168.0.2pop IN A 192.168.0.2www1 IN CNAME station2.domain2.example.com.www2 IN CNAME station2.domain2.example.com.www3 IN CNAME station2.domain2.example.com.@ IN MX 10 station2.domain2.example.com.station2 IN MX 10 station2.domain2.example.com.
/var/named/192.168.0.2.zone
$TTL 86400@ IN SOA station2.domain2.example.com. root.station2.domain2.example.com. (4 10800 3600 604800 86400) IN NS station2.domain2.example.com.2.0.168.192.IN-ADDR.ARPA. IN PTR station2.domain2.example.com.
⑶. 重新启动域名服务器
再一次,我们将重新启动域名服务器。然后通过运行pidof命令来确定其被运行:
service named restart
pidof named
查看一下服务器添加到/var/log/messages文件中的条目。确定您的域名在调入的时候没有发生错误。
如果您已经有一个域名服务器在运行并且不想重新启动它,您可以使用service named reload 来重新装入配置文件,这样子对于停止和启动服务器而言都比较快。
⑷. 测试域名服务器
进行如下DNS查询,您能够解释所有的结果么?
host stationX
dig stationX.example.com
dig stationX.example.com @192.168.0.254
dig stationX.example.com
host server1.example.com
host 192.168.0.X
dig –x 192.168.0.X
dig –x 192.168.0.254
host www
host www1
记住dig期望给与一个FQDN作为查询,然而host则通过查看位于文件/etc/resolv.conf的查询信息。试着在别的人的域名服务器和子域上进行附加的查询。如果设定正确,您将能够在其他教室系统上进行正向和反向查询。
挑战性的项目
通过增加多个“A”记录使得一个主机名称对应着不同的IP地址来配置一个“轮转”的主机名称。域名服务器该如何处理这种情况?提示: 试图尝试设定这些的A记录的TTL为0。
在您的域中增加子域“support.somainX.example.com”。增加合适的资源记录使得它能够反向指向您的IP地址。
与另一台工作站合作,成为另一台工作站的从域名服务器,在您的区域中为您的工作站增加一个新的CNAME,确保这个改变能够传播到从服务器。
收尾工作
接下来的试验就较为简单了,一旦您重新启动您的工作站,所有的DNS查询将会重新设定到教室中的服务器上。为了确保收尾,确保您重新设定/etc/resolve.conf到其初始的状态。
/etc/resolv.conf
search example.comnameserver 192.168.0.254
/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost192.168.0.X stationX.example.com
(如果您关闭后启动eth0接口,DHCP将会自动为您设定配置文件)