DNS and Bind详解

DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。

是一个域名服务,应用层协议。

原理篇

DNS组成

根域(.)

顶级域(.com, .net, .org, .gov, .edu, .mil,.ac)

二级域(baidu.com,google.com ... ...)

以前需要输入www.baidu.com. 才能解析,现在智能dns解析可以自动补上后面的那个点

dns查询

迭代查询

递归查询

如下图,从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间的交互查询就是迭代查询。

总结:

1.递归查询:
一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机;
2.迭代查询(反复查询):
一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;

所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询)”
也就是递归就是交给下一个服务器解决(下一个就相当于客户了,所以他也可以选择去递归,或者迭代)(迭代就是返回给当前的,当前自己再去处理)
  递归即递给服务器,所有操作都有服务器来完成。

举例:比如学生问老师一个问题,王老师告诉他答案这之间的叫递归查询。这期间也许王老师也不会,这时王老师问张老师,这之间的查询叫迭代查询!

DNS解析

正向解析区域和反向解析区域

正向解析是将域名映射为IP地址

www.baidu.com  --> 202.108.22.5

反向解析是将IP地址映射为域名

202.108.22.5  --> www.baidu.com

注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;

主-从DNS服务器

主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
     从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;

“复制”操作的实施方式:
     序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
     刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
     重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
     过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
     否定答案的缓存时长:
                    
    主服务器”通知“从服务器随时更新数据;
                
区域传送:
     全量传送:axfr, 传送整个数据库;
     增量传送:ixfr, 仅传送变量的数据;

区域(zone)和域(domain):
   baidu.com域:
    FQDN --> IP
      正向解析库;区域
    IP --> FQDN
      反向解析库;区域
                    
区域数据库文件:
    资源记录:Resource Record, 简称rr;
    记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
                
    SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
    NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
    A: Address, 地址记录,FQDN --> IPv4;
    AAAA:地址记录, FQDN --> IPv6;
    CNAME:Canonical Name,别名记录;
    PTR:Pointer,IP --> FQDN
    MX:Mail eXchanger,邮件交换器;
    优先级:0-99,数字越小优先级越高;
                
资源记录的定义格式:
     语法:name [TTL] IN RR_TYPE value

SOA:
  name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”;
  value:有多部分组成
     (1) 当前区域的区域名称(也可以使用主DNS服务器名称);
     (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
     (3) (主从服务协调属性的定义以及否定答案的TTL)
                        
 例如:
  baidu.com.  86400   IN    SOA   baidu.com.  admin.magedu.com.  (
           2017010801    ; serial
           2H         ; refresh
           10M         ; retry
           1W         ; expire
           1D         ; negative answer ttl
           )

NS:
   name: 当前区域的区域名称
   value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
   注意:一个区域可以有多个ns记录;
                    
例如:
   baidu.com.     86400     IN     NS      ns1.baidu.com.
   baidu.com.     86400     IN     NS      ns2.baidu.com.

MX:
   name: 当前区域的区域名称
   value:当前区域某邮件交换器的主机名;
   注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
                    
例如:
    baidu.com.  IN   MX   10   mx1.baidu.com.
    baidu.com.  IN   MX   20   mx2.baidu.com.
                    
A:
   name:某FQDN,例如www.baidu.com.
   value:某IPv4地址;
                
  例如:
    www.baidu.com.        IN     A    1.1.1.1
    www.baidu.com.        IN     A    1.1.1.2
    bbs.baidu.com.        IN     A    1.1.1.1
        
AAAA:
    name:FQDN
    value: IPv6
            
PTR:
   name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
   value:FQND
                
   例如:
    4.3.2.1.in-addr.arpa.  IN  PTR  www.baidu.com.
                    
CNAME:
   name:FQDN格式的别名;
   value:FQDN格式的正式名字;
                
  例如:
    web.baidu.com.   IN  CNAME  www.baidu.com.
                             
  注意:
    (1) TTL可以从全局继承;
    (2) @表示当前区域的名称;
    (3) 相邻的两条记录其name相同时,后面的可省略;
    (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

实战篇

首先安装bind程序包

bind:
    主配置文件:/etc/named.conf
    或包含进来其它文件;
       /etc/named.iscdlv.key
       /etc/named.rfc1912.zones
       /etc/named.root.key
   解析库文件:
      /var/named/目录下;
    一般名字为:ZONE_NAME.zone
                    
   注意:(1) 一台DNS服务器可同时为多个区域提供解析;
      (2) 必须要有根区域解析库文件: named.ca;
      (3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
         正向:named.localhost
         反向:named.loopback
                            
rndc:remote name domain contoller(远程域名控制)
    953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
                
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
     CentOS 6.x: service named start
     CentOS 7.x: systemctl start named.service
                
主配置文件格式:
    全局配置段:
       options { ... }
    日志配置段:
       logging { ... }
    区域配置段:
       zone { ... }
       那些由本机负责解析的区域,或转发的区域;
                        
     注意:每个配置语句必须以分号结尾;
                        
缓存名称服务器的配置:
    监听能与外部主机通信的地址;                    
       listen-on port 53;
       listen-on port 53 { 172.16.100.67; };
                        
     学习时,建议关闭dnssec
        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside no;    
                        
     关闭仅允许本地查询:
        //allow-query  { localhost; };
            
检查配置文件语法错误:
       named-checkconf   [/etc/named.conf]
                    
测试工具:
     dig, host, nslookup等

配置解析一个正向区域

步骤:

1、定义区域(在/etc/named.conf或/etc/named.rfc1912.zones)

2、定义数据文件(/var/named/xxx.zone)

权限及属组修改

修改该文件的权限为640,属主属组为root:named     
              检查语法错误
                 # named-checkzone  ZONE_NAME   ZONE_FILE
                 # named-checkconf

3、重载配置文件

详细

1、定义区域

zone  "baidu.com"  IN  {
         type master;
         file "baidu.com.zone";
         };                 
        注意:区域名字即为域名;

2、定义数据文件(编辑一个名为baidu.com.zone的文件与第一步的file所指的相同)

文件为:/var/named/baidu.com.zone
    $TTL 3600

baidu.com.   IN   SOA  ns1.baidu.com. dnsadmin.baidu.com. (
          2017010801
          1H
          10M
          3D
          1D )
      IN      NS      ns1
      IN      MX   10  mx1
      IN      MX   20  mx2
      ns1     IN      A     172.16.100.67
      mx1     IN      A     172.16.100.68
      mx2     IN      A     172.16.100.69
      www     IN      A     172.16.100.67
      web     IN      CNAME   www
      bbs     IN      A     172.16.100.70
      bbs     IN      A     172.16.100.71

权限及属组修改

修改该文件的权限为640,属主属组为root:named     
检查语法错误
    # named-checkconf

3、重载配置文件

rndc reload

配置反向区域

步骤:

1、定义区域(在/etc/named.conf或/etc/named.rfc1912.zones)

2、定义区域解析库文件(/var/named/xxx.zone)

3、重载配置文件

1、定义区域

zone  "100.16.172.in-addr.arpa"  IN  {
          type  master;
          file  "172.16.100.zone";
         };    
                        
       注意:反向区域的名字
       反写的网段地址.in-addr.arpa
       如:100.16.172.in-addr.arpa

2、定义区域解析库文件(主要记录为PTR)

示例,区域名称为100.16.172.in-addr.arpa;
                    
   $TTL 3600
   $ORIGIN 100.16.172.in-addr.arpa.

@   IN  SOA  ns1.baidu.com.  nsadmin.baidu.com. (
           2017010801
           1H
           10M
           3D
           12H )
         IN      NS      ns1.baidu.com.
 67      IN      PTR     ns1.baidu.com.
 68      IN      PTR     mx1.baidu.com.
 69      IN      PTR     mx2.baidu.com.
 70      IN      PTR     bbs.baidu.com.
 71      IN      PTR     bbs.baidu.com.
 67      IN      PTR     www.baidu.com.

别忘了修改权限和属主属组

检查语法错误

named-checkconf

3、重载配置文件

rndc reload

配置主从DNS服务器

步骤:

1、定义一个从区域(/var/named/slaves)

2、重载配置

1、定义区域(从区域)

zone "ZONE_NAME"  IN {
        type  slave;
        file  "slaves/ZONE_NAME.zone";
        masters  { MASTER_IP; };
        }                   
  配置文件语法检查:named-checkconf
                        
(2) 重载配置
     rndc  reload

注意:(1) 确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
                
    注意:时间要同步;
     ntpdate命令;

DNS子域授权

子域授权就相当于是划片管理,是由上至下的授权。由根开始"."。
例如:.com .net 就是由根授权名称空间,其实就是由.决定要划分什么的名称空间,由它委派子名称空间。

例:若有个baidu.com.的域名,自己想再分多点子域名,如zhangsan.baidu.com. 就需要子域授权 。这就和51cto的博客一样,我的博客地址为http://zhaoyongtao.blog.51cto.com/  这就是在blog.51cto.com.下的一个子域。

DNS中最重要的就是NS记录,其中每个NS里面的负责人就是SOA,在父域上定义一条NS记录和一条A记录就可以完成子域授权了

正向解析区域授权子域(/var/named/baidu.com.zone):
    zhangsan.baidu.com.  IN  NS  ns1.zhangsan.baidu.com.
   s1. zhangsan.baidu.com. IN  A   IP.AD.DR.ESS(子域服务器ip)

lisi.baidu.com.      IN  NS  ns1.lisi.baidu.com.

ns1.lisi.baidu.com.   IN   A   IP.AD.DR.ESS

此子域就相当于一个域了,可以再给此子域添加正向解析记录。

定义转发:
  注意:被转发的服务器必须允许为当前服务做递归;
            
(1) 区域转发:仅转发对某特定区域的解析请求;
       zone  "ZONE_NAME"  IN {
        type  forward;
        forward  {first|only};
        forwarders  { SERVER_IP; };
        };
                
        first:首先转发;转发器不响应时,自行去迭代查询;
        only:只转发;
                
(2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
        options {
            ... ...
            forward  {only|first};
            forwarders  { SERVER_IP; };
            .. ...
           };

bind中的安全相关的配置:
  acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;
        
     acl  acl_name  {
         ip;
         net/prelen;
        };
                
    示例:
      acl  mynet {
            172.16.0.0/16;
            127.0.0.0/8;
          };
                
bind有四个内置的acl
     none:没有一个主机;
     any:任意主机;
     local:本机;
     localnet:本机所在的IP所属的网络;
                
访问控制指令:
     allow-query  {};  允许查询的主机;白名单;
     allow-transfer {};  允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
     allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
     allow-update {}; DDNS,允许动态更新区域数据库文件中内容;
            
bind view:
    视图:
     view  VIEW_NAME {
          zone
          zone
          zone
        }
            
            
      view internal  {
          match-clients { 172.16.0.0/8; };
          zone "magedu.com"  IN {
          type master;
          file  "magedu.com/internal";
           };
         };
            
       view external {
          match-clients { any; };
           zone "magecdu.com" IN {
           type master;
           file magedu.com/external";
             };
          };

时间: 2024-08-28 15:01:33

DNS and Bind详解的相关文章

DNS及bind详解

三台测试服务器:mail.www.dns mail,192.168.1.29 www , 192.168.1.28 dns , 192.168.1.27 pop --> mail ftp --> www 1.安装bind yum install bind 2.把原配置文件打成bak [[email protected] ~]# mv /etc/named.conf /etc/named.conf.bak 3.重新建主配置文件named.conf [[email protected] ~]# v

Linux DNS之bind详解

BIND: Berkeley Internet Name Domain 目前由ISC进行维护.DHCP也是其维护. 安装: 注意:默认情况下,安装好BIND后,默认配置为缓存DNS,然后才配置为住DNS及从DNS服务器. 1.使用rpm包安装: 所需rpm包: bind97- libs 库文件包 utils 工具包 devel 包含头文件和库文件的开发包 chroot 将根临时切换到其他目录 caching-nameserver 通过提供配置文件,让BIND服务器成为缓存DNS服务器.新版本中已

DNS服务相关概念详解

实验环境:RHEL 32Bit DNS服务相关概念详解 DNS是一种域名解析服务,DNS服务的核心以及DNS服务的标准都是基于一个软件来实现的,这个软件叫做BIND(Berkeley Internet Name Domain),互联网上几乎所有的DNS服务都是由BIND来构建的,虽然也有其它的DNS服务构建标准,但是它们的使用语法以及工作机制都和BIND非常接近. ·Linux服务器和Windows服务器的比较 Linux服务器在没有SELinux的时候它的安全级别和Windows服务器的安全级

Linux下DNS服务器搭建详解

 Linux下DNS服务器搭建详解 DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制.其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析. 下面对DNS的工作流程及原理进行简要说明 DNS的查询流程:需要解析服务的Client先查看本机的/etc/hosts:若无结果,则client查看本地的DNS缓存服务器:若无结果,则查找所属域的首选DNS服务器:若此时本地首选DN

(转)DNS解析过程详解

DNS解析过程详解 原文:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的".",其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服务器我们知道有13台,但是这是错误的观点. 根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的

转载:DNS解析过程详解

2015-09-20 此好文是转载,如有侵权联系我,立马删掉 DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服务器我们知道有13台,但是这是错误的观点. 根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主

002.DNS解析过程详解

先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服务器我们知道有13台,但是这是错误的观点. 根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机. 具体的镜像分布可以参考维基百科.这些主机的内容都

DNS解析过程详解

先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯. 根域服务器我们知道有13台,但是这是错误的观点. 根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机. 具体的镜像分布可以参考维基百科.这些主机的内容都

外部网站DNS解析过程详解

对外部网站的DNS解析全过程图解(排除ISP缓存方面,只是原理) 如下图: 上图是自制,如有错误地方,还请评论指点,谢谢! 以下为DNS详解,转载自百度文库! 平时我们进行域名解析所用到的DNS服务器,是面对客户的一线服务器. DNS服务器是(Domain Name System或者Domain Name Service)域名系统或者域名服务,域名系统为Internet上的主机分配域名地址和IP地址. 用户使用域名地址,该系统就会自动把域名地址转为IP地址.域名服务是运行域名系统的Interne