DNS Domain Name System

域名系统,在 TCP/IP 网络中有非常重要的地位,能够提供域名与 IP 地址的解析服务。
DNS 域名解析工作原理
<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
<2>
当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的 DNS 信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
<3>
根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
<4>
本地服务器再向返回的域名服务器发送请求。
<5>
接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。
<6>
本地域名服务器将查询请求发送给返回的 DNS 服务器。
<7>
域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的 DNS 信息,查询过程将重复 <6> <7> 步骤,直到返回解析信息或解析失败的回应)。
<8>
本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
正向解析与反向解析
1
)正向解析
正向解析是指域名到 IP 地址的解析过程。
2
)反向解析
反向解析是从 IP 地址到域名的解析过程。反向解析的作用为服务器的身份验证。
DNS 查询类型
1. 递归查询 : 简单的理解就是以最终结果查询,就是返回最终的结果给客户机,而客户机在此阶段是处于等待的状态!(就好比,你在家里地位最高,你都是衣来伸手饭来张口的,就是什么事情就只要一句话不用自己亲自动手)
2. 迭代查询:简单的理解就是以最佳的结果查询,意思就是如果 DNS 服务器能解析就直接以最终结果返回给客户机,如果无法解析则就返回上一级 DNS 服务器的 IP 给客户机,由客户机完成查询工作直到得到最终结果!(举个例子就是什么事情你去问别人,别人只是告诉你怎么做,你知道后要自己亲自去做)
资源记录
为了将名字解析为 IP 地址,服务器查询它们的区(又叫 DNS 数据库文件或简单数据库文件)。区中包含组成相关 DNS 域资源信息的资源记录( RR )。例如,某些资源记录把友好名字映射成 IP 地址,另一些则把 IP 地址映射到友好名字。
某些资源记录不仅包括 DNS 域中服务器的信息,还可以用于定义域,即指定每台服务器授权了哪些域,这些资源记录就是 SOA NS 资源记录。
1
SOA 资源记录
每个区在区的开始处都包含了一个起始授权记录( Start of Authority Record , 简称 SOA 记录。 SOA 定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的 SOA 记录。区域以服务器授权机构的概念为基础。当 DNS 服务器配置成加载区域时,其使用 SOA NS 两种资源记录来确定区域的授权属性。
SOA
NS 资源记录在区域配置中具有特殊作用,它们是任何区域都需要的记录并且一般是文件中列出的第一个资源记录。
起始授权机构 SOA 资源记录总是处于任何标准区域中的第一位。它表示最初创建它的 DNS 服务器或现在是该区域的主服务器的 DNS 服务器。它还用于存储会影响区域更新或过期的其他属性,比如版本信息和计时。这些属性会影响在该区域的域名服务器之间进行同步数据的频繁程度。
SOA
资源记录语法格式:
区域名(当前) 记录类型 SOA 主域名服务器( FQDN 管理员邮件地址 (序列号 刷新间隔 重试间隔 过期间隔 TTL
SOA
资源记录字段:
主域名服务器:区域的主 DNS 服务器的 FQDN
管理员:管理区域的负责人的电子邮件。在该电子邮件名称中使用英文句号 “.” 代替 at 符号 “@”
序列号 :该区域文件的修订版本号。每次区域中的资源记录改变时,这个数字便会增加,每次区域改变时增加这个值非常重要,它使部分区域改动或完全修改的区域都可以在后续传输中复制到其他辅助 DNS 服务器上。
刷新间隔 :以秒计算的时间,辅助 DNS 服务器请求与源服务器同步的等待时间。当刷新间隔到期时,辅助 DNS 服务器请求源服务器的 SOA 记录副本,然后辅助 DNS 服务器将源服务器的 SOA 记录的序列号与其本地 SOA 记录的序列号相比较,如果二者不同,则辅助 DNS 服务器从主 DNS 服务器请求区域传输。这个域的默认时间是 900 秒( 15 分钟)。
重试间隔 :以秒计算时间,辅助 DNS 服务器在请求区域传输失败后,等待多长时间再次请求区域传输时间。通常,这个时间短于刷新间隔。默认值为 600 秒( 10 分钟)。
过期间隔 :以秒计算时间,当这个时间到期时,如果辅助 DNS 服务器还无法与源服务器进行区域传输,则辅助 DNS 服务器会把它的本地数据当作不可靠数据。默认值为 86400 秒( 24 小时)。
最小(默认)TTL :区域的默认生存时间( TTL )和缓存否定应答名称查询的最大间隔。默认值为 3600 秒( 1 小时)
2 NS 资源记录
名称服务器( NS )资源记录表示该区的授权服务器,它们表示 SOA 资源记录中指定的该区的主和辅助服务器,也表示了任何授权区的服务器。每个区在区根处至少包含一个 NS 记录。
用于指定一个区域的权威 DNS 服务器,通过在 NS 资源记录中列出服务器的名字,其他主机就认为它是该区域的权威服务器。这意味着在 NS 资源记录中指定的任何服务器都被其他服务器当作权威的来源并且能应答区域内所含名称的查询。
NS
资源记录语法格式:
区域名 IN NS 完整主机名( FQDN
3 A 资源记录
地址( A )资源记录把 FQDN 映射到 IP 地址,因而解析器能查询 FQDN 对应的 IP 地址。
A 资源记录语法格式:
完整主机名( FQDN IN A IP 地址
4 PTR 资源记录
相对于 A 资源记录,该记录与 A 记录相反,用于查询 IP 地址与主机名的对应关系。
PTR
资源记录语法格式:
IP
地址       IN      PTR      主机名( FQDN
5 CNAME 资源记录
规范名字( CNAME )资源记录创建特定 FQDN 的别名。用户可以使用 CNAME 记录来隐藏用户网络的实现细节,使连接的客户机无法知道。别名( CNAME )资源记录用于为某个主机指定一个别名。例如管理员告知公司的首页为 www.abc.com ,而实际在访问时访问的是 www1.abc.com 主机。该资源记录经常用于在同一区域的 A 资源记录中的主机需要重命名时或者为多台主机(例如一组 WWW 服务器)提供相同的别名。
CNAME
资源记录语法格式:
别名 IN CNAME 主机名
6 MX 资源记录
邮件交换( MX )资源记录为 DNS 域名指定邮件交换服务器。邮件交换服务器是为 DNS 域名处理或转发邮件的主机。处理邮件指把邮件投递到目的地或转交另一不同类型的邮件传送者。转发邮件指把邮件发送到最终目的服务器,用简单邮件传输协议 SMTP 把邮件发送给离最终目的地最近的邮件交换服务器,或使邮件经过一定时间的排队。
MX 资源记录语法格式:
区域名       IN      MX      优先级(数字)       邮件服务器名称( FQDN
type 字段指定区域的类型
type 字段指定区域的类型,对于区域的管理至关重要,一共分为六种:
Master
:主 DNS 服务器:拥有区域数据文件,并对此区域提供管理数据
Slave
:辅助 DNS 服务器:拥有主 DNS 服务器的区域数据文件的副本,辅助 DNS 服务器会从主 DNS 服务器同步所有区域数据。
Stub
stub 区域和 slave 类似,但其只复制主 DNS 服务器上的 NS 记录而不像辅助 DNS 服务器会复制所有区域数据。
Forward
:一个 forward zone 是每个域的配置转发的主要部分。一个 zone 语句中的 type forward 可以包括一个 forward / forwarders 子句,它会在区域名称给定的域中查询。如果没有 forwarders 语句或者 forwarders 是空表,那么这个域就不会有转发,消除了 options 语句中有关转发的配置。
Hint
:根域名服务器的初始化组指定使用线索区域 hint zone ,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表。如果没有指定 class IN 的线索区域,服务器使用编译时默认的根服务器线索。不是 IN 的类别没有内置的默认线索服务器。
Delegation-only
:用于强制区域的 delegation .ly 状态。
架设 DNS 所需要的软件:

Bind-utils-9.2.4-16.EL4 à 这个是客户端搜索主机名称的相关指令。
Bind-9.2.4-16.EL4 à 这个才是 DNS 服务器主程序。
Bind-chroot-9.2.4.-16EL4 à bind 主程序关在家里。
Caching-nameserver :DNS 高速缓存服务器软件包
Options 内的相关参数说明:

Directory :这个设置值用于指定 zone file 要放置到那个目录,与下面 zone 设置项目 file 配合而行程完整的文件名。
Dump-file “/var/named/data/cache_dump.db”  ; DNS 服务器会将搜索到的主机 IP 所对应的数据放置到高速缓存中,如何想将目前的缓存数据记录下来,就可以用到这个文件。
Statistics-file “/var/named/data/named_stats.txt”;    DNS 的一些统计数据列出时就写入到这个设置值所指定的文件内。
Pid-file “/var/run/named/named.pid”; 用于记录 named 程序的 PID 的文件,次文件可以在 named 启动,关闭时提供正确的 PID.
Forwarders 11.22.33.44 55.66.77.88 ;} ; 设置向上查询的那个“合法”的 DNS 。每个 forward 服务器的 IP 地址需要用“;”作为结尾。
Forward only 这个设置值可以让您的 DNS 主机仅进行 forward ,是 cache-only 主机最常见的设置。
Allow-query any ;} ; 是否允许客户端的查询,查询的重点就是读取数据库的内容,既然要假设 DNS ,当然要允许客户端的查询,内容可以填写任何来源( any )、 IP/ 网段、( IP/netmask )的格式。
Allow-transfer {none;}; 是否允许 slaveDNS 的整个领域数据的传送?这个设置值与 master/slave DNS 服务器之间的数据库传送有关,除非您有 slave DNS 服务器,否则这里不要开放
应用案例
【实例 1 】技术部所在域为 “tech.org” ,部门内有三台主机,主机名分别是 client1.tech.org-192.168.0.5,client2.tech.org-192.168.0.6,client3.tech.org-192.168.0.7 。现要求 DNS 服务器 dns.tech.org-192.168.0.1 可以解析 3 台主机名和 IP 地址的对应关系。

当前的目录为 /etc/named.conf
vim named.conf
options {
        directory "/var/named" ;
};

zone "." {
        type hint ;
        file "named.ca" ;
};
zone "tech.org" {

        type master ;
        file "tech.org.zone" ;
};

zone "0.168.192.in-addr.arpa" {
        type master ;
        file "192.168.0.zone" ;
};
 
当前的目录为 /var/named/
 vim tech.org.zone
$TTL 86400
@       IN      SOA     dns.tech.org.    root (
                2009070900
                1H
                15M
                1W
                1D
                )
@        IN      NS         dns.tech.org.
dns              IN       A       192.168.0.1
client1          IN      A      192.168.0.5
client2          IN      A      192.168.0.6
client3          IN      A      192.168.0.7

当前的目录为 /var/named/
vim 192.168.0.zone
@ IN SOA  dns.tech.org.  root.tech.org. (
                2009070900
                1H
                15M
                1W
                1D
)
@    IN   NS    dns.tech.org.
1  IN   PTR  dns.tech.org.
5  IN   PTR   cilent1.tech.org.
6   IN   PTR   client2.tech.org.
7   IN   PTR   client3.tech.org.

随后就是自行测试了!

【实例 2 】企业采用多个区域管理各部门网络,技术部属于 “tech.boobooke” 域,市场部属于 “mart.boobooke” 域,其他人员属于 “freedom.boobooke” 域。技术部门共有 100 人,采用的 IP 地址为 192.168.31.1-192.168.31.100 。市场部门共有 100 人,采用 IP 地址为 192.168.32.1-192.168.32.100 。其他人员只有 50 人,采用 IP 地址为 192.168.33.1-192.168.33.50 。现采用一台主机搭建 DNS 服务器,其 IP 地址为 192.168.31.134 ,要求这台 DNS 服务器可以完成内网所有区域的正 / 反向解析,并且所有员工均可以访问外网地址。

vim etc/named.conf
options {
 directory "/var/named" ;
};
zone "." {
 type hint ;
 file "named.ca" ;
};
zone "tech.boobooke" {
 type master ;
 file "tech.boobooke.zone" ;
};
zone "31.168.192.in-addr.arpa" {
 type master;
 file "192.168.31.zone";
};
zone "mart.boobooke" {
 type master;
 file "mart.boobooke.zone";
};

zone "32.168.192.in-addr.arpa" {
 type master;
 file "192.168.32.zone";
};
zone "freedom.boobooke" {
 type master;
 file "freedom.boobooke.zone";
};
zone "33.168.192.in-addr.arpa" {
 type master;
 file "192.168.33.zone";
};
 
vim var/named/tech.boobooke.zone
$TTL 86400
@       IN      SOA     dns.tech.boobooke.    root (
                2009070900
                1H
                15M
                1W
                1D
                )
@        IN      NS     dns.tech.boobooke.
dns              IN      A      192.168.31.134
client1          IN      A      192.168.31.1
client2          IN      A      192.168.31.2
client3          IN      A      192.168.31.3
client4          IN      A      192.168.31.4
client5          IN      A      192.168.31.5
client6          IN      A      192.168.31.6
client7          IN      A      192.168.31.7
client100        IN      A      192.168.31.100
vim mart.boobooke.zone
$TTL 86400
@       IN      SOA     dns.mart.boobooke.       root (
                2009070900
                1H
                15M
                1W
                1D
                )
@        IN      NS     dns.mart.boobooke.
dns              IN      A      192.168.31.134
client1          IN      A      192.168.32.1
client2          IN      A      192.168.32.2
client3          IN      A      192.168.32.3
client4          IN      A      192.168.32.4
client5          IN      A      192.168.32.5
client6          IN      A      192.168.32.6
client7          IN      A      192.168.32.7
client100        IN      A      192.168.32.100
 
vim freedom.boobooke.zone
$TTL 86400
@       IN      SOA     dns.freedom.boobooke.    root (
                2009070900
                1H
                15M
                1W
                1D
                )
@        IN      NS     dns.freedom.boobooke.
dns              IN      A      192.168.31.134
client1          IN      A      192.168.33.1
client2          IN      A      192.168.33.2
client3          IN      A      192.168.33.3
client4          IN      A      192.168.33.4
client5          IN      A      192.168.33.5
client6          IN      A      192.168.33.6
client7          IN      A      192.168.33.7
client50         IN      A      192.168.33.50

vim 192.168.31.zone
@ IN SOA  31.168.192.in-addr.arpa.  root.tech.boobooke. (
                2009070900
                1H
                15M
                1W
                1D
)
@   IN NS  dns.tech.boobooke.
134 IN PTR dns.tech.boobooke.
1 IN PTR cilent1.tech.boobooke.
2 IN PTR client2.tech.boobooke.
3 IN PTR client3.tech.boobooke.
4 IN PTR client4.tech.boobooke.
5 IN PTR client5.tech.boobooke.
6 IN PTR client6.tech.boobooke.
7 IN PTR client7.tech.boobooke.
100 IN PTR client100.tech.boobooke.

vim 192.168.32.zone
@ IN SOA  31.168.192.in-addr.arpa.  root.mart.boobooke. (
                2009070900
                1H
                15M
                1W
                1D
)
@   IN NS  dns.mart.boobooke.
134 IN PTR dns.mart.boobooke.
1 IN PTR cilent1.mart.boobooke.
2 IN PTR client2.mart.boobooke.
3 IN PTR client3.mart.boobooke.
4 IN PTR client4.mart.boobooke.
5 IN PTR client5.mart.boobooke.
6 IN PTR client6.mart.boobooke.
7 IN PTR client7.mart.boobooke.
100 IN PTR client100.mart.boobooke.
 

vim 192.168.33.zone
@ IN SOA  31.168.192.in-addr.arpa.  root.freedom.boobooke. (
                2009070900
                1H
                15M
                1W
                1D
)
@   IN NS  dns.freedom.boobooke.
134 IN PTR dns.freedom.boobooke.
1 IN PTR cilent1.freedom.boobooke.
2 IN PTR client2.freedom.boobooke.
3 IN PTR client3.freedom.boobooke.
4 IN PTR client4.freedom.boobooke.
5 IN PTR client5.freedom.boobooke.
6 IN PTR client6.freedom.boobooke.
7 IN PTR client7.freedom.boobooke.
50 IN PTR client50.freedom.boobooke.

chown root:named 192.168.31.zone
chown root:named 192.168.32.zone
chown root:named 192.168.33.zone
chown root:named tech.boobooke.zone
chown root:named mart.boobooke.zone
chown root:named freedom.boobooke.zone

【实例 3 】安装基于 chroot DNS 服务器,并将其配置成缓存 Cache-only 服务器,然后将客户机的查询转发到 202.100.138.68 202.100.128.68 DNS 服务器上。
options {
        directory "/var/named" ;
        forwarders {202.100.138.68;
                    202.100.128.68;
                   };
        forward only;
};

【实例 4 】安装基于 chroot DNS 服务器,并根据以下要求配置主要名称服务器。
1 )定义服务器的版本信息为 “9.3.4”
2 )设置根区域,以便 DNS 服务器在本地区域文件不能进行查询的解析时,能转到根 DNS 服务器查询。
3 )建立 xyz.org 主区域,设置允许区域复制的辅域名服务器的地址为 192.168.31.134
4 )建立以下 A 资源记录。
dns.xyz.org.  IN A 192.168.31.1
www.xyz.org. IN A 192.168.31.2
mail.xyz.org.  IN A 192.168.31.3
5 )建立以下别名 CNAME 资源记录。
bbs           IN CNAME www
6 )建立以下邮件交换器 MX 资源记录
xyz.org.      IN MX 10 mail.xyz.org.
7 )建立反向解析区域 31.168.192.in-addr.arpa ,并为以上 A 资源记录建立对应的指针 PTR 资源记录。

vim etc/named.conf
options {
        directory "/var/named" ;
        version "9.3.4";
        allow-transfer {192.168.31.132;};
};
zone "." {
        type hint;
        file "named.ca";
};
zone "xyz.org" {
        type master;
        file "xyz.org.zone";
};
zone "31.168.192.in-addr.arpa" {
        type master;
        file "192.168.31.zone";
};
 

vim var/named/xyz.org.zone
$TTL 86400
@       IN      SOA     dns.xyz.org. root (
                        2009071000
                        3H
                        1H
                        1W
                        0
)
@       IN      NS      dns
dns     IN      A       192.168.31.1
www     IN      A       192.168.31.2
mail    IN      A       192.168.31.3
bbs     IN      CNAME   www
xyz.org.        IN      MX 10   mail.xyz.org.
 
vim var/named/192.168.31.zone
@ IN SOA  31.168.192.in-addr.arpa.  root.xyz.org. (
                2009071000
                1H
                15M
                1W
                0
)
@   IN NS  dns.xyz.org.
1 IN PTR dns.xyz.org.
2 IN PTR www.xyz.org.
3 IN PTR mail.xyz.org.
 
【实例 5 】安装基于 chroot DNS 服务器,并根据以下要求配置辅助名称服务器。
1 )建立 xyz.org 从区域,设置主要名称服务器的地址为 192.168.31.134
2 )建立反向解析从区域 31.168.192.in-addr.arpa ,设置主要名称服务器的地址为 192.168.31.134

options {
        directory "/var/named";
};
zone "xyz.org" {
        type slave;
        masters { 192.168.31.134; };
        file "slaves/xyz.org.zone";
};
zone "31.168.192.in-addr.arpa" {
        type slave;
        masters { 192.168.31.134; };
        file "slaves/192.168.31.zone";
};