|
3.1 DNS服务器的架构
3.1.1 DNS的基本知识
网络通信中,数据链路层使用的地址是网卡的MAC地址,网络层使用的是IP地址,传输层使用的地址是端口号,它们各有各的识别方式,其中和用户关系最密切的就是IP地址。每个入网的(不论是Internet或Intranet)计算机都必须有IP地址,这样才可保证信息的正确传递。IP地址是数字构成的,非常难以记忆和定位它代表的主机,于是专家们就设法用形象的主机名代替IP,方便交流和记忆。实际中,人往往使用方便记忆的主机名,而通信程序发送数据包用的是IP,也就是说,当www.syd.com(主机A)向www1.syd.com(主机B)发送信息的时候,如果用户使用的是主机名,就必须首先将主机名转化为IP地址,并填写在数据包头部,才能进行数据的传输。完成主机名到IP或IP到主机名的翻译的软件就是名称解析系统。目前,实现这种转发的方式主要有hosts文件方式、域名服务器和NIS三种,最常用的就是域名服务系统。下面是它们简单的说明:
hosts文件。通过每台主机维护的静态文件hosts实现主机名称的解析,不便管理。
NIS。是SUN的技术,支持集中管理域名,比较适合局域网。
DNS服务。实现层次化、分布式的域名管理。目前,大部分网络都采用这种方式。
DNS服务的配置比较难,而且可能需要ISP的支持,同时DNS也是各种网络应用服务的基础,可以说各种服务器的配置与域名系统是密切相关的,如:Web服务器、Mail服务器、FTP服务器、视频点播服务器、新闻服务器等等,都需要域名的支持。有了DNS服务系统,其它服务器的管理和移植就显得容易多了,如动态域名技术就给使用动态IP的服务器提供了很大的方便。
整个DNS采用层次化的树状结构,树中位于最顶层的是域名空间的根(root),用点(.)表示,根内有许多服务器,由多个权威机构管理维护,如InterNIC(Internet Network Information Center)。下面是/var/named/named.ca中给出的一些根服务器的IP地址信息:
ROOT-SERVERS.NET 194.41.0.4
ROOT-SERVERS.NET 192.224.79.201
ROOT-SERVERS.NET 192.33.4.12
ROOT-SERVERS.NET 124.4.10.90
ROOT-SERVERS.NET 192.203.230.10
ROOT-SERVERS.NET 192.1.1.241
根下为顶级域(top-level-domain),每个顶级域内都有数台服务器。顶级域由国家或国际组织负责维护,一般代表国家的顶级域用两个字母表示,如中国为cn,美国为us等等,代表国际组织的顶级域由三个字母组成,如com表示商业组织。
顶级域之下称为二级域(second-level-domain),主要供一般组织或企业申请使用,如笔者申请的是syd164.com域。
关于DNS服务器的工作原理,请读者参考第四章内容,下面,我们就通过大量的实践,介绍RHEL3中DNS服务器的配置方法和技巧。
3.1.2 RHEL 3下DNS服务器的配置
目前的各种Linux中都提供了实现DNS服务的软件,而且大部分默认都是安装的,这与Linux主要面向服务领域的宗旨是分不开的。RHEL 3 中的DNS服务器软件包叫bind,目前是版本9,它的管理程序叫named(这里的d表示服务器,也即Windows中的服务)。下面,我们介绍RHEL3种DNS的安装和配置过程。
(1) 安装DNS服务器
使用如下的命令可以检查系统中是否已经安装了DNS服务软件(bind):
#rpm –qa |grep bind --在所有已安装软件包中查询bind
#rpm -qa|grep nameserver --在所有已安装软件包中查询nameserver
看到,如图3-1所示的结果,表明系统已经安装好了bind软件包。如果没有安装,可以通过网络或本地安装bind软件包。如果要通过光盘安装,将光盘放入驱动器,再转入RedHat/RPMS目录,通过如下的命令查看是否有需要的软件包:
#list | grep bind
#list | grep nameserver
如果没有,则更换光盘(共计4张光盘)继续查找。找到后,使用如下的命令完成安装:
#rpm -ivh *bind* rpm
#rpm -ivh *nameservere* rpm
图3-1 DNS 服务器软件包
(2) 配置DNS服务器
DNS服务系统采用C/S结构,普通用户的机器是Client,提供DNS解析服务的是Server。所以,要进行DNS服务的测试,需要配置进行两方面的配置:DNS服务器配置和DNS客户端配置。下面逐步实现它们的配置。为了方便读者掌握,这里首先给出配置的基本过程:
修改测试主机的客户端配置,添加DNS服务器到/etc/resolv.conf文件;
修改主配置文件,添加区域声明;
创建区域文件与反向区域文件;
编辑区域文件,添加主机记录;
启动服务器,进行测试。
首先是客户端的配置,客户端的配置相当简单,只需将DNS服务器IP地址添加到/etc/resolv.conf文件即可。该文件每行的格式为:
nameserver IP --这里的IP为客户端要填写的DNS服务器IP地址
下面是/etc/resolve.conf的一个具体例子:
nameserver 172.12.0.6
nameserver 10.4.10.244
需要说明的是,/etc/resolv.conf文件每行只能设置一个DNS服务器的IP地址,且最多可以指定三个,第一个叫主DNS服务器,第二个叫副DNS服务器,第三个叫备用DNS服务器。客户端在查询DNS域名的时候,首先向第一个服务器查询,成功则返回要查主机域名对应的IP地址,否则再转向副DNS服务器查询,直到第三个都失败,这时返回“Unknow Host”。所以,一般将可靠的DNS服务器设置为主DNS服务器。
为防止自己的域名和网络中真实存在的域名发生冲突,建议将我们的DNS服务器设置为主DNS服务器,但这样会导致上网速度变慢或干脆无法上网,因为我们的DNS服务器默认没配置转发和外网的域名解析功能。
配置好了DNS客户端,接下来就是配置DNS服务器了。和DNS客户端配置模式相同,DNS服务器的配置内容也放在文本文件中。DNS服务器的配置文件主要包括主配置文件和区域文件,主配置文件为/etc/named.conf,主要完成区域声明和服务器全局配置(如子域声明,访问控制等等);区域文件往往有多个,默认在/var/named目录下,区域文件主要包含各种DNS记录和该区域的全局配置(如SOA记录、MX记录A记录、NS记录、CNAME记录等)。
(3) DNS服务器的配置过程
为了让读者明确我们的实验目的,首先给出配置的目标:在DNS服务器172.12.0.6上,配置syd164.com和syd164.net两个区域,在这两个区域中,各配置用于网站、邮件、上传下载等服务的主机记录,主机名分别是www、mail、ftp,各记录的IP地址根据读者条件分配,也可以使用本地虚拟IP地址。
a) 修改测试主机的DNS客户端配置
这里我们以172.12.0.6作为DNS服务器的客户端。用vi编辑器打开/etc/resolv.conf,并在开头插入一行:
nameserver 172.12.0.6
b) 修改主配置文件,添加区域声明
按照前面的目标,要建立两个区域:syd164.com和syd164.net。假设这两个区域的配置文件分别为syd164.com.zone和syd164.net.zone。下面我们就着手声明这两个区域:
#vi /etc/named.conf --打开主配置文件
打开该文件后,其初始内容(笔者删除了注释部分)如下:
====================/etc/named.conf初始内容===================
options {
directory "/var/named"; --指定区域文件的存放位置
dump-file "/var/named/data/cache_dump.db"; --备份文件位置,一般不修改
statistics-file "/var/named/data/named_stats.txt"; --统计文件位置,一般不修改
// query-source address * port 53; --当有防火墙的时候需要该行
};
controls {
inet 123.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN { --根域声明,点表示根域
type hint; --类型为hint
file "named.ca"; --区域文件为/var/named/named.ca
};
zone "localhost" IN { --localhost区域声明
type master; --类型为master
file "localhost.zone"; --区域文件为localhost.zone
allow-update { none; }; --允许更新的主机,无
};
zone "0.0.123.in-addr.arpa" IN { --123.0.0.X的反向解析区域声明
type master; --类型为master
file "named.local"; --区域文件为named.local
allow-update { none; }; --允许更新的主机,无
};
include "/etc/rndc.key"; --包含文件
这里,我们对/etc/named.conf文件作个简单的说明。该文件中,凡是夹在/**/中间的、以//或#开头的行都是注释,只起说明性的作用。主配置文件主要包括服务器的全局配置和区域的声明。全局配置主要包括:访问控制(acl)、关键字(key)、服务器(server)、日志(logging)、选项(options)、区域(zone)等,详细内容请参考named.conf的手册。每个配置部分的格式基本相同,形式如下所示:
配置项 [参数] {
配置内容1;
配置内容2;
… …;
};
需要注意,配置项和参数之间需要空格区分,参数和其右侧的左括号({)之间需要空格区分,且每行配置结束于分号(;);配置项结束于括号(}),且其后有个分号(;),配置项、参数和配置内容都是区分大小写的。作为新手一定要注意这些细节。下面,我们重点说明全局选项(options)和区域(zone)配置。
全局选项(options)的主要配置内容:
options {
directory /var/named; --指定区域文件存放位置,一般不要修改
//port 53; --指定监听端口,一般不要修改
//forwarders {IP,IP ,…}; --指定转发器IP,另一个DNS服务器IP
};
所谓转发服务器,是当本服务器无法查找记录时,就转而查询转发服务器,而不是由根服务器向下直接查询。
区域(zone)的主要配置内容:
zone “区域名” IN {
type master; --指定区域类型
file syd164.com.zone; --指定该区域的配置文件名
};
下面,我们修改主配置文件(vi /etc/named.conf),添加要建立的区域:syd164.com和syd164.net,修改后的代码如下:
options {
directory "/var/named"; //区域文件的存放位置
forwarders {10.4.10.244;};
//allow-query {172.12.0.0/16};
//allow-transfer {172.12.0.0/16;};
//forward only;
};
controls { inet 172.0.0.1 allow { localhost; } keys { rndckey; };};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.123.in-addr.arpa" IN {
type master;
file "localhost.arpa";
allow-update { none; };
};
//=====================新加入的内容开始=====================
zone "syd164.com" IN { //要实现syd164.com域
type master; //要实现的是主域
file "syd164.com.zone"; //区域文件为syd164.com.zone
};
zone "syd164.net" IN { //要实现syd164.com域
type master; //要实现的是主域
file "syd164.net.zone"; //区域文件为syd164.net.zone
};
zone "0.12.172.in-addr.arpa" IN { //syd164.com的反向解析区域
type master; //类型是主要区域
file "syd164.com.arpa"; //反向区域的文件
};
zone "0.13.172.in-addr.arpa" IN { //syd164.net的反向解析区域
type master; //类型是主要区域
file "syd164.net.arpa"; //反向区域文件
};
//=====================新加入的内容结束=====================
include "/etc/rndc.key";
c) 建立区域文件和反向区域文件
根据主配置文件中directory配置项的说明,区域文件应该在/var/named下。为了加快配置,建议复制已经存在的区域文件/var/named/localhost.zone或/var/named/named.local.,快速生成区域文件和反向区域文件,操作如下:
#cd /var/named
#cp localhost.zone syd164.com.zone
#cp localhost.zone syd164.net.zone
#cp named.local syd164.com.arpa
#cp named.local syd164.net.arpa
#ls
生成了区域文件和反向区域文件后,修改它们,使之能够正常解析记录。这里首先简单说明区域文件的组成,然后我们再给出编辑好的区域文件。
区域文件中主要包含的记录有:
缓冲寿命:表示记录在缓冲区中保持的时间,以秒为单位,必须为第一个记录。其格式为:
$TTL 86400 //表示记录在缓冲区存在的时间为86400秒
SOA记录:SOA为授权起始(Start Of Authority)记录,用于配置控制该域的参数。SOA记录必须为区域文件中TTL记录后第一个记录。该记录的格式如下:
区域名 IN SOA 存放区域文件的主机 区域管理员邮件地址 (
20040730; //区域序列号,当修改时要增加1,否则从域可能不一致
2H ; //从域服务器刷新间隔,这里为2小时
40M ; //从域服务器刷新失败后,重试刷新时间间隔,这里为40分钟
1W ; //从域服务器无法更新数据,决定主服务器无效的时间,这里为1周
1D; //若无TTL记录,则这里的时间就是缓冲时间,这里为1天
);
下面是一个SOA记录的例子:
syd164.com IN SOA www.syd164.com master.syd164.com (
20040730 ; //区域序列号,当修改区域时要增加,否则从域可能与之不一致
2h ; //从域刷新超时时间,小时
40m ; //从域重试刷新时间,分钟
1w ; //从域刷新失败并认为主域无效的时间,周
2h ; //2小时缓存时间
);
该例子表明,区域为syd164.com,存放该区域的主机为www.syd164.com(必须在下面有主机记录),管理员的邮件地址为master@syd164.com(注意邮件中的@在上面必须被写为点)。实际中,常常将区域名写为@,表示当前正在配置的区域。
NS记录:用于标识解析该域或其它域(例如子域)各种主机记录的域名服务器。该记录必须是SOA记录后紧接的记录。NS记录的格式如下:
域名 IN NS 域服务器
例如:
syd164.com IN NS 172.12.0.6 //指定解析syd164.com域的服务器
sub.syd164.com IN NS 172.13.0.6 //指定解析sub.syd164.com域的服务器
A记录:主机记录,往往在一个区域文件中包含多个,一行为一个主机记录。其格式如下:
主机名或全名 IN A IP地址
例如:
www IN A 172.12.0.6 //表示www.syd164.com对应的IP为172.12.0.6
注意,如果只写主机名,则主机名后不能包含点(.),如果写主机的全域名,其后必须有点。
CNAME记录:别名记录。用于指定一个主机的别名。常常用在给一个主机指定多个域名的情况下。当然,直接使用A记录也可以完成别名记录的功能,如以下三条的功能是一样的:
www1 IN A www
www1 IN CNAME www
MX记录:邮件交换器记录。对于一个邮件地址,如root@syd164.com,root是在邮件服务器上的账号,syd164.com我们往往认为是邮件服务器的主机名,其实不是,应该理解为它是邮件服务器所管理的域。那么一封发往root@syd164.com的信件如何找到该邮件的邮件服务器呢?这正是邮件交换器的功能。MX记录的格式如下:
域 IN MX 优先级 邮件服务器
如:
syd164.com IN MX 1 mail.syd164.com.
它表示发往syd164.com域的邮件均由mail.syd164.com处理,并且优先级为1。所以,root@syd164.com我们应该理解为root是mail.syd164.com服务器所管辖的邮件域syd164.com中的一个账号。
PTR记录:反向解析记录。是用来在反向区域文件中设置反向解析域名的记录。所谓反向解析,就是已知主机IP,查询其主机域名的过程。其格式如下:
主机地址 IN PTR 主机名或域名
如:
6 IN PTR www.syd164.com.
61 IN PTR mail
注意,主机的地址只能给出反向区域声明左侧未给出的IP部分:例如,如果反向区域声明为0.13.172.in-addr.arpa,则上面的主机地址只能给出172.13.0.X中的X,即只能是1~254之间的数字。
介绍完了区域文件的基本组成,我们下面给出各个区域文件修改后的结果。
#vi /var/named/syd164.com.zone --编辑syd164.com.zone文件,结果如下:
//=============正向区域文件/var/named/syd164.com.zone=============
$TTL 86400 //TTL持续时间,默认为86400秒
@ IN SOA www.syd164.com master.syd164.com (
20040730 ; //区域序列号,当修改时要增加,否则从域可能不一致
2h ; //从域刷新超时时间,小时
40m ; //从域重试刷新时间,分钟
1w ; //从域刷新失败并认为主域无效的时间,周
2h ; //小时
);
//下面行是DNS服务器的声明,表示解析该域的服务器IP
syd164.com IN NS 172.12.0.6
//以下几行是主机记录,每行左侧不能留空格
www IN A 172.12.0.6
mail IN A 172.12.0.61
ftp IN A 172.12.0.62
bbs IN A 172.12.0.63
test IN A 172.12.0.6
//以下行是上面主机记录第一条的另一解析,用于负载均衡,即多个主机共同分担任务。
www IN A 172.12.0.7
//以下一条是邮件交换器,表示处理syd164.com域邮件的服务器
syd164.com IN MX 10 mail.syd164.com
//以下行是主机别名的格式,表明www1是www的别名
www1 IN CNAME www
#vi /var/named/syd164.net.zone --编辑syd164.net.zone文件,结果如下:
//=============正向区域文件/var/named/syd164.net.zone=============
//以下每行都要靠左,即左侧不要留出空白
$TTL 86400 //TTL持续时间,默认为86400秒
syd164.net IN SOA www.syd164.net root.syd164.net (
20040730 ; //区域序列号,当修改时要增加,否则从域可能不一致
2h ; //从域刷新超时时间,小时
40m ; //从域重试刷新时间,分钟
1w ; //从域刷新失败并认为主域无效的时间,周
2h ; //小时
);
//下面一行是DNS服务器的声明,表示解析该域的服务器的IP地址
syd164.net IN NS 172.13.0.7
//以下几行是主机记录
www IN A 172.13.0.7
mail IN A 172.13.0.71
ftp IN A 172.13.0.72
bbs IN A 172.13.0.73
test IN A 172.13.0.7
//以下行是上面主机记录第一条的另一解析,用于负载均衡
www IN A 172.13.0.7
//以下一行是邮件交换器,表示处理syd164.net域邮件的服务器
syd164.net IN MX 10 mail.syd164.net
//以下一行是主机别名的格式,表明www1是www的别名
www1 IN CNAME www
#vi /var/named/syd164.com.arpa --编辑syd164.com.arpa文件,结果如下:
//=============反向区域文件/var/named/syd164.com.arpa=============
$TTL 86400 //TTL持续时间,默认为86400秒
@ IN SOA www.syd164.com master.syd164.com (
20040730 ; //区域序列号,当修改时要增加,否则从域可能不一致!
2h ; //从域刷新超时时间,小时
40m ; //从域重试刷新时间,分钟
1w ; //从域刷新失败并认为主域无效的时间,周
2h ; //小时
);
IN NS www.syd164.com
//注意上面的行左侧需要有空格,或者填入"区域名.",即0.12.172.in-addr.arpa.
6 IN PTR www.syd164.com
//表示 www.syd164.com对应的主机IP为172.12.0.3(反向解析)
61 IN PTR mail
62 IN PTR ftp.syd164.com.
63 IN PTR bbs
//注意上面反向记录中右侧的写法。
#vi /var/named/syd164.net.arpa --编辑syd164.net.arpa文件,结果如下:
//=============反向区域文件/var/named/syd164.net.arpa=============
$TTL 86400 //TTL持续时间,默认为86400秒
@ IN SOA www.syd164.net master.syd164.net (
20040730 ; //区域序列号,当修改时要增加,否则从域可能不一致
2h ; //从域刷新超时时间,小时
40m ; //从域重试刷新时间,分钟
1w ; //从域刷新失败并认为主域无效的时间,周
2h ; //小时
);
IN NS www.syd164.net
//注意上面的行左侧需要有空格,表示当前域,即0.13.172.in-addr.arpa.
7 IN PTR www.syd164.net
//表示 www.syd164.com对应的主机IP为172.13.0.7(反向解析)
71 IN PTR mail.syd164.net.
72 IN PTR ftp.syd164.net.
73 IN PTR bbs
//注意上面反向记录中右侧的写法。
d) 启动DNS服务器
当依次完成主配置文件/etc/named.conf和区域文件的创建与配置后,就可以启动DNS服务器进行调试了。启动/停止服务器的方法如下:
#chkconfig named on --保证以后系统启动的时候自动启动named服务。
#service named start --启动named 服务
#service named restart --当重新配置后,可以重新启动named服务器
#service named srop --停止DNS服务器
笔者发现,即便配置全部正确,启动named服务器无错误输出,也可能无法解析域名,即使通过查看日至,也不一定能找到错误所在,使用如下命令,可以找到几乎所有的错误:
#named -g
显示图3-2的信息:
图3-2 named服务启动失败提示信息
根据错误的提示,/var/run/named/named.pid的权限不够,笔者发现/var/run/named及其下的文件的所有者和组均是named,可能是读写权限不够,但将权限设置为755时仍然无法正常工作,只有执行了如下语句后才能正常工作:
#chmod -R 777 /var/run/named
当服务器正常启动后,使用#named -g可以看到如图3-3的信息:
图3-3 named服务启动成功后的提示信息
e) 调试与测试配置
在配置过程中,往往需要进行反复修改才可能成功。常见的错误是缺少或多余了空格,只有排除了所有的错误之后,才能正常解析域名。一般调试的方法如下:
根据错误提示修改配置文件
重新启动服务器
#service named restart --如果服务器已经在运行中
#service named start --如果上次启动失败或根本没有启动服务器
查看named服务的启动日志
#named -g
上面的方法是一个非常有效的方法!笔者每次都是依靠该方法成功的。网上很多朋友问笔者:“服务运行正常,但无法解析,什么原因呢?”,笔者认为,除了/etc/resolv.conf中没有添加DNS服务器的IP,大多错误都可以通过这个方法得到答案。
测试域名解析
一般我们测试主机域名是否能够解析,通常是借用ping命令。其实有个比ping功能更丰富的命令,它就是host。该命令不仅可以测试主机域名是否可以解析,而且可以测试反向解析和MX记录以及NS记录等。可以说用一个命令就可以完成DNS服务器的大部分测试了。下面我们简单介绍该命令的使用方法,测试的结果见图3-4。
图3-4 host调试DNS服务器配置
测试某个主机域名是否可被解析:host 主机域名。如:
#host www.syd164.com
如果上述测试成功,则该区域上的其它主机记录一般也没什么问题。
测试反向解析:host IP 地址。如:
#host 172.12.0.3
如果测试成功,将返回该IP对应的域名信息。
测试邮件服务器:host -t MX 邮件域。如:
#host -t MX syd164.com
如果测试成功,将返回该邮件域的服务器域名。
测试域名服务器:host -t NS 域。如:
#host -t NS syd164.com
如果测试成功,则返回解析该域的域名服务器的IP或域名。
另外,如果本机测试没有问题,强烈建议远程测试,但开始一般都失败,为什么?因为我们没有在测试的机器上添加nameserver 172.12.0.3 到它的/etc/resolv.conf中。如果是在Windows系统中,那就需要将要测试的服务器添加到DNS客户端配置中,并且建议最好作为“主要DNS服务器”。
3.1.3 子域的实现
这里有个问题需要读者思考。我们如何让自己配置的域名服务器在无需客户端增加配置的情况下能正常解析?现实中我们并没有添加所有DNS服务器的IP到我们的DNS配置中,可我们照常可以使用那些服务器中配置的域名,为什么呢?
要让我们自己配置的域名也能用于互联网,方法很简单,只要我们在已知可解析的DNS服务器上声明我们的域服务器就可以了,也就是在那个DNS服务器上添加一条指向我们的DNS服务器的NS记录。这样,当查询我们的域名时,这个“已知”的DNS服务器便可以转查我们的DNS服务器或告诉查询者到我们的域服务器中查询,这样我们就不用在每个客户端进行配置了。
于是,子域的实现变得很简单了:首先在父域DNS服务器中声明子域服务器,然后配置子域服务器,就可以了。
下面通过一个实验来实现我们的子域。这里建立syd164.com的子域sub.syd164.com,子域服务器为172.14.0.8。
(1) 第一步,编辑/var/named/syd164.com.zone
在原来的NS记录后,添加如下两行,声明子域。
sub.syd164.com IN NS www.sub.syd164.com
www.sub IN A 172.14.0.8
上面第一行表示,sub.syd164.com子域由www.sub.syd164.com服务器负责解析。第二行表示,子域应该建立在172.14.0.8主机上。
(2) 第二步,在子域服务器(172.14.0.8)上修改主配置文件和建立区域文件。
方法和上面的一样,只是区域为sub.syd164.com。
首先在172.14.0.8的机器上的/etc/named.conf中添加:
zone “sub.syd164.com” IN {
type master;
file “sub.syd164.com.zone”;
};
接着,创建/var/named/sub.syd164.com.zone文件,其内容为:
//=============正向区域文件/var/named/sub.syd164.com.zone=============
//以下每行都要靠左,即左侧不要留出空白!
$TTL 86400 //TTL持续时间,默认为86400秒
@ IN SOA www.sub.syd164.com master.sub.syd164.com (
20040730 ; //区域序列号,当修改时要增加,否则从域可能不一致
2h ; //从域刷新超时时间,小时
40m ; //从域重试刷新时间,分钟
1w ; //从域刷新失败并认为主域无效的时间,周
2h ; //小时
);
//下面行是DNS服务器的声明,表示解析该域的服务器IP
sub.syd164.com IN NS 172.14.0.8
//以下几行是主机记录
www IN A 172.14.0.8
mail IN A 172.14.0.81
ftp IN A 172.14.0.82
bbs IN A 172.14.0.83
test IN A 172.14.0.8
//以下行是上面主机记录第一条的另一解析,用于负载均衡
www1 IN A 172.14.0.8
//以下一条是邮件交换器,表示处理sub.syd164.com域邮件的服务器
sub.syd164.com IN MX 10 mail.sub.syd164.com
//以下行是主机别名的格式,表明www1是www的别名
www2 IN CNAME www
(3) 第三步,启动子域所在的DNS服务器。
(4) 第四步,在可以解析syd164.com域的主机上测试sub.syd164.com域。
要测试子域,必须配置正确,根据子域的原理,客户在父域中查不到时才到子域查,所以测试的时候,测试机器上的DNS客户配置一定要去掉子域服务器的IP,否则您的测试是错误的!不可信的。只有证明了DNS查询是经由主域服务器再到子域服务器上的,那才算是正确的。
3.1.4 配置辅助域名服务器
关于辅助域服务器的详细知识请参考前面的章节。辅助域名服务器的记录来自主服务器,辅助域名服务器的配置相对简单,只需要配置主配置文件即可。但需要注意,辅助域服务器和主服务器不能同时配置在一台机器上,所以,我们需要另一台机器测试辅助域名服务器。
假设,我们将IP为172.14.0.9的DNS服务器配置为辅助域服务器。其中要配置syd168com域及其反向解析的辅助域。可以通过如下过程实现:
1) 修改主配置文件
#vi /etc/named.conf //添加如下内容:
zone “syd164.com” IN {
type slave; //该行表示为辅助域
file “syd164.com.zone”; //该行表示主服务器上对应的区域文件
master {172.12.0.6;}; //该行表示该区域的主域服务器的地址
};
zone “0.12.172.in.addr-arpa” IN {
type slave; //该行表示为辅助域
file “syd164.com.arpa”; //该行表示主服务器上对应的区域文件
master {172.12.0.6;}; //该行表示该区域的主域服务器的地址
};
2) 重新启动辅助域服务器
#service named restart
3) 修改客户端配置
#vi /etc/resolv.conf
将其中的nameserver行改为:
nameserver 172.14.0.9
4) 测试辅助服务器
#ping www.syd164.com
3.1.5 配置域转发功能
我们配置的DNS服务器中的主机记录总是非常有限的,所以只能解析极少数我们配置的主机记录,对于我们的DNS服务器无法解析的记录,DNS服务器一般会自动转到根服务器去查找,这将是一个耗时的过程。有一种办法可以加快查询,那就是设置域转发功能,即如果我们的DNS服务器无法解析,就定位到其它可用的DNS服务器继续查找。
配置域名转发器非常简单,只需要在主配置文件/etc/named/中的options选项配置中使用forwarders子句即可。如在/etc/named.conf中的options中添加如下行:
forwarders {10.4.1.244;10.4.10.250;}; //可以包含多个
通过这种方法,可以使自己在做实验的时候,也可以解析互联网的真实域名,即便是没有添加外部域名服务器IP到本机的客户端配置中。
3.1.6 让DNS服务器以chroot方式运行
什么是chroot?所谓chroot就是将一个命令的执行限制在某个目录下,这样可以防止该命令的不正常运行导致系统故障。关于chroot的详细说明请参考man 手册。
要让named进程(Linux 中DNS服务器的服务程序)以chroot方式运行,RHEL 3 中的配置比较简单。步骤如下:
1) 打开named 的chroot运行功能。
通过编辑文件/etc/sysconfig/named,注释掉其中的ROOTDIR行。其设置表明named进程运行在/var/named/chroot下。
2) 将主配置文件复制到/var/named/chroot/etc下。
#cp /etc/named.conf /var/named/chroot/etc
3) 将区域文件复制到/var/named/chroot/var/named下
#cp /var/named/* /var/named/chroot/var/named/
4) 重新启动named服务
#service named restart
5) 检查日志输出,看是否有错误信息,如果有则修改后继续调试。
#named -t /var/named/chroot -u named -g
说明:上述命令在RHEL 4中已经简化为“named -g”格式了,即和非chroot方式的调试方式是一样的,这就方便了调试。
3.1.7 巧用外网DNS服务器实现内网DNS子域
一般测试子域都是在自己的机器上进行,这种测试固然可以移植到实际的网络上,但移植的时候会带来很多的问题,比如IP地址都需要修改;而且,如果我们想在单位内部实现内网DNS域名系统,这些机器采用NAT方式上网,即IP是保留地址,所建DNS服务器只能在内网客户端配置了该DNS服务器IP才有效。这样,那就是内网建立的DNS服务器一般无法实现内网所有上网机器不加额外修改就能使用域名。例如:在172.12.0.3上设置了syd164.com域,并添加了主机记录www(172.12.0.3),mail(172.12.0.4)等等。内网其它机器要能ping通www.syd164.com,就必须添加172.12.0.3到DNS客户端配置中,这样很不方便的。
能否实现向外网一样,直接建立我们自己的域名系统,而内网客户端又不添加DNS服务器就能ping通呢?利用www.3322.org网站提供的免费子域名功能可以很容易实现。
具体原理如下:
(1) 首先在www.3322.org注册帐号(好像现在收费了)。
(2) 在www.3322.org添加子域项(如我添加了sydsub.8862.org),子域服务器的IP地址指定为我们在内网要建立DNS服务器的IP地址,如图3-5所示。
图3-5 在www.3322.org上建立子域
(3) 在内网的DNS服务器上,建立我们的域名系统(域只能为上图中的子域名)。
图3-6 配置named.conf
a) 修改主配置文件/etc/named.conf,添加域声明。
配置的原理和一般区域的声明是一样的,配置的结果如图3-6所示。
b) 创建区域配置文件,并配置区域。
配置的方法和一般区域的配置是一样的,配置的结果如图3-7所示。
c) 重新启动服务器。
#service named restart
d) 到其它机器上测试。
注意,测试的机器必须是没有添加DNS服务器的客户机,并且应该是内网的机器。
#ping www.sydsub.8862.org
需要注意的是,所有的子域记录为内网IP,当然外网的也可以。这样,在内网能上网的情况下,就可以直接在所有的联网机器上ping通任何内网DNS服务器中的主机了。
图3-7 配置记录文件
这有什么用呢?比如校园内部,可以建立学生、系或各个部门的网站,访问站点可直接采用域名方式而不用IP地址了,这对学生学习DNS服务器更是如鱼得水。 |
|