DNS基础原理及配置详解!!!

DNS: Domain Name Service 域名服务器(应用层协议)     

DNS所监听的端口
        53/UDP,53/TCP(默认)

一般情况下仅使用UDP协议进行讯通,若网络出现连接问题会自动转为TCP协议通讯

DNS所说的“域”是逻辑概念

域名结构:
    根域:为DNS根节点服务器,用"."表示

全球有13组DNS根服务器
        
    顶级域:top level domain:(也叫一级域)
     分类:
      组织域:.com, .org, gov, .edu, mil
      国家域:.tw, .hk, .cn
      反向域:.in-addr.arpa

顶级域是由根域划分,由各种组织或商业公司代理

    二级域:
     二级域就是我们常见的网站名,例如baidu.com就是一个二级域的域名,www.baidu.com是

baidu.com这个域中的某个主机

    子域:

     子域是相对而言,对于根域来说,顶级域如.com就是跟域的子域;而对于二级域baidu.com来说

www.baidu.com是baidu.com的子域

    FQDN: Full Qualified Domain Name 完全限定名称

完全的限定名称书写为www.baidu.com. 没错,.com后面是有点的,在配置DNS的时候是必须要加

上点的,这样才是一个完整的FQDN

整个域名的的结构成为namespace:名称空间

DNS查找类型: 

 递归:recursion
     客户端对DN服务器只发起1次请求,DNS服务器响应并返回答案,称为递归

DNS服务器对客户端递归意味着,客户端对DNS服务器发起请求,若DNS服务器本地缓存有答案

则直接返答案,若没有,则需要多次查找答案,最终返回答案给客户端

    迭代:iteration
     客户端向DNS服务器请求答案,服务器没有授权回答,则指返回一个可查询的服务器IP给客户端客

户端再对这个IP发起请求,循环往复,直到得到答案,称为迭代

只对客户端迭代查询的服务器意味着,若客户端请求不属于服务器自己的解析区域,则不会为客户端

查询答案,而是为客户端返回一个可查询的服务器IP,让客户端自己去查找答案

递归和迭代可以理解为DNS服务器的两种响应方式

注意:客户端指向的DNS服务器一定是允许给本地主机做递归的,只有DNS服务器才能进行迭代,根

服务器不做任何递归性答复 (考虑到负载情况)

答复类型:

    权威回答:负责解析请求主机所在的域的DNS服务器的回答,比如查找www.johnson.com,刚好

DNS服务器就是负责解析www.johnson.com主机,返回的答案就是权威答案

 非权威回答:非负责请求的域名解析的DNS服务器从缓存中查询到返回的答案

域名解析请求答案有肯定和否定之分,避免DNS服务器做过多的不必要响应,肯定的答案和否定答案

都会缓存到本地,当对同一主机解析再次请求时,都先从缓存从查找

域名解析流程:(以www.johnson.com为例)
    1.当客户端要解析一个域名时,客户端首先分析本地hosts文件,若无对应的主机条目,就去分析

本地缓存,若没有答案,则向本地DNS服务器发起请求

    2.DNS服务器接收到请求,首先分析服务器本地的缓存,看是否存在要解析的答案,有则直接返回

没有则向根发起请求


    3.根接收到请求,但根并不负责任何递归性的回答,所以,根会返回www.johnson.com的顶级域

.com所在的主机地址给本地DNS服务器


    4.本地DNS服务收到根的指向性答复,然后去找负责.com的DNS服务器

    

    5.负责.com的DNS服务器发现johnson.com是自己的管理的区域,但自己并不负责做递归性的答复

所以返回负责解析johnson.com的DNS服务器地址给本地DNS服务器


    6.本地DNS服务器向负责解析johnson.com这个域的DNS服务器发起请求


    7.负责解析johnson.com这个二级域的DNS服务器接收到解析www.johnson.com请求后,分析自己

的区域数据库文件,发现存在www主机,给本地DNS服务器返回答案(权威答案)


    8.本地DNS服务器收到答复,将答案返回给客户端,域名解析过程完成              
        
    是不是发现解析一个主机名的过程很麻烦,所以才需要缓存这个东西,把第一次请求的答案放到缓存

中,当同一请求再次出现时,直接从缓存中返回答案,客户端和DNS服务器都可以缓存

需要注意的是,客户端是相对而言的,比如本地DNS服务器向根发起请求,那么相对于根,本地DNS

服务器就是客户端,不管请求者是客户端还是DNS服务器,只要你向我发起请求,你就是客户端



DNS域名解析方式:
    正向解析:FQDN --> IP
    反向解析:IP --> FQDN

传统意义上,正反向解析技术不同,不应该存放于同一数据库文件中,主机名的解析式依赖于

正反解析数据库文件

资源记录:Resource Record
    资源记录有类型,用于资源的功能
    SOA:Start Of  Authority, 起始授权
    NS: Name Server, 域名服务器
    MX: Mail eXchanger: 邮件服务器
    A: Address, FQDN --> IPv4
    PTR: PoiTeR, IPv4 --> FQDN
    AAAA: Address,FQDN --> IPv6
    CNAME: Canonical Name, 别名记录

DNS数据库文件(区域数据文件,区域自身有名字):只能包含资源记录或宏的定义

    资源记录格式:
     name    [ttl]   In    RRtype   Value
      name:资源名称,不同资源类型名称不同
      [ttl]: 缓存有效期,可省略,可以在宏中定义
      IN: Internet,固定格式
      RRtype: 资源类型
      value:资源对应的值

资源记录的起始行可以定义宏,如TTL,缓存有效期,这样就可在资源条目中省略不写

例子:A资源记录
      www  600     IN      A       172.16.11.1

www.johnson.com.  600     IN  A    172.16.11.1

注意:
      若给出相对路径,则会自动补全
      若给出绝对名称,后面的"."一定不能省略

    资源配置
     SOA:只能有一个
      name:为区域名称,通常可以简写为@
      value:主DNS服务器的FQDN(ns.johnsonxu.com.)

注意:SOA必须是区域数据库的第一条记录

     例:@  600  IN  SOA  ns.johnson.com.  admin.johnson.com.  (
        serial number:为数据库的版本号,十进制格式,不能超过10位
        refresh time:从服务器到主服务器的更新间隔
        retry time:更新失败重试时间,应该小于refresh time
        expire time:重试多久后,依然没有联系到主DNS,自己拒绝提供服务的时间
        netgative answer ttl ):否定答案缓存时间

 NS: 可以有多条
     name:为区域名称,通常可简写为@
     value:DNS服务器的FQDN(可以使用相对名称)

例:@     600     IN      NS      ns

相对名称:如ns,则会自动补全为ns.johnson.com.(补全的名称为区域名字)

@表示为区域名字,即johnson.com,一般域名即为区域名

    A:
     name:FQDN(可使用相对名称)
     value:IP

例:
     www     600  IN  A    172.18.17.1
     www     600  IN  A    172.18.17.2

同一主机名使用不同IP地址可作简略的负载均衡(轮询访问)

www     600  IN  A     172.18.17.1
     tp          600  IN  A     172.18.17.1

同一ip地址使用不同主机名,同一主机提供多种服务

注意:任何Value以FQDN作为其值的资记录,都应该添加一条A资源记录,以确保该资源的FQDN能

解析为IP地址

 MX: 可以有多个
     name:区域名称,用于表示smtp服务器
     value:优先级和FQDN
     优先级:0-99,数字越小,优先级越高

例:
     @   600    IN   MX  10   mail
     @   600    IN   MX  20   mail

注意:配置MX资源的时候千万不能把优先级省略,否则会报错

    CNAME:
     name: FQDN
     value:FQDN

 例:
     ftp     IN      CNAME   www
     ftp的正式名称为www,即ftp为www的别名

    PTR: IP --> FQDN
     name:IP是逆向的‘主机’地址,如172.18.17.2的name为2.17,其完全
     的书写格式为2.17.18.172.in-addr-arpa.
     value: FQDN

例:
    2.17   600    IN     PTR    www.johnson.com

需要提醒的是:PTR资源记录name为主机地址(注意区分网络地址和主机地址,IP包含两者)

若网络地址是16位,那么主机是16位,name的填写如172.18.17.2,为2.17,后面不用填写,会自动

补全,反向区域的命名为IP的网络地址,为"18.172.in-addr.arpa"

其实,若反向区域命名为"17.18.172.in-addr.arpa",则在PTR资源记录中name填写2即可,不管怎样

使用相对名称,则补全后必须是一个完整的IP,或name直接写全2.17.18.172.in-addr.arpa.

 区域和域:
     Domain:域是逻辑概念
     zone:区域是物理概念,可以说区域是域的实现,区域数据库文件定义了此域能够解析的资源条目

在一个域内的ns,正向解析文件和反向解析文件各标示为一个物理空间,称为区域

DNS服务器类型:
    主DNS服务器
    辅助DNS服务器
        
    缓存名称服务器
     不做特定的区域解析,所有请求都将转发出去,并把查询的结果缓存至本地
     若再有相同的请求,则从缓存中直接返回结果给请求者(此答案为非权威答案)



DNS协议实现:
    DNS --> BIND --> named

DNS是协议,而协议的实现靠软件,实现DNS协议的软件是BIND,BIND的进程名称为named

BING安装:

本文只是基本的DNS服务配置,只安装BIND即可

创建新的DNS主配置文件:

    1.手动创建新的named.conf文件,内容如下(在创建之前先把原文件重命名使其失效)

options {  # 全局配置,定义区域文件目录,后面file引用的路径都是相对此定义的路径
    directory "/var/named";
};

zone "." IN {         # 根区域配置
    type hint;
    file "named.ca";
};

zone "localhost." IN {        # 本地正向解析区域配置
    type master;
    file "named.localhost";
};

zone "1.0.0.172-in.addr.arpa" IN {   # 本地反向解析区域配置
    type master;
    file "named.loopback";
};

# 实际上,仅有以上区域配置,一个简单DNS服务就能运行起来了
下面是自己定义的区域配置

zone "johnson.com." IN {        # 正向解析区域配置
    type master;
    file "johnson.com.zone";
};

# 检查主配置文件的语法错误 

[[email protected] ~]# named-checkconf

# 修改主配置文件的属主和属组,并修改权限为640
[[email protected]_server ~]# chown root:named /etc/named.conf
[[email protected]_server ~]# chmod 640 /etc/named.conf

其实可以不用创建一个主配置文件,因为软件安装后就已经生成了,这里自己手动配置,只是为了对主配置文件做一个简单了解,在自己能够手动配置完并且能够把服务运行起来,相信文件配置就不是问题了,若你不想自己编辑,则直接使用原来的主配置文件即可

    2.在/var/named目录创建johnson.com.zone区域数据文件,内容如下    

$TTL 600
@       IN      SOA     ns.johnson.com.     admin.johnson.com. (
            2016140913 ;serial number
            2H ; fresh time
            20M ; retry time
            7D ; expire time
            4H ) ; netgtive time
@       IN      NS      ns
@       IN      NS      ns2
@       IN      MX  10  mail
ns      IN      A       172.18.17.16
mail    IN      A       172.18.17.3
www     IN      A       172.18.17.3
ns2     IN      A       172.18.17.2
img     IN      A       172.18.17.4
ftp     IN      CNAME   www
http    IN      CNAME   www

# 配置完成保存退出,检测语法错误
[[email protected] ~]# named-checkzone "johnson.com" /var/named/johnson.com.zone 
zone johnson.com/IN: loaded serial 2016140913
OK
# 显示OK则表示没有语法问题

# 同样需要修改文件的属主和属组及权限
[[email protected]_server ~]# chown root:named /var/named/johnson.com.zone
[[email protected]_server ~]# chmod 640 /var/named/johnson.com.zone

注意:在配置新区域文件是必须要给出从服务器的数据同步各项参数,缺一不可

    3.启动服务,使用dig工具测试

在测试之间,简单了解dig工具使用

dig [-t TYPE] NMAE [@SERVER]

-t type:指定测试类型,如 -t A,就是测试A资源类型(FQDN --> IP)

@SERVER:使用指定DNS服务器来测试,如@172.18.17.16

NAME:要测试的主机名,如www.johnson.com

# 语法检测没有问题后启动服务
[[email protected] ~]# service named start
Starting named:                       [  OK  ]

# 可以通过/var/log/message 查看日志获取服务信息
[[email protected] ~]# tail /var/log/messages
Apr  9 20:25:26 johnson-linux named[6371]: automatic empty zone: B.E.F.IP6.ARPA
Apr  9 20:25:26 johnson-linux named[6371]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
Apr  9 20:25:26 johnson-linux named[6371]: command channel listening on 127.0.0.1#953
Apr  9 20:25:26 johnson-linux named[6371]: command channel listening on ::1#953
Apr  9 20:25:27 johnson-linux named[6371]: zone 1.0.0.172-in.addr.arpa/IN: loaded serial 0
Apr  9 20:25:27 johnson-linux named[6371]: zone johnson.com/IN: loaded serial 2016140913
Apr  9 20:25:27 johnson-linux named[6371]: zone localhost/IN: loaded serial 0
Apr  9 20:25:27 johnson-linux named[6371]: managed-keys-zone ./IN: loaded serial 5
Apr  9 20:25:27 johnson-linux named[6371]: running   # 已经运行起来了
Apr  9 20:25:27 johnson-linux named[6371]: zone johnson.com/IN: sending notifies (serial 2016140913)

# 服务有任何问题,都记得要看一下日志,要养成习惯

# 测试DNS服务器是否能解析
[[email protected] ~]# dig -t A www.johnson.com @172.18.17.16

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.johnson.com @172.18.17.16
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12888
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.johnson.com.        IN    A      <--------------# 我们的请求

;; ANSWER SECTION:  # 返回的答案,主机名成功解析
www.johnson.com.    600    IN    A    172.18.17.3   <-------------

;; AUTHORITY SECTION:       # 解析此区域的dns
johnson.com.        600    IN    NS    ns.johnson.com.
johnson.com.        600    IN    NS    ns2.johnson.com.

;; ADDITIONAL SECTION:      # 附加信息,把dns服务器的地址也解析出来了
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2
# 我这里配置了主从DNS,所以又两个DNS服务器

;; Query time: 1 msec
;; SERVER: 172.18.17.16#53(172.18.17.16)
;; WHEN: Sat Apr  9 20:12:14 2016
;; MSG SIZE  rcvd: 116

提醒:dig 工具测试可以指定解析的DNS,若不指定,则使用/etc/resolv.conf中的DNS,也可手动

把配置文件的中DNS改为自己配置的DNS,这样就不必手动指定

    正向解析的配置到此就搞定了,下面来搞一下反向解析区域的配置
  
反向解析区域配置:
    1.编辑/etc/named.conf文件,添加反向解析区域,添加内容如下

# 添加区域授权
 zone "18.172.in-addr.arpa" {
    type master;
     file "172.18.zone";
 };
# 检测语法错误
[[email protected] ~]# named-checkconf
# 没有结果就是最好的结果

注意:反向解析区域名以逆向‘网络地址’.in-addr.arpa命名

2.编辑反向解析数据库文件:
     第一条应该为SOA记录
     应该具有NS记录,但不能出现MX和A记录
     较为常见的即为PTR记录
     名称为逆向‘主机’地址

# 在/var/named目录下创建反向解析区域数据库文件
$TTL 600
@       IN      SOA     ns.johnson.com.  admin.johnson.com. (
                2016040914
                2H
                20M
                7D
                3H )
        IN      NS      ns.johnson.com.
        IN      NS      ns2.johnson.com.
3.17    IN      PTR     www.johnson.com.
2.17    IN      PTR     ns2.johnson.com.
4.17    IN      PTR     img.johnson.com.

#完成保存退出,检测区域文件语法错误
[[email protected] ~]# named-checkzone "18.172.in-addr.arpa" /var/named/172.18.zone 
zone 18.172.in-addr.arpa/IN: loaded serial 2016040914
OK

# 修改文件属主属组及文件权限
[[email protected]_server ~]# chown root:named /var/named/172.18.zone
[[email protected]_server ~]# chmod 640 /var/named/172.18.zone
数据
# 没有任何语法错误,则启动重载一下服务
[[email protected] ~]# service named reload
Reloading named:                     [  OK  ]

注意:逆向解析库文件name为‘主机地址’,会自动以区域名字补全网络号
    逆向解析文件的FQDN必须给全,不能使用简写
   

    3.测试反向解析是否正常

[[email protected] ~]# dig -x 172.18.17.3 @172.18.17.2

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -x 172.18.17.3 @172.18.17.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52862
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:       # 发出的请求
;3.17.18.172.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:      # DNS服务器返回答案,反向解析成功
3.17.18.172.in-addr.arpa. 600    IN    PTR    www.johnson.com.

;; AUTHORITY SECTION:
18.172.in-addr.arpa.    600    IN    NS    ns.johnson.com.
18.172.in-addr.arpa.    600    IN    NS    ns2.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2

;; Query time: 1 msec
;; SERVER: 172.18.17.2#53(172.18.17.2)
;; WHEN: Sat Apr  9 20:57:15 2016
;; MSG SIZE  rcvd: 138

以上都是基于自己手动编辑的主配置文件进行的,可以直接使用原来的主配置文件/etc/named.conf

和区域配置文件/etc/named.rfc1912.zones,添加区域直接往里面写即可

   主配置文件:

全局配置段:
        options { ... }
    日志配置段:
        logging { ... }
    区域配置段:
        zone { ... }

    要点:

1.服务监听端口:
      listen-on port 53 { 127.0.0.1; };
      默认监听与本地的主机,若要改为监听任意主机,将配置文件中此行
      使用//注释即可,或者括号内容改为{ any; },注意前后需要有空格

2.allow-query   { localhost; }
      此项定义允许查询的主机范围,localhost为只允许本地计算机查询,若想让其他特定主机查询,{}内改为IP地址即可,若想让所有主机查询,使用//注释或 改为{ any; } 即可          
        
     3.recursion yes;
      是否允许递归,yes为允许,no为不允许



主从同步:

    为了防止一个DNS服务器出现宕机或压力过大,往往要配置多台辅助DNS服务器,此时就涉及到主从

    数据同步的问题

    

    区域传送:
     辅助DNS服务器向主DNS服务器或其他辅助DNS服务器请求数据传输的过程
     完全区域传送:传送区域的所有数据,AXFR
     增量区域传送:传送区域中改变的数据,IXFR

在设立了主从DNS服务器之后,从服务器每隔一段时间就会到主服务器上查询区域数据,看看是否发

生变化,以保证数据的准确性;当主服务器修改区域数据时,版本号发生改变,将会通知从服务器数

据发生变化,从服务器便会执行同步操作

注意:主从DNS服务器的BIND版本最好能保持一致,从服务器BIND版本不能低于主服务器,可以是

等于或大于

从DNS服务器配置:

我这里使用虚拟机实现,创建一台新的centos6.7,IP地址为172.18.17.2

named主配置文件不再手动创建,直接使用原来的,简单做一下注释

其实在配置从服务器的第一部要先向上级授权,就是.com,否则在互联网上,从DNS服务不会被找

到,但我们这里是测试,所以忽略这一步

    1.安装BIND并配置从服务器区域文件信息
      编辑/etc/named.rfc1912.zones,添加条目
                       
    正向解析区域配置

zone "johnson.com" {
        type slave;
        masters { 172.18.17.16; };
        file "slaves/johnson.com.zone";  #从服务器区域文件存放
        allow-transfer { none; };    #设置传送权限,不允许其他主机传送
};

   

    反向解析区域配置

zone "18.172.in-addr.arpa" {
        type slave;
        masters { 172.18.17.16; };
        file "slaves/18.172.zone";
         allow-transfer { none; };
};

# 配置完后,检测语法错误,无报错启动服务
[[email protected]_server ~]# service named start
Starting named:                                            [  OK  ]

注意:

1.从服务器不需要创建区域数据文件,会自动从主DNS服务器中复制,只要在添加区域是设定好

区域文件目录为/var/named/slaves/file_name.zone 即可

2.基于安全考虑,从服务器应设置为不接受任何人的转,发使用allow-transfer { IP; };,实现

区域数据安全传输控制

    2.在主DNS服务器添加从DNS服务器NS条目和A或PTR条目
                
     正向解析区域数据文件添加从服务器资源条目:
     编辑/var/named/johnson.com.zone

    IN  NS  ns2
ns2  IN  A   172.18.17.2

   反向解析区域数据文件添加从服务器资源条目:
     编辑/var/named/172.18.zone

       IN  NS  ns2.johnson.com.
2.17    IN  PTR  ns.johnson.com.

   

    若无语法错误,重载主DNS服务和从DNS的服务 

# 服务重启后,区域数据已经复制过来了
[[email protected]_server ~]# ls /var/named/slaves/
18.172.zone  johnson.com.zone

 3.测试从服务器是否能完成解析

[[email protected]_server ~]# dig -t A www.johnson.com @172.18.17.2 #指定为从DNS服务器地址

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.johnson.com @172.18.17.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61007
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.johnson.com.        IN    A

;; ANSWER SECTION:
www.johnson.com.    600    IN    A    172.18.17.3   # 成功解析

;; AUTHORITY SECTION:
johnson.com.        600    IN    NS    ns.johnson.com.
johnson.com.        600    IN    NS    ns2.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2

# 反向解析-------------------------------------------------------
[[email protected]_server ~]# dig -x 172.18.17.3 @172.18.17.2

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -x 172.18.17.3 @172.18.17.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36439
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

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

;; ANSWER SECTION:
3.17.18.172.in-addr.arpa. 600    IN    PTR    www.johnson.com.

;; AUTHORITY SECTION:
18.172.in-addr.arpa.    600    IN    NS    ns2.johnson.com.
18.172.in-addr.arpa.    600    IN    NS    ns.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        600    IN    A    172.18.17.16
ns2.johnson.com.    600    IN    A    172.18.17.2

区域增量传送就不演示了,也没办法演示实时的效果,要注意的是,在主从DNS服务配置完成之后,每次修改主DNS服务器的区域数据都要将版本号修改(大小加1即可),这样这样从服务器才会更新



子域授权:
    (1)在主DNS服务器的区域数据文件中添加以下内容:
     1.NS条目添加子域名称,如test.johnson.com
     2.子域对应的A记录

# 添加如下资源记录
test    IN      NS      ns.test      
ns.test IN      A       172.18.17.5

(2)在新的DNS服务器中添加以下内容:
     1.添加区域(以子域名称命名)
     2.创建区域数据文件

# 定义zone
[[email protected]_linux named]# vim /etc/named.rfc1912.zones
zone "test.johnson.com" IN {
        type master;
        file "test.johnson.com.zone";
};

# 创建区域数据文件
$TTL 600
@       IN      SOA     ns.test.johnson.com.    admin.test.johnson.com. (
                2016041010
                2H
                20M
                7D
                3H )
@       IN      NS      ns
ns      IN      A       172.18.17.5
www     IN      A       172.18.17.6

注意:在父域zone中添加的子域记录只是授权作用,把父域和子域联系起来,不能做解析,需要转发到子域DNS服务器才能解析

    测试是否能正常解析(父域为DNS为172.18.17.16,子域的DNS地址为172.18.17.5)

# 测试父域是否能解析子域
[[email protected] named]# dig -t NS test.johnson.com @172.18.17.16

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t NS test.johnson.com @172.18.17.16
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31281
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;test.johnson.com.        IN    NS

;; ANSWER SECTION:    # 解析成功
test.johnson.com.    600    IN    NS    ns.test.johnson.com.

;; ADDITIONAL SECTION:
ns.test.johnson.com.    600    IN    A    172.18.17.5

# 测试子域DNS是否能正常解析
[[email protected]_linux named]# dig -t A www.test.johnson.com @172.18.17.5

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.test.johnson.com @172.18.17.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5725
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.test.johnson.com.        IN    A

;; ANSWER SECTION:    #
www.test.johnson.com.    600    IN    A    172.18.17.6

;; AUTHORITY SECTION:
test.johnson.com.    600    IN    NS    ns.test.johnson.com.

;; ADDITIONAL SECTION:
ns.test.johnson.com.    600    IN    A    172.18.17.5

注意:此时子域只能解析自己服务器定义的zone的主机,无法解析父域的主机



区域转发:
    在默认情况下,任何不属于自己解析区域的主机,都将转发给根
    客户端请求的主机不属于自己解析的区域,而又不想转发给根,想直接转发给指定的能够解析此主机的DNS服务器,就需要配置区域转发

定义一个要转发的zone

如:在上面的提到子域中转发johnson.com这个域的所有主机,子域本身不能解析父域的主机

# 定义转发的zone
[[email protected]_linux named]# vim /etc/named.rfc1912.zones
zone "johnson.com" {
        type forward;
        forwarders { 172.18.17.16; };
        forward only;
};

# 重启服务后测试这时是否能解析解析父域的主机
[[email protected]_linux named]# dig -t A www.johnson.com @172.18.17.5 #本机DNS

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.johnson.com @172.18.17.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65094
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.johnson.com.        IN    A

;; ANSWER SECTION:
www.johnson.com.    595    IN    A    172.18.17.3  # 有结果,成功转发

;; AUTHORITY SECTION:
johnson.com.        595    IN    NS    ns2.johnson.com.  #答案来自于父域的DNS
johnson.com.        595    IN    NS    ns.johnson.com.

;; ADDITIONAL SECTION:
ns.johnson.com.        595    IN    A    172.18.17.16  # 父域DNS的IP
ns2.johnson.com.    595    IN    A    172.18.17.2

forward only|first
     only:代表此域仅做转发,即使转发的服务器不做回应也不再向根请求
     first:表示先做转发,若转发的服务器无响应,则自己去找根

在named.conf的options定义格式:
     forward first|only
     forward { IP; };
        
    要点:
     1.添加特定的转发区域,定义一个zone即可
     2.不属于自己解析的主机都转发到指定的DNS服务器,在named.conf的options中定义即可

安全控制选项:
    allow-transter { IP|none;};

主从传送控制,通常需要开启

一般主填写从服务器,从填写none,不允许任何人传送

allow-query{ IP; };

一般不启用此设置,此项一般仅用于缓存名称服务器,仅对本地开放

allow-recursion{ IP; };

设置允许递归的白名单,可以使用网络,如172.18.0.0/16

allow-update{};

设置是否允许动态更新区域数据文件的主机IP,此项一般为{ none;},不建议开启,安全风险很

大,动态更新一般基于DHCP服务器的动态地址分配

    ACL:访问控制列表

通常定义acl列表在主配置文件name.conf的上方(options的上方)

内置列表:
      any:任何主机
      none:无
      local:本机
      localnet:本机所在的网络

自定义:
      acl NAME {
       172.18.17.1/16
       192.168.1.19/24
        ...
       };

当需要在多个zone中的安全控制选项中定义大量的主机,为了方便修改,ACL访问控制列表就起到很好的作用,只要定义好一个主机列表,将列表名称填上即可,列表名即表示此列表中的所有主机

--END

时间: 2024-12-26 14:45:02

DNS基础原理及配置详解!!!的相关文章

Linux学习之路-DNS原理-BIND配置详解

DNS原理-BIND配置详解 DNS系统概述 DNS系统作用     a) DNS,简单地说,就是Domain Name System,翻成中文就是"域名系统".主要的功能就是将人易于记忆的Domain Name与人不容易记忆的IP Address作转换.      b) DNS提供正向解析和反向解析          正向解析:根据主机名称(域名)查找对应的IP地址.          反向解析:根据IP地址查找对应的主机域名 DNS系统结构  系统结构原理  目前DNS采用的是分布

Mysql主从数据库架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

TCP/IP协议族——ARP、DNS工作原理及实例详解

 测试网络: 通过VMware创建了两个虚拟机,并利用桥接方式联网以此模拟两台主机连接一台路由器的情况.测试网络图如下: ARP协议工作原理 ARP协议能实现任意网络地址到任意物理地址的转换,这里仅讨论IP地址到以太网地址(MAC地址)的转换.其工作原理是:主机向自己所在网络广播一个ARP请求,该请求包含目标机器的网络地址.此网络上的其他机器都将接收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址. 以太网ARP请求/应答报文 以太网ARP请求/应答报文格式如下

DNS与BIND学习笔记-基础知识及配置详解

转自 http://blog.chinaunix.net/uid-14825809-id-333591.html 标签:DNS 多线 智能 服务器 bind 一直想系统的学习和了解DNS的原理,包括看相关的rfc文件,一看和dns相关的rfc文件,妈呀,居然有86个之多.能看多少是多少吧.先把DNS的原理研究透彻了.在看rfc文件我想会事半功倍的:) 1. ICANN是干什么的?和他的一些相关资讯? ICANN全称是叫:Internet Corporation for Assigned Name

nagios原理及配置详解

1.Nagios如何监控Linux机器 NRPE总共由两部分组成:(1).check_nrpe插件,运行在监控主机上.服务器端安装详见:(2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机)客户端具体安装详见: 图1按照上图,整个的监控过程如下:当Nagios需要监控某个远程linux主机的服务或者资源情况时:1).nagios会运行check_nrpe插件,我们要在nagios配置文件中告诉它要检查什么.2).check_nrpe插件会通过SSL连接到远程的NRPE

Spring MVC原理及配置详解

Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中. Spring MVC主要由DispatcherServlet.处理器映射.处理器(控制器).视图解析器.视图组成.他的两个核心是

MySQL主从原理及配置详解

MySQL主从配置及原理,供大家参考,具体内容如下 一.环境选择: 1.Centos 6.5 2.MySQL 5.7 二.什么是MySQL主从复制 MySQL主从复制是其最重要的功能之一.主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.对于多级复制,数据库服务器即可充当主机,也可充当从机.MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新. 三.MySQL主从复制的类型

高性能Mysql主从架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

【Spring】Spring MVC原理及配置详解

1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中. Spring MVC主要由DispatcherServlet.处理器映射.处理器(控制器).视图解析器.视图组成.他的两个核心是两个核心: 处理器映射:选择使用