linux 下DNS的简介及配置
我们这里是在linux redhat 5.8系统上运行的,不同版本配置可能不同,新手求指教
DNS(Domain Name System):域名系统,简称DNS,DNS就是访问Internet而采用的一种分布式的域名到IP地址映射查询和管理的方法,它主要的功能是实现主机名到IP地址的转换,即域名解析。

DNS服务的概念:可以实现主机名称,域名及IP地址的相互转换。

DNS的层次结构:DNS的分布结构是树状的分布结构,分为根域,顶级域,二级域和主机名称。在域名层次结构中,每一层称作一个域,每个域用'.'隔开。每个域可以有子域,每个域都有自己的域名,最底层的就是主机。
 根域:根域就是"."。它是由Internet名称注册机构授权管理。目前全球共有13台服务器负责维护根域。相关分布情况如下:

 

 

顶级域:根域下一级是顶级域,它有internet名字授权机构管理。顶级域分三种类型:组织域,国家或地区域,反向域(名字为.in-addr-arpa)。如下所示。


 
 二级域:二级域可供个人,公司或组织的名称注册。二级域之下可以有主机或子域。eg:rehat.com这是基于顶级域.com的一个二级域。www.magedu.com是一个主机名称。
 
 主机名称:主机名在域名层次结构中处于最底层。一般一个完全合格的域名FQDN(fully qualified domain name,最多可以有255个字节组成)是由主机名和域名(DNS后缀)组成。eg:www.magedu.com,www为主机名,magedu.com则为域名即DNS后缀。
 
DNS的查询:
DNS查询的过程是指客户端通过DNS服务器将一个IP地址转换为一个FQDN和将一个FQDN转化为一个IP地址或查询一个区域的邮件服务器的过程。

DNS的查询方式分为两类:1.递归查询(Recursive Query),一般当DNS服务器接收到查询服务请求时,做出查询成功的响应或查询失败的响应。递归查询一般发生在DNS客户端与本地DNS服务器之间。
        2.迭代查询(Iterative Query),DNS服务器根据自己的高速缓存或区域的数据,以最佳结果响应。如果DNS服务器无法解析,它可能会返回一个指针。指针指向有下级域名的DNS服务器,继续解析,知道找到拥有所查询名字的DNS服务器,或直到出错,
             、超时为止。迭代查询一般发生在DNS服务器之间。
DNS的查询内容分类可分为两类:1.正向查询(解析):由域名(FQDN)查找IP地址。
        2.反向查询(解析):由IP地址查找域名(FQDN)
       
下图是查询www.redhat.com的例子来分析DNS服务查询的基本过程:

 

1.客户端将www.redhat.com的查询提交给本地DNS服务器(这里属于递归查询)。
2.本地DNS 服务器检查区域数据库,由于此服务器没有redhat.com的授权,它将查询传递到根服务器,根服务器把“com”DNS服务器的IP地址返回给本地DNS服务器,本地DNS服务器再将查询请求递交给.comDNS服务器(这里就是迭代查询了)
3.本地DNS服务器向“redhat.com”DNS服务器发送请求,此服务器具有www.redhat.com的资源记录(下面我们会谈到什么事资源记录)。因此它将www.redhat.com的IP地址返回给本地DNS服务器。
4.最后,本地DNS服务器将www.redhat.com的IP地址发送给客户端。
这是DNS服务器查询解析的基本过程,一目了然。

DNS服务器缓存的概念:
 试想,如果有大量客户端向服务器发送同一域名的查询请求,DNS服务器将耗费大量资源和时间去为客户端解析查询,所以,为了更有效的提高客户端请求的查询速度,又减轻服务器的负担,DNS引入了缓存的概念。DNS服务器把每次查询的结果全部缓存下来,如果再次收到相同的查询请求时,就可以直接把缓存的结果返回给客户端。但是所要解析的域名信息有可能是变化的,从而我们又有了缓存有效期的概念,这将又DNS服务器自己定义缓存的有效期,
 所以DNS服务器都有自己数据库文件,每个文件定义了自己的TTL即缓存最大时长。
 
DNS服务器的数据库文件格式:
 所谓数据库文件就是为了完成客户端的请求,对请求进行解析的。所以数据库文件中只能包含两类内容:宏定义和数据库条目(区域条目)也可称为解析条目。

数据库条目中,每一条记录叫做资源记录(Resource Record,RR)
资源记录的本身是有一定格式的:
name  [ttl]  CLASS(IN)  RTYPE      RDATA
名称  ttl值  类别  资源记录类型 资源记录数据
解释:ttl:客户端获得结果后可以缓存的时长
   CLASS:类别,用于指定对应工作条目的工作范围,这个CLASS都是IN,IN:Internet addr 互联网地址
   RTYPE:资源类型,满足多种不同需求的功能
   最常用的功能:
      A:FQDN-->IP  从主机名称(FQDN)到IP地址转换的我们叫做A类型记录 A:address  这是IPv4专用的
   AAAA: FQDN-->IP(v6)
   PTR:IP-->FQDN 从IP地址到FQDN的   PTR:point 指针
   NS:用于指定当前区域DNS服务器是谁的
   CNAME:正式名称,可以理解为别名
   MX:Mail exchanger 邮件交换器,就是说你的区域内有一个邮件服务器,如果区域内有多台邮件服务器,那么就需要有优先级(0-99),数字越小,级别越高,格式: MX 10
   SOA:Start Of Authority,起始授权记录,就是定义一个区域的权威服务器是谁的,谁来负责这个区域的名称解析的以及主从服务器是如何进行同步的。所以对于任何区域文件来讲,SOA必须定义在第一条。
   SOA中RDATA的定义:
     FQDN(指定主NS的FQDN) contact(mailbox,一个邮箱联系人,不能使用@,用.代替) (
         serial number 版本号,序列号
         refresh time   刷新时间
         retry time    重试时间
         expire time    过期时长
         nagetive anawer ttl  否定回答的ttl时长)
      

    RDATA:资源记录数据
  A: IP
  AAAA: IP
  PTR:FQDN
  NS:只能是主机名,即FQDN
  CNAME:FQDN
  MX:FQDN
  
 name:
  A:FQDN
  AAAA:FQDN
  PTR:IP
  NS:zone name
  MX:zone name(不出现在反向区域中)
  CNAME:FQDN
  
在一个区域文件中定义一个资源记录:
 任何FQDN必须以"."结尾;
 记录不能换行,每一条记录必须在同一行中
 第一条记录只能是SOA(SOA可以换行)
 
宏:就是变量,我们常用的两个宏:$TTL   $ORIGIN
$TTL  86400  定义了一天
$ORIGIN nagedu.com.   定义这个区域名称的附加后缀

服务器的角色:
     在实际生产生活中,为了一个域的安全可靠性,我们为一个域提供两台以上的服务器,这两台服务器就有了主从的角色。
    主服务器:负责解析的服务器,称为master
    辅助服务器: slave
那么当Client向服务器发送请求时,两台服务器会同时响应请求,实现负载均衡。
主从服务器在任何时候都是必须完全相同的,比如说两台服务器的系统时间。
关于主从服务器的概念:如果当主服务器的数据发生改变时,数据会同步到从服务器上面去

区域类型分为三类:主区域、从区域、转发区域和根区域
   完全区域传送:eg:当我们的主服务器运行了一段时间,里面已经存储了1000个条目的时候,加入了从服务器,那么就需要完整全部的从主区域同步过来。这就是完全区域传送,称为:axfr
   增量区域传送:eg:当主从服务器数据实现同步后,主服务器的条目增加了一条,变成1001后,为了减少带宽,增加更新速度,那么只同步变化的条目即可,这就是增量区域传送,称为:ixfr
  
   转发区域:当client通过子区域查询时,子区域上没有任何对应的数据库,那么子区域就直接转发到父域上面,这种区域类型就叫做转发区域。
  
   根区域:任何一个DNS服务器解析不了时,都要转发到根区域上去,所以简洁的说,根区域就是告诉我们根服务器的位置。
 区域传送是以从的为主。从服务器是请求数据;主服务器主要是通知机制,如果有数据更新的话,会通知从服务器来获取数据
 
 
引入DNS区域概念:
  任何一个DNS服务器可以提供正向解析或者反向解析,或许两者都提供。
  正向解析:提供正向解析的叫做正向库
  反向解析:提供反向解析的叫做反向库
虽然正向库和反向库是不同的概念,但是对应于逻辑条件来讲,两者可以在同一个域中,然而对应于物理文件来讲,正向数据文件叫做正向区域,反向数据文件叫做反向区域。(区域是以文件来划分的,而域是按照逻辑概念来划分的,这就是域和区域的区别,千万不要混淆)
  域:我们用domain来表示
  区域:我们用zone来表示

引入子域的概念:
     子域:我们一般都叫做子域授权,或者委派。

区域类型是从物理文件角色来看待的,那么从服务器的角色来:
 主DNS服务器:提供主区域数据文件的服务器
 从DNS服务器:提供从区域数据文件的服务器
那么既不提供主区域数据文件又不提供从区域数据文件的服务器可以分为两类,
    缓存DNS服务器:只提供缓存数据文件的服务器,他不负责任何解析,纯碎将用户的请求发出去并缓存在本地
 转发器:内部客户端无法或者不方便访问互联网的时候,将用户的请求通过前端网关,为了方便防火墙规则定义,而特意设立的一个服务器
 
服务器软件BIND的安装及配置:
在redhat5.8的系统中,我们选择安装的是bind97版本。在安装之前要事先卸载bind的旧版本才可。(贴图)
我们需要安装的软件包有四个:bind97:服务器端软件
       bind97-libs:dns的相关库
       bind97-utlis:就是DNS相关的查询工具
       bind97-chroot:提供chroot机制的软件包,主要体现在安全方面,推荐安装,
为了提高系统的安全性,linux内核引入了chroot机制。chroot是内核中的一个系统调用,软件可以通过调用库函数chroot,来更改某个进程所见到的根目录。
创建chroot"监狱"的作用就是将进程权限限制在文件系统目录树中的某一个子树中。

BIND的配置:
bind配置
bind安装完成后,需要修改bind服务配置文件以满足使用需求。Bind全局配置文件为/etc/namd.conf,如果为使用chroot机制位于/etc/目录,如果使用chroot机制位于/var/named/chroot/etc目录下。不管有没有chroot机制,配置都是一样的
如果想使用chroot机制,bind默认的根部使用/var/named/chroot目录,可以通过修改/etc/sysconfig/named文件中的ROOTDIR参数来实现。
bind提供的工具:重要3个命令:/usr/bin/dig,host,nslookup
   命令的使用:dig  -t type 域名  @dns地址
      host  域名   dns地址
      nslookup  这里不做介绍

主配置文件格式:eg:
  options {
        directory "/var/named";
};     ####这是定义主配置文件的

zone "." IN {
        type hint;
        file "named.ca";
};

zone "localhost" IN {
        type master;
        file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "127.0.0.zone";
};

zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
};

zone "16.172.in-addr-arpa" IN {
        type master;
        file "172.16.zone";
};          ####这是几个zone区域文件的配置

主配置文件分为全局声明段和区域声明段。

区域文件:即主配置文件区域声明段所指向的配置文件,位于/var/named目录下。
格式如下:
名称   TTL    网络类型          资源记录类型      数据
NAME   TTL   CLASS     RTYPE     RDATA
其中每个个字段的作用如下:
名字字段指定资源记录引用的对象名,可以是主机名,也可以是域名。对象名可以是相对完整名称,完整名称必须以.号结束。如果几条连续的资源记录是同一个对象名,则第一条资源记录后的资源记录可以省略对象名
TTL  字段指定资源记录在存放高速缓存中的时间,单位秒。通常该字段可以省略,而使用位于文件开始处的$TTL所指定的值。
网络类型指定网络类型:可选的值包含IN,CH,HS,目前IN是最广放使用的一种也是默认的值,但推荐明确是IN

资源记录段:说明字段记录的类型

在定义资源记录时,一般SOA记录应为整个区域配置文件的第一行,NS记录第二行,其他记录可以任意安排,一条资源记录个字段之间有空格或tab分隔。
字段可以包含如下特殊字符:
;:表示注释
@:表示当前区域,这里的当前域是根据主配置文件中的zone定义区域名称
():允许数据跨行,通常用于SOA记录
*:只能使用名称字段的通配符
.:代表完整的主机名称

BIND中资源记录定义的方法如下:
1、SOA资源记录
区域名称    ttl  记录类型   SOA      主域名服务器(fqdn)   管理员邮件地址 (序列号  刷新时间  重式间隔   过期时间 TTL)
@   TTL  IN     SOA  Master_DNS_erver_FQDN ADMIN_MAILBOX (
          serial number序列号:区域复制依据
          refresh time刷新时间:辅助dns服务器请求与源服务器同步的等待时间。当刷新间隔到期时,辅助DNS服务器请求原服务器的SOA记录副本,然后辅助dns服务器将源服务器的SOA记录的序列号与本地SOA记录的序列号比较,如果不同,则辅助DNS服务器从主要dns服务器请求区域传输
          retry time重试时间:辅助dns服务器在请求失败后,等待多长时间重试。通常这个时间短于刷新时间。
          expire time过期时间:当这个时间到期时,如辅助dns'服务器还无法与原服务器进行区域传输,则辅助DNS服务器会把他的本地数据当做不可靠数据。
          nagetive anawer ttl 否定回答的ttl时长
NS 记录
区域名称     IN    NS   FQDN
A  记录
FQDN        IN    A    IP地址
CNAME:资源记录
别名         IN    CNAME 对应的A记录
MX资源记录
区域名       IN   MX   优先级(数字)  邮件服务器A记录
PTR 资源记录
IP地址      IN   PTR   FQDN

下面我们在没有网络的情况下在本机配置,假设为一台服务器。这里我们把ip设置为172.16.100.1,dns为172.16.0.1,主机名为ns.magedu.com。
eg:
bind的安装这里就不在重复了,我们直接来配置自己的主配置文件
文件位于/etc/named.conf 切换到etc目录下,配置主配置文件named.conf
vim named.conf
options {
        directory "/var/named";  ###定义bind的工作目录
};    

zone "." IN {
        type hint;
        file "named.ca";
};

zone "localhost" IN {
        type master;
        file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "127.0.0.zone";
};

zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
};

zone "16.172.in-addr-arpa" IN {
        type master;
        file "172.16.zone";
};          ####自己声明数个zone指向区域文件

区域文件位于/var/named/目录下:切换至此目录下
执行命令ls,会看到如下信息:


其中.文件即根区域文件和localhost文件我们不必更改,我们还需建立配置文件127.0.0.zone,magedu.com.zone,172.16.zone,
127.0.0.zone配置文件内容如下:

$TTL 86400   ####缓存时长我们定义为一天
@       IN      SOA     localhost.      admin.localhost. (
                        2012101801
                        1H
                        2M
                        7D
                        2D )
        IN      NS      localhost.  ###完整的域名后一定要加“.”
1       IN      PTR     localhost.
172.16.zone配置文件内容如下:
$TTL 86400
@       IN      SOA     ns.magedu.com.  admin.magedu.com. (
                        2012101801
                        2H
                        2M
                        7D
                        1D )
        IN      NS      ns.magedu.com.
        IN      NS      ns2.magedu.com.
1.100    IN      PTR     ns.magedu.com.
1.100   IN      PTR     www.magedu.com.
2.100   IN      PTR     ns2.magedu.com.
3.100   IN      PTR     mail.magedu.com.
magedu.com.zone配置文件内容如下:
$TTL 86400
$ORIGIN magedu.com.  ####定义变量,会自动补全文件中为写完整的域名
@               IN      SOA     ns.magedu.com.  admin.megedu.com. (
                                2012101801
                                1H
                                4M
                                7D
                                1D )
                IN      NS      ns
                IN      NS      ns2
                IN      MX 10   mail
ns              IN      A       172.16.100.1
ns2             IN      A       172.16.100.2
mail            IN      A       172.16.100.3
www             IN      A       172.16.100.1
ftp             IN      CNAME   www        ####我们定义一个别名

这里我们的都是假设情况下,若是网络情况下每个ip都会有相应的主机的。

配置好文件后,一定要把主配置文件和区域配置文件的访问权限改为640,属组改为named

执行命令:chmod 640 /etc/named.conf  /var/named/127.0.0.zone  /var/named/172.16.zone

/var/named/magedu.com /var/named/localhost.zone

 

BIND为我们提供了两个命令工具:named-checkconf:跟上主配置文件名,检查主配置文件语法是否正确
         named-checkzone:跟上区域名和配置文件名,检查区域配置文件语法是否正确
完成配置后我们先检查各个配置文件的语法是否正确。
键入命令:named-checkconf  /etc/named.conf

没有任何信息出现就是最好的信息,主配置文件语法无错
    named-checkzone "0.0.127.in-addr.arpa" 127.0.0.zone

OK,区域配置文件也已OK
    剩下的就不再演示了

重启named服务:service named restart
   
好了,所有配置都完成了。来测试下dns配置是否正确
键入命令:host ns.magedu.com 172.16.0.1


 这样,简单的DNS配置就完成了。

 

 

 

 

 

chown :named /etc/named.conf /var/named/127.0.0.zone /var/named/172.16.zone

/var/named/magedu.com /var/named/localhost.zone