第三章 DNS(域名系统)和设置
第一节 DNS介绍 一、DNS
连接TCP/IP的每个网络接口用一个唯一的32位的IP地址标识,但由于数字比较复杂、难以记忆而且没有形象性。因而人们发明了用域名系统来解决它,在这种情况下,我们可以使用易于理解和较为形象的名称来作为一台计算机的标识。在大多数情况下,数字地址和域名地址可以交替使用;但无论用数字地址或是域名进行网络应用时,网络总是以IP地址为基础来进行的。在网络进行连接前,系统必须将域名地址转换成IP地址。这就是DNS的任务。
将域名转换成IP地址有常用的两种方法。一种较古老的方法是从一个称为“主机表”的文件中查找主机名;后来一般使用的是一个称为“域名服务(DNS)”的分布式数据库系统,将名字转换成IP地址。
主机表是一个简单的文本文件,可以使IP地址与主机名相关联。在Redhat5.2中,主机表文件为/etc/hosts,该文件的每一表项包含一个IP地址和用空格隔开的与该地址关联的主机名列表。
虽然主机表比较简单,但它有一些缺点。域名系统则能克服这些缺点:
-DNS的扩充性好。它并不依靠单独一个大表,而是一个分布式数据库系统,不会因为数据库的增长而陷入困境。
-DNS可确保在必要时将新主机的信息传播到网络中其他部分。不仅能自动地传播信息,而且可以只传播所需的信息。
DNS的工作原理为:如果一台DNS服务器接收到一个要求获取有关主机信息的请求,它就将该请求发送给一台管理服务器。管理服务器是负责保持查询域的精确信息的任何服务器。当它响应该请求时,本地服务器就将回答信息保存在高速缓存中供将来使用。当下一次本地服务器再接收到该信息的请求时,它本身就回答这个请求。
二、DNS服务器的类型
1、“Cache-Only”的DNS服务器:
一个DNS服务器也不可能拥有国际网络上所有的主机信息,因此它提供一个转送方式,将自己的DNS服务器无法处理的查询要求转送至上一层的DNS服务器查询,然後将所得到的查询结果,传送给提出查询要求的主机。而“Cache-Only” 的“ DNS” 就是该DNS服务器的主机畔⒗锍俗约褐饩兔挥辛耍械牟檠蠖甲椭疗渌鸇NS服务器去查询。
2、“ Primary” DNS服务器:
一个完整功能的DNS服务器,管理一个或数个“ Domain” (域)的机器信息。而这些主机相关的资料都依照格式储存於服务器的档案目录中,然後会在服务器启动时将这些资料读入系统。
“ Secondary” DNS服务器: 基本上它也是一个完整功能的DNS服务器,只是所不同的是,它的主机资料并非完全储存於服务器所在的档案目录,而由某个“Primary DNS” 来提供。
我们的实验系统将是一个“Primary”的DNS服务器,它一方面提供本地局域网用户的查询,另一方面则将其他的请求做缓存处理。
第二节 DNS的设置
一、应用条件
在Linux上已经带有了DNS软件,我采用的是Internet使用最为广泛的BIND(Berkeley Internet Name Domain Name Server)版本8。
我们的应用条件如下:
1、一个C类网段地址 (172.31.0);
2、域名为 ec.edu,(主域名服务器地址 172.31.0.10,主机名为Linuxserver.ec.edu);
3、局域网通过网关与Internet连接 。
DNS服务器的主体是域名服务器进程named,named 启动后向DNS客户机提供域名解析服务,把域名转换成IP地址。
named 启动时需要读取几个数据文件,在bind 4下缺省情况下是先/etc/named.boot,所以/etc/named.boot是named的基本配置文件。在bind 8下,缺省情况下先是/etc/named.conf。(请注意red hat 5.1中自带的是bind 4,而red hat 5.2自带的是bind 8,我就是在这上面花费了大量的时间)。
虽然启动named可直接执行named,在Linux上我们可以使用一个控制named的工具ndc。ndc可以用于启动、中止、重启动、刷新DNS数据、输出DNS数据等多种调试功能,我就是用这个工具来帮助DNS服务器的调试。
二、建立named配置文件 /etc/named.boot、etc/named.conf
1、/etc/named.boot是基本的配置文件,但不包含任何DNS数据,针对我们前面的设定,先建立以下/etc/named.boot,其内容如下:
; boot file for name server
directory /var/named
domain ec.edu named.hosts
primary 0.0.127.in-addr.arpa named.local
primary 0.31.0.172.in-addr.arpa named.rev
cache . named.ca
其中以“;”开头的行是注释行,其他各行含义如下:
(1)diretory /var/named :指定named从 /var/named 目录下读取DNS数据文件,这个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下;
(2)domain ec.edu named.hosts :指定named作为ec.edu域的主域名服务器,named.hosts文件中包含所有 *.ec.edu形式的域名转换数据;
(3)primary 0.0.127.IN-ADDR.ARPA named.local :指定named作为127.0.0网段地址转换主服务器,named.local文件中包含了127.0.0.*形式的地址到域名的转换数据(127.0.0网段地址是局域网接口的内部 loopback地址);
(4)primary 0.31.0.172.in-addr.arpa named.rev :指定named作为172.31.0网段地址转换主服务器,named.rev文件中包含了所有 172.31.0.*形式的地址到域名的转换数据;
(5)cache . named.ca :指定named从 named.ca 文件中获得Internet的顶层“根”服务器地址 。
(3)、(4)两行中的网段地址是倒写的,另外,各个文件名也是可以自行决定的。
2、 /etc/named.conf是基本的配置文件,不包含任何DNS数据,针对我们前面的设定,建立以下 /etc/named.conf,其内容如下:
// generated by named-bootconf.pl
options {
directory “/var/named”;
// query-source address * port 53;
};
// a caching only nameserver config
zone “.” {
type hint;
file “named.ca”;
};
zone “0.0.127.in-addr.arpa” {
type master;
file “named.local”;
};
//-------------------------------
zone “0.31.172.in-addr.arpa” {
type master;
file “named.rev”;
};
zone “ec.edu” {
type master;
file “named.hosts”;
};
//这些为添加的内容
//-------------------------------
这个文件也可以使用named-bootconf.pl脚本从named.boot转化得到。
三、建立各个DNS数据文件
现在,要按 /etc/named.boot中的定义,建立各个DNS数据文件。
1、建立正向域名转换数据文件named.hosts
根据/etc/named.boot的定义,我们在/var/named目录下建立named.hosts,其中应该包括所有在ec.edu域内的主机节点。但在机器数量较多时,为了调试方便,建议一开始只把几台节点的数据放入文件,待named正常工作后再把其他节点的数据补充进去。下面是named.hosts的例子:
@ IN SOA LinuxServer.ec.edu. root.LinuxServer.ec.edu. (
1999051702 ; serial
36000 ; refresh
8640 ; retry
360000 ; expire
86400 ) ; minim
IN NS LinuxServer.ec.edu.
MX 10 LinuxServer.ec.edu.
localhost IN A 127.0.0.1
LinuxServer IN A 172.31.0.10
o2 IN A 172.31.0.1
ntsever IN A 172.31.0.110
w100 IN A 172.31.0.100
W101 IN A 172.31.0.101
W102 IN A 172.31.0.102
W103 IN A 172.31.0.103
W104 IN A 172.31.0.104
W105 IN A 172.31.0.105
W106 IN A 172.31.0.106
W107 IN A 172.31.0.107
W108 IN A 172.31.0.108
W109 IN A 172.31.0.109
W111 IN A 172.31.0.111
W112 IN A 172.31.0.112
W113 IN A 172.31.0.113
W114 IN A 172.31.0.114
W115 IN A 172.31.0.115
W116 IN A 172.31.0.116
W117 IN A 172.31.0.117
W118 IN A 172.31.0.118
W119 IN A 172.31.0.119
W120 IN A 172.31.0.120
gateway IN A 172.31.0.200
mail MX 10 Linuxserver.ec.edu.
www CNAME Linuxserver.ec.edu.
ftp CNAME Linuxserver.ec.edu.
…
其中第一行是SOA记录,定义了域名数据的基本信息,依次是DNS服务器名、DNS 管理员邮件地址(这里的"@"用"."代替),括号内的第一个数字是文件版本号(一般为当天的时间和修改次数组成),每次本文件内容修改后,必须更改此号。其余数字与DNS服务器直接的数据交换有关,在这里我们不需要改动。
括号后面有一条NS记录和一条MX记录,定义了域名服务器本身的域名和username@Linuxserver.ec.edu形式邮件地址所对应的邮件服务器名字。
在此以下是各种域名/地址转换数据,其中A记录是DNS域名到IP地址的记录,是必须有的,以o2.ec.edu为例,在A记录中域ec.edu被省略,只写成o2,named在处理时会根据named.boot中的定义自动加上ec.edu,而其对应IP地址为172.31.0.1。另一种记录是MX记录。MX是邮件地址转换记录,本例中定义了将username@mail.ec.edu的邮件地址转换成username@Linuxserver.ec.edu,即实际上真正的邮件服务器是LinuxServer.ec.edu,它的优先数为10,所以通常邮件首先被发往优先数小的主机support.my.com(有两个以上的mail服务器的情况)。
还有一些是为方便访问者而提供的CNAME记录。CNAME定义了一些主机的别名,如我们要将Linuxserver.ec.edu作为实验系统的www和ftp服务器,所以我们提供了www.ec.edu和ftp.ec.edu作为Linuxserver.ec.edu的别名,用户只需要根据习惯就可以访问系统的www、ftp服务器了,如果将来我们换用别的主机作www和ftp服务器,只需要修改CNAME记录就可,对用户没有影响。在其后的web配置中的虚拟主机设置,我们还将再次使用CNAME记录。
注意:MX和CNAME记录最后的带域名的主机名后必须带一个“.”。
2、建立反向DNS数据文件named.local和named.rev
反向DNS数据文件用来提供根据IP地址查询相应DNS主机名,每个网段分别有一个数据文件。
对于内部网段127.0.0通常只有一个地址,即127.0.0.1 loopback地址,named.local内容如下:
@ IN SOA LinuxServer.ec.edu. root.LinuxServer.ec.edu. (
1999051602 ; serial
36000 ; refresh
8640 ; retry
360000 ; expire
86400 ) ; minim
IN NS LinuxServer.ec.edu.
1 IN PTR localhost.
而外部网段的数据文件 named.rev 中包含所有主机 IP 地址到DNS主机名的转换数据。named.rev 内容如下:
@ IN SOA LinuxServer.ec.edu. root.LinuxServer.ec.edu. (
1999051602 ; serial
36000 ; refresh
8640 ; retry
360000 ; expire
86400 ) ; minim
IN NS LinuxServer.ec.edu.
10 IN PTR LinuxServer.ec.edu.
1 IN PTR o2.ec.edu.
100 IN PTR w100.ec.edu.
101 IN PTR w101.ec.edu.
102 IN PTR w102.ec.edu.
103 IN PTR w103.ec.edu.
104 IN PTR w104.ec.edu.
105 IN PTR w105.ec.edu.
106 IN PTR w106.ec.edu.
107 IN PTR w107.ec.edu.
108 IN PTR w108.ec.edu.
109 IN PTR w109.ec.edu.