DNS:全称(Domain Name Server) 域名服务器。是基于UDP 的53号端口来提供服务端的,也可以通过tcp的53号端口来提供服务。主要作用是用来名称解析的。主机名和ip地址进行转换。

解析类型:

FQDN-->IP  正向解析

IP-->FQDN 反向解析

 FQDN:是指完整意义上的主机名。

正向解析:
       正向库
       正向数据文件:区域zone

反向解析:
        反向库
        反向数据文件:区域zone

正向和反向解析是2种不同的解析方式,相互之间没有关系。

DNS解析流程:
客户端发送请求:缓存-->hosts-->dns
服务器解析:

1.如果查询请求是本机所负责区域中的数据的话,要通过查询区域数据文件返回结果。
2.如果查询请求不是本机所负责的区域中的数据的话,就查询缓存。
3.如果缓存中没有答案,则向根发起查询请求。
 

查询分类:

递归查询:只发出一次请求,就得到结果

迭代查询:发送多次请求,才能得到结果

 DNS区域类型:

 master 主
 slave 从
 hint  根
 forword 转发

服务器角色:
 主DNS 服务器
 辅助DNS 服务器
 缓存DNS服务器
 转发服务器

DNS数据库文件的格式:宏定义(类似于变量),数据库条目

每个条目叫做资源记录:resource record  ,RR

资源记录格式:

NAME    [TTL]      CLASS(IN)     RTYPE     TDATA

 名称       TTL值          类别              资源记录类型   资源记录数据

name 指资源记录引用的对象名,可以是主机也可以是域名

ttl是值客户端获得结果后可以缓存的时长:

class用于指定对应条目的工作范围一般都是IN,internet

rtype资源类型有:

        NS-----指定当前区域的DNS服务器是谁

        CNAME-----别名记录,正式名称

MX ----MX记录定义何种机器来为域或单个主机传送电子邮件,为域定义就是告诉每个人将邮件发送给该域中要与之通信的人或机器 (不出现在反向解析记录中)

SOA-----Start Of Authority 指明其后的域名定义了主域名服务器及该域的联系点的电子邮件地址。

PTR---将IP地址映射为主机名,PTR记录执行与A及记录相反的过程

A----将主机名映射为其IP地址

定义一个资源记录的条件:
    FQDN必须以点结尾
    记录不能换行
    第一个记录只能是SOA,可以换行

各类型在文件中的格式:

SOA:
区域名称  记录类型  SOA  主域名服务器  管理员邮件地址  (序列号 刷新间隔 重试间隔 过期间隔 否定回答的时间)

序列号:最多为十位,一般用时间+版本号
刷新时间:指辅助服务器请求主服务器同步的等待时间
重试时间:辅助服务器在请求失败后等待多长时间重试
过期时间:当这个时间到期后,辅助服务器还无法于主服务器进行区域传输,则辅助服务器会把它的本地数据当作不可靠数据

NS:NS后面一定有要跟上一个A记录
区域名称  TTL  IN  NS  FQDN
MX:只出现在正向查找区域文件中,后面也要跟上一个A记录
区域名  TTL  IN  MX  优先级(0-99)  邮件服务器的A记录

CNAME:
别名  TTL  IN  CNAME  对应A记录

A:
FQDN  TTL  IN  A  IP地址

PTR:
IP地址  TTL  IN  PTR  FQDN

以Bind 例子来实现DNS的讲解:

bind的三个主要的rpm包:
bind97
bind97-utils  用到的工具组件程序
bind97-libs   bind库

utiles生成的:bind的三个客户端工具
/usr/bin/dig:
/usr/bin/host
/usr/bin/nslookup

dig:交互式发起DNS查询整段DNS状况的工具
host、nslookup:支持DNS查询以及分析DNS执行结果

例:

dig -t A www1.example.com @192.168.0.254 
eg:向DNS服务器查询www的A记录(IP地址的结果)
有一项是flags: qr aa rd   其中的aa代表的是权威答案

dig -x 192.168.0.101 @192.168.0.254
查询地址192.168.0.101的主机名是什么

dig -t NS example.com(域名) @192.168.0.254 
查询域名服务器对应的ip地址是什么
对应A记录也会显示的

dig -t SOA/MX example.com(域名) @192.168.0.254  查询soa记录
查询soa记录显示的是它的格式
mx:邮件交换器的主机名

host的使用:
sever不用加@ 跟ip地址就可以
如果在/etc/resolve.conf 定义好了服务器地址,它会默认在指定的服务器中进行查询
host -t A/NS/MX/PTR www.example.comor  host -t A/NS/MX/PTR www.example.com  192.168.0.254

  nslookup还有子命令
  server :指定用哪个服务器进行ip地址查询
  set  :可以设定很多额外的参数
  type :指定资源记录类型 

在windows中nslookup也可以使用

 

服务器端工具:
  /etc/named.conf 主配置文件
 /etc/rndc.conf
 
rndc 远程名称服务控制器(安全性要求很重要)
remote name domain controller
 默认只工作在tcp/127.0.0.1的953端口

rndc 的 选项:
  reload 重新载入配置文件和区域文件
 stop 停止服务
 flush 清空缓存
 reconfig 重新载入主配置文件和发生过更新的区域文件
 reload zone 重新载入某区域文件
 status 显示当前服务状态

DNS:一个FQDN可以对应多个IP,能够实现负载均衡的结果,轮询类负载均衡 

bind的可执行程序:/usr/sbin/named(实现名称解析的协议)(权限是640 属主:root 属组:named)
/usr/sbin/named-checkconf 检测主配置文件中的语法错误
/usr/sbin/named-checkzone 检测区域文件中的语法错误

DNS、bind 、named三者的关系:

DNS 是协议,为这个协议的实现是bind,bind提供的进程是named

主配置文件的格式: /etc/named.conf 2段
  全局选项段:

options {                                         //options 用于指定BIND服务参数 
     directory "";                             //指定其工作目录};

区域声明段:

zone "ZONE-NAME" IN {                                        //定义bind的区域 
     type ;                                                                        //定义类型
     file "";                                                                  //指定区域配置文件名,相对路径}

当前区域的名称:可以使用@引用 
任何主机名都要给他一个A记录

反向区域的区域名称的定义:PTR记录的NAME是IP 剩下的部分(主机地址)要反过来写

例:构建一个dns服务器(以下实例基于Red Hat Enterprise Linux Server release 5.8版本)

编辑全局配置文件:

/etc/named.conf
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";
 };

语法格式:每一行都以分号结尾,分号前不能有空格,花括号中间有内容,花括号前后一定要有空格

编辑对应的解析文件:

/var/named/localhost.zone
$TTL 86400
 @       IN      SOA     localhost.      admin.localhost. (
                         2012101801
                         1H  
                         5M  
                         7D  
                         1D) 
 @       IN      NS      localhost.
 localhost.      IN      A       127.0.0.1   
 /var/named/127.0.0.zone
$TTL 86400 
 @               IN      SOA             localhost.      admin.localhost.        ( 2012101801
                 1H  
                 2M  
                 7D  
                 1D) 
 @               IN      NS              localhost.
 @               IN      PTR             localhost. 
 /usr/sbin/named-checkconf 检测主配置文件中的语法错误
 /usr/sbin/named-checkzone 检测区域文件中的语法错误

做好后,可以利用上两个命令来检测下有没有语法错误,然后将解析文件的权限改为640,属主是root,属组是named即可。。


转载于:https://blog.51cto.com/90112526/1031043