DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

  简介:  

    Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器有都是用Bind来架设的。

   什么是套接字:

  套接字socket,简单来说就是IP:port(IP地址端口对)。以电话系统为例,电话的通话双方相当于相互通信的两个进程,区号是它的IP地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要使用一部电话,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方的区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接收连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话相当于关闭socket,撤销连接。

  端口:

   TCP:0~65535

   UDP:0~65535

 小于1024的端口为知名端口;Linux系统中0~1023的端口只有root用户有开放关闭的权利(服务都是以root用户身份启动,之后以一个系统用户的身份运行。)

 DNS查询方式:

   迭代查询: 多次查询得出结果

   递归查询: 要求一次查询得出结果

     查询结果:

       原始服务器: 返回权威答案

           缓存: 返回非权威答案

         缓存有生存时间: 用ttl 表示

 DNS服务器的类型:

   缓存DNS服务器

   主DNS服务器(master):数据库更新由管理员手动完成

   辅助DNS服务器(slave):数据库更新从主服务器或其它辅助DNS服务器完成

 DNS解析类型:

   正向解析: FQDN-->IP   FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名

   反向解析: IP --> FQDN  #正向将FQDN解析为IP,反向将IP解析为FQDN

 资源记录类型:

   FQDN-->IPv4: A (Address)     对应IPV4叫A记录

   FQDN-->IPv6: AAAA     对应IPV6叫AAAA记录

   Domain-->DNS Server:NS (Name Server)     域名服务器

   Domain-->Master DNS: SOA (Start Of Authority)    起始授权记录,明确说明DNS主辅关系

   FQDN-->FQDN: CNAME (Canonical Name)     正式名称,别名记录

   IP-->FQDN: PTR (pointer)     指针记录,DNS刚诞生时只支持正向解析

   Domain-->Mail Server: MX (Mail eXchanger)    标识邮件交换器,有优先级:0-99

 各资源记录类型其“名称”有要求:   

   SOA: zone 必须为当前区域名称

   NS: zone 必须为当前区域名称

   A, AAAA: FQDN 名字为FQDN

   CNAME: FQDN

   PTR: ReverseIP.in-addr.arpa. 名字为反向FQDN

   MX: zone

 名称解析库: /var/named/

   文本文件(只能包含资源记录和宏定义): 每一行称作一个资源记录 

[root@master ~]# yum list bind*  #查询bind相关包
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Installed Packages
bind-libs.x86_64   32:9.8.2-0.17.rc1.el6    @anaconda-CentOS-201303020151.x86_64/6.4
bind-utils.x86_64  32:9.8.2-0.17.rc1.el6    @anaconda-CentOS-201303020151.x86_64/6.4
Available Packages
bind.x86_64  #bind主程序   32:9.8.2-0.30.rc1.el6             Master                                
bind-chroot.x86_64  #将named进程的活动范围限定在chroot目录,保证安全性 32:9.8.2-0.30.rc1.el6  Master                                 
                              
bind-devel.x86_64   #与开发相关的头文件和库文件(编译安装bind时所需)  32:9.8.2-0.30.rc1.el6  Master                              
                      
bind-libs.x86_64   #bind服务器端和客户端都使用到的公共库文件      32:9.8.2-0.30.rc1.el6  Master                                  
                             
bind-utils.x86_64   #bind客户端工具   32:9.8.2-0.30.rc1.el6       Master

[root@master ~]# yum -y install bind  #安装bind包
/etc/logrotate.d/named        
/etc/named.conf         #主配置文件
/etc/named.iscdlv.key      #bind密钥文件
/etc/named.rfc1912.zones     #区域配置文件(用include指令包含在主配置文件)
/etc/named.root.key       #根区域key文件以实现事务签名
/etc/rndc.conf          #rndc(远程名称服务器控制器)配置文件
/etc/rndc.key          #rndc加密密钥
/etc/sysconfig/named       #bind进程选项
/var/named/named.ca       #全球13个根服务器存放文件
/var/named/named.empty
/var/named/named.localhost    #本地正向解析区域文件
/var/named/named.loopback    #本地反向解析区域文件
资源记录格式:
    如:
 @     [TTL]     IN     FQDN     admin_mailbox (
              2013081201 序列号,不可超过10位 serial number    每添加一次记录需要将序列号加一
                  2H 刷新时间 refresh time 通知(notify): 只通知给本区域解析库文件中定义NS记录的所有主机
                  5M 重试时间 retry time
                  7D 过期时间 expire time
                  1D 否定答案的ttl时间
 )
              IN     NS     ns1.dove.com.
注: 当前记录跟上面记录相同,可省略 @
    名称解析库里面分号开头的为注释
      zone 可使用 @ 书写
    如名称写全名,后面必须加. 否则语法错误
      SOA 中@用来引用当前区域的区域名称
        使用@引用时,管理员邮箱不能使用@书写,而应用.
      如: @   nsadmin@dove.com   nsadmin.dove.com.

 主DNS正向解析配置过程:   

    1、编辑主配置文件,注释相关选项

[root@master named]# vim /etc/named.conf   #编辑主配置文件,使用双斜线注释如下三项
options {
//      listen-on port 53 { 127.0.0.1; };     #注释只本地监听端口
//      listen-on-v6 port 53 { ::1; };       #注释IPV6监听端口
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
//      allow-query     { localhost; };     #注释只允许本地请求

    2、编辑区域配置文件

[root@master named]# vim /etc/named.rfc1912.zones  #编辑区域配置文件
  zone "dove.com" IN {      #在末行添加区域名称
    type master;         #类型为主(master)
    file "dove.com.zone";     #指定区域文件,文件路径相对于/var/named目录
  };                 #区域中每行必须分号结尾,否则语法错误

    3、配置、检查区域文件

[root@master named]# vim dove.com.zone
$TTL    600       #定义宏以$开头
@       IN      SOA     dove.com.       admin.dove.com. (
                        2015041801
                        2H
                        5M
                        3D
                        1D )
        IN      NS      dns
        IN      MX 9    mail
dns       IN      A      192.168.8.7
mail      IN      A      192.168.8.8
www       IN      A      192.168.8.8
web       IN      CNAME    www

[root@master named]# named-checkconf      #使用命令检查配置文件正确性
[root@master named]# named-checkzone "dove.com" /var/named/dove.com.zone
zone dove.com/IN: loaded serial 2015041801  #命令格式为后面跟区域名及区域文件
OK     #OK表示检查区域文件正确

[root@master named]# chmod 640 dove.com.zone   #修改区域文件权限,其它用户无权限
[root@master named]# chown :named dove.com.zone  #修改区域文件属组为named组
[root@master named]# ll
total 32
drwxrwx---. 2 named  named  4096 Apr 18 23:37 data
-rw-r-----. 1 root  named  194 Apr 19 09:03 dove.com.zone
drwxrwx---. 2 named  named  4096 Apr 19 08:39 dynamic
-rw-r-----. 1 root  named  2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named  named  4096 Oct 15  2014 slaves
[root@master named]# ps -aux | grep named   #查看named进程默认以named用户运行
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
named  39508  0.0  2.6 388164 20212 ?     Ssl Apr18 0:02 /usr/sbin/named -u named
root   41306  2.0  0.1 103244 832 pts/0    S+ 09:15 0:00 grep named

   4、使用dig查询(DNS查找工具)

    正向查询方式:dig -t type(资源记录类型) [domain] host @server #将FQDN解析为IP

     反向查询方式:dig -x hostIP      #将IP解析为FQDN

           dig +trace        #添加+trace选项可追踪解析过程

      type类型: NS、A、MX、CNAME

[root@master named]# dig -t CNAME web.dove.com @192.168.8.7   #以CNAME记录查询

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t CNAME web.dove.com @192.168.8.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1517
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:    #表示请求问题是什么?
;web.dove.com.			IN	CNAME   #请求问题是前面FQDN的别名记录

;; ANSWER SECTION:     #表示问题回答
web.dove.com.		600	IN	CNAME   www.dove.com. #回答前面别名记录  

;; AUTHORITY SECTION:    #表示授权部分
dove.com.		600	IN	NS	dns.dove.com.  #表示此域内DNS授权server

;; ADDITIONAL SECTION:   #额外部分
dns.dove.com.		600	IN	A	192.168.8.7   #表示此授权DNS主机IP

;; Query time: 1 msec        #表示请求时间,默认为毫秒        
;; SERVER: 192.168.8.7#53(192.168.8.7) #表示响应DNS IP及端口
;; WHEN: Sun Apr 19 09:43:43 2015 #表示请求时间、日期
;; MSG SIZE  rcvd: 82        #表示发送请求大小,默认为字节

 注: @server可省略,但需修改/etc/resolv.conf指定nameserver为本DNS IP

   [root@master named]# vim /etc/resolv.conf

   # Generated by NetworkManager

   domain localdomain

   search localdomain dove.com

   nameserver 192.168.8.7    #修改nameserver为本DNS IP,将由此server负责解析


 主DNS反向解析配置过程: 

    1、编辑区域配置文件

[root@master named]# vim /etc/named.rfc1912.zones  #编辑区域配置文件
  zone "8.168.192.in-addr.arpa" IN {   #在末行添加区域名称
    type master;                       #类型为主(master)
    file "192.168.8.zone";             #指定区域文件,文件路径相对于/var/named目录
  };

  注: 反向区域名命名方式必须为本网络段地址反写,且以 .in-addr.arpa 后缀结尾

      如: 网络段 192.168.8.0   区域命名 8.168.192.in-addr.arpa

     反向区域文件命名不作硬性规定,最好与网络段地址相同以示区分,且以 .zone 后缀结尾

   2、配置、检查区域文件

[root@master named]# cp -p dove.com.zone 192.168.8.zone #直接复制正向为反向进行修改,确保属组、权限一致
[root@master named]# vim 192.168.8.zone
$TTL    600
@       IN      SOA     dove.com.       admin.dove.com. (
                        2015041801
                        2H
                        5M
                        3D
                        1D )
        IN      NS      dns.dove.com.  #反向FQDN必须写全称且后面加.
7       IN      PTR     dns.dove.com.  #反向不需要MX、CNAME记录
8       IN      PTR     mail.dove.com.  #前面数字为FQDN所对应IP,反向PTR记录只需写主机位
8       IN      PTR     www.dove.com.
 
[root@master named]# named-checkconf       #使用命令检查配置文件正确性     
[root@master named]# named-checkzone "8.168.192.in-addr.arpa" /var/named/192.168.8.zone                                                  #命令格式为后面跟区域名及区域文件
zone 8.168.192.in-addr.arpa/IN: loaded serial 2015041801 
OK     #OK表示检查区域文件正确

   3、使用dig查询

    反向查询方式:dig -x hostIP      #将IP解析为FQDN        

[root@master named]# service named reload    #重新读取named配置文件
Reloading named:                                           [  OK  ]
[root@master named]# dig -x 192.168.8.7     #查询指定IP对应的FQDN名称

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.8.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55513
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;7.8.168.192.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
7.8.168.192.in-addr.arpa. 600	IN	PTR	dns.dove.com.   #IP对应FQDN名称

;; AUTHORITY SECTION:
8.168.192.in-addr.arpa.	600	IN	NS	dns.dove.com.

;; ADDITIONAL SECTION:
dns.dove.com.		600	IN	A	192.168.8.7

;; Query time: 0 msec
;; SERVER: 192.168.8.7#53(192.168.8.7)
;; WHEN: Sun Apr 19 17:14:56 2015
;; MSG SIZE  rcvd: 98

 The End ! 至此DNS主服务器配置完成