博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DNS基础原理及配置详解
阅读量:3703 次
发布时间:2019-05-21

本文共 17443 字,大约阅读时间需要 58 分钟。

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文件,内容如下(在创建之前先把原文件重命名使其失效)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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"
;
};
 
# 检查主配置文件的语法错误 
 
[root@johnson-linux ~]
# named-checkconf
 
# 修改主配置文件的属主和属组,并修改权限为640
[root@johnson_server ~]
# chown root:named /etc/named.conf
[root@johnson_server ~]
# chmod 640 /etc/named.conf

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$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
 
# 配置完成保存退出,检测语法错误
[root@johnson-linux ~]
# named-checkzone "johnson.com" /var/named/johnson.com.zone 
zone johnson.com
/IN
: loaded serial 2016140913
OK
# 显示OK则表示没有语法问题
 
# 同样需要修改文件的属主和属组及权限
[root@johnson_server ~]
# chown root:named /var/named/johnson.com.zone
[root@johnson_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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 语法检测没有问题后启动服务
[root@johnson-linux ~]
# service named start
Starting named:                       [  OK  ]
 
# 可以通过/var/log/message 查看日志获取服务信息
[root@johnson-linux ~]
# 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服务器是否能解析
[root@johnson-linux ~]
# 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文件,添加反向解析区域,添加内容如下

1
2
3
4
5
6
7
8
# 添加区域授权
 
zone 
"18.172.in-addr.arpa" 
{
    
type 
master;
     
file 
"172.18.zone"
;
 
};
# 检测语法错误
[root@johnson-linux ~]
# named-checkconf
# 没有结果就是最好的结果

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 在/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.
 
#完成保存退出,检测区域文件语法错误
[root@johnson-linux ~]
# named-checkzone "18.172.in-addr.arpa" /var/named/172.18.zone 
zone 18.172.
in
-addr.arpa
/IN
: loaded serial 2016040914
OK
 
# 修改文件属主属组及文件权限
[root@johnson_server ~]
# chown root:named /var/named/172.18.zone
[root@johnson_server ~]
# chmod 640 /var/named/172.18.zone
数据
# 没有任何语法错误,则启动重载一下服务
[root@johnson-linux ~]
# service named reload
Reloading named:                     [  OK  ]

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@johnson-linux ~]
# 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,添加条目
                       
    正向解析区域配置

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

     

    反向解析区域配置        

1
2
3
4
5
6
7
8
9
10
zone 
"18.172.in-addr.arpa" 
{
        
type 
slave;
        
masters { 172.18.17.16; };
        
file 
"slaves/18.172.zone"
;
         
allow-transfer { none; };
};
 
# 配置完后,检测语法错误,无报错启动服务
[root@johnson_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

1
2
    
IN  NS  ns2
ns2  IN  A   172.18.17.2

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

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

   

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

1
2
3
# 服务重启后,区域数据已经复制过来了
[root@johnson_server ~]
# ls /var/named/slaves/
18.172.zone  johnson.com.zone

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@johnson_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
 
 
# 反向解析-------------------------------------------------------
[root@johnson_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记录

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

   

    (2)在新的DNS服务器中添加以下内容:

     1.添加区域(以子域名称命名)
     2.创建区域数据文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 定义zone
[root@johnson_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)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 测试父域是否能解析子域
[root@johnson-linux 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是否能正常解析
[root@johnson_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这个域的所有主机,子域本身不能解析父域的主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 定义转发的zone
[root@johnson_linux named]
# vim /etc/named.rfc1912.zones
zone 
"johnson.com" 
{
        
type 
forward;
        
forwarders { 172.18.17.16; };
        
forward only;
};
 
# 重启服务后测试这时是否能解析解析父域的主机
[root@johnson_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
       

转载地址:http://ptyjn.baihongyu.com/

你可能感兴趣的文章
JAVA基本容器总结(学习笔记)
查看>>
IDEA导入jar架包
查看>>
Eclipse 导入jar方式
查看>>
datawhale数据分析task1(1)使用pandas读取数据并统计论文数据
查看>>
异常检测常用方法及库2021-01-14
查看>>
异常检测——基于统计学方法(参数方法、非参数方法、HBOS、pyod库)
查看>>
使用pandas读取数据并统计论文数据(2)2021-01-17
查看>>
论文作者统计(pandas字符串操作)
查看>>
datawhale异常检测——线性方法探究
查看>>
数据分析任务3:论文代码统计
查看>>
tensoflow入门实操计算机视觉介绍
查看>>
论文分析Task4——论文种类分类(待补充)
查看>>
异常检测Task05:高维异常
查看>>
数据分析任务五——作者信息关联
查看>>
DataWhale集成学习Task2--掌握基本的回归模型
查看>>
Datawhale task3 优化基础模型“方差与偏差部分”
查看>>
Datawhale集成Task5——掌握基本的回归模型
查看>>
评估模型的性能并调参
查看>>
集成学习上——统计学习建模流程
查看>>
集成学习之投票法
查看>>