DNS基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS基础相关的知识,希望对你有一定的参考价值。

DNS:地址解析服务应用层协议

udp 53 : 主从同步和查询(现在大部分使用53/udp

tcp 53: 主从同步

953 端口为rndc的管理端口


本地解析文件

本地名称解析配置文件:hosts

Linux  :  /etc/hosts

windows :  C:\Windows\System32\drivers\etc\hosts


关于缓存

LINUX客户端无缓存

服务端清空缓存 :rndc flush

WINDOWS客户端

ipconfig/displaydns 查看缓存

ipconfig/flushdns 清空缓存 

-------------------------------------------------


DNS查询类型:

        递归查询:发出一次请求就能得到最终结果的查询

        迭代查询:服务器在发出请求后,有可能得到参考答案,也有可能得到最终答案,通常得到一个最终答案需要发送多次请求,任何主机都不支持迭代查询,所以需要通过dns,帮助主机去查询。
名称服务器:城内负责解析城内的名称的主机;

        根服务器:13组服务器

解析类型:


Name  ----> IP  (正向)

IP  ---->  Name (反向)

注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;


 /etc/resolv.conf    #DNS客户机配置文件

用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序

[[email protected] ~]# cat /etc/resolv.conf  //查看该文件中的内容
# Generated by NetworkManager
nameserver 8.8.8.8      //google服务器
nameserver 8.8.4.4      //google备用服务器

resolv.conf关键字

nameserver    //定义DNS服务器的IP地址
domain       //定义本地域名
search        //定义域名的搜索列表
sortlist        //对返回的域名进行排序

示例:

domain  qq.com       //定义本地域名
search  www.qq.com  qq.c器的IP地址
nameserver 172.18.22.111     //定义DNS服务器的IP地址

DNS查询类型:

        递归查询:发出一次请求就能得到最终结果的查询

        迭代查询:服务器在发出请求后,有可能得到参考答案,也有可能得到最终答案,通常得到一个最终答案需要发送多次请求,任何主机都不支持迭代查询,所以需要通过dns,帮助主机去查询。
名称服务器:城内负责解析城内的名称的主机;

        根服务器:13组服务器

解析类型:

Name  ----> IP  (正向)

IP  ---->  Name (反向)

注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;


DNS服务器类型

DNS查询类型:递归查询和迭代查询

主DNS服务器:管理和维护所负责解析的域内解析库的服务器,主要用于管理

从DNS服务器:从主服务器或从服务器上复制,他是以主DNS的SOA记录中的序列号来判断是否更新记录

缓存DNS服务器(转发器,不做任何解析,只是帮助客户端去根服务器上问地址,并且缓存)

转发DNS服务器


主DNS服务器:管理和维护所负责解析的域内解析库的服务器 ;解析库由管理维护;

从DNS服务器:从主服务器或其他的从服务器哪里“复制”(区域传输)解析 库副本;

序列号:解析库版本号,前提: 主服务器解析库变化时,其序列递增;

刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔;

重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔;

过期时长:从服务器联系不到主服务器时,多久后停止服务;

        

         “通知”机制:主服务器解析库发生变化时,会主动通知从服务器;

区域传输:

完全传输:传送整个解析库

增量传输:传递解析库变化的那部分内容

  DNS:

Domain: 

正向:FQDN --> IP(域名--->IP地址)

反向: IP --> FQDN

        各需要一个解析库来分别负责本地域名的正向和反向解析

正向区域

反向区域

FQDN: Fully Qualified Domain Name(完全合格域名或完全限制域名)

             例如:www.baidu.com.   或www.qq.com.


一次完整的查询请求经过的流程: 

Client -->hosts文件 -->DNS Service   (递归)

                Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名...---vvvv

    解析答案:

    肯定答案:{    权威答案:区域负责人的答案

    {    非权威答案

    否定答案:请求的条目不存在等原因导致无法返回结果;


区域解析库:由众多RR组成:

资源记录:Resource Record, RR

记录类型:A(IPv4 -->域名,正向解析), AAAA(IPv6), PTR(反向解析), SOA(定义域是由谁负责的), NS(定义解析域的DNS服务器), CNAME(别名), MX(邮件服务)


SOA:Start Of Authority,起始授权记录;一个区域解析库有 且仅能有一个SOA记录,必须位于解析库的第一条记录 

 A:internet Address,作用,FQDN(域名) --> IP (正向解析)

AAAA: FQDN --> IPv6

PTR: PoinTeR(指针),IP --> FQDN  (反向解析)

NS: Name Server,专用于标明当前区域的DNS服务器

CNAME:Canonical Name,别名记录

MX: Mail eXchanger,邮件交换器


资源记录定义的格式:

语法:name [TTL] IN rr_type value

注意:

(1) TTL可从全局继承

(2) @可用于引用当前区域的名字

(3) 同一个名字可以通过多条记录定义多个不同的值;此时 DNS服务器会以轮询方式响应 

(4) 同一个值也可能有多个不同的定义名字;通过多个不同的 名字指向同一个值进行定义;此仅表示通过多个不同的名字 可以找到同一个主机

SOA记录

name: 当前区域的名字,例如“magedu.com.”

 value: 有多部分组成

(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;

(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com

(3) 主从服务区域传输相关定义以及否定的答案的统一的TTL


例如:

 

magedu.com.     86400     IN     SOA     ns.qq.com.    nsadmin.qq.com. (
                                        2018042201             ;序列号
                                        2H                     ;新时间
                                        10M                    ;重试时间
                                        1W                     ;过期时间
                                        1D                     ;否定答案的TTL值
                                        )


NS记录

name: 当前区域的名字

value: 当前区域的某DNS服务器的名字,例如  ns.qq.com. 

                    注意:一个区域可以有多个NS记录

例如:

#S记录
qq.com.     IN     NS     ns1.qq.com. 
qq.com.     IN     NS     ns2.qq.com.    
#记录
(mx1.qq.com.             IN         A         3.3.3.3 )
(mx2.qq.com.             IN         A         4.4.4.4 )


注意:

(1) 相邻的两个资源记录的name相同时,后续的可省略

(2) 对NS记录而言,任何一个ns记录后面的服务器名字 ,都应该在后续有一个A记录

MX记录

 name: 当前区域的名字

 value: 当前区域的某邮件服务器(smtp服务器)的主机名

 一个区域内,MX记录可有多个;但每个记录的value之前应 该有一个数字(0-99),表示此服务器的优先级;数字越小优 先级越高 

         例如:

#MX记录
qq.com.     IN     MX     10     mx1.qq.com. 
qq.com.     IN     MX     20     mx2.qq.com.
#A记录
(mx1.qq.com.             IN         A         3.3.3.3 )
(mx2.qq.com.             IN         A         4.4.4.4 )


  注意:

(1) 对MX记录而言,任何一个MX记录后面的服务器名字 ,都应该在后续有一个A记录

A记录

name: 某主机的FQDN,例如www.qq.com.

value: 主机名对应主机的IP地址

例如:

#记录  ---"名字可以通过多条记录定义多个不同的值;此时 DNS服务器会以轮询方式响应 "www.qq.com.             IN         A         1.1.1.1 #一个域名有多个dns主机,两个dns服务器轮询解析。www.magedu.com.             IN         A         2.2.2.2#录  ---"一个值也可能有多个不同的定义名字;通过多个不同的 名字指向同一个值进行定义;此仅表示通过多个不同的名字 可以找到同一个主机"mx1.magedu.com.             IN         A         3.3.3.3mx2.magedu.com.             IN         A         4.4.4.4注意:#A记录 ---  "免用户写错名称时给错误答案,可通过泛域名解析进行解 析至某特定地址"$GENERATE 1-254 HOST$        A    1.2.3.$  #定义“$”为变量,变量值为1-254,代表 HOST1对应4.5.6.1 - HOST100对应的 4.5.6.100$GENERATE 1-100 server$      A    4.5.6.$  #定义“$”为变量,变量值为1-100,代表server1对应 4.5.6.1-server100对应的 4.5.6.100*.magedu.com.               IN         A         5.5.5.5  #加“*”为泛域名解析magedu.com.                 IN         A         6.6.6.6


 其它记录

 AAAA:(用法与A相同)

name: FQDN

value: IPv6

PTR:

name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa. 

value: FQDN

例如:

#PTR记录(反向解析)
4.3.2.1.in-addr.arpa.     IN     PTR     www.qq.com. 
    "如1.2.3为网络地址,可简写成:"    
4                         IN     PTR     www.magedu.com.



注意:网络地址及后缀可省略;主机地址依然需要反着写


CNAME:---  别名记录

name: 别名的FQDN

value: 真正名字的FQDN

 例如:(别名----->真名

#CNAME记录
www.baidu.com.      IN     CNAME     www.a.shifen.com.
"别名"                 IN     CNAME        "真名"
#A记录
(www.shifen.com.    IN         A       6.6.6.6)


子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进 行授权

类似根域授权tld:"
# NS记录
.com.             IN         NS         ns1.com.
.com.             IN         NS         ns2.com.
# A记录
ns1.com.          IN         A          2.2.2.1
ns2.com.          IN         A          2.2.2.2
"magedu.com. 在.com的名称服务器上,解析库中添加资源记录" 
# NS记录
qq.com.       IN        NS         ns1.qq.com. #指明名称服务器
qq.com.       IN        NS         ns2.qq.com.
qq.com.       IN        NS         ns3.qq.com.
# A记录
ns1.qq.com.   IN        A         3.3.3.1  #给名称服务器地址
ns2.qq.com.   IN        A         3.3.3.2
ns3.qq.com.   IN        A         3.3.3.3
"glue record:粘合记录,父域授权子域的记录 (用于将上级服务器和下级服务器建立起来关联关系,由上级服务器把对某个子域的解析能力,授予给域内的某个服务器即名称服务器,并指明服务器IP地址)

BIND的安装配置

dns服务程序包:bind,unbound(两个软件)

程序名:named,unbound

程序包:yum list all bind*

bind:服务器

bind-libs:相关库

bind-utils:客户端(测试工具)

bind-chroot: /var/named/chroot/  伪跟、监狱(早期不建议安装)

bind服务器

服务脚本和名称:/etc/rc.d/init.d/named

/usr/lib/systemd/system/named.service

主配置文件:/etc/named.conf, /etc/named.rfc1912.zones,(rfc:请求注解文档)   /etc/rndc.key (辅助配置文档,前提使用rpm包安装)

解析库文件:/var/named/ZONE_NAME.ZONE

区域配置文件:/etc/named.rfc1912.zones,

脚本配置文件:/etc/sysconfig/name

日志文件:var/log/name.log

根目录:cd /var/named/

存储13跟服务器地址:  /var/named/named.ca

提供本地回环地址解析文件 /var/named/named.localhost    和  /var/named/named.loopback



注意:

(1) 一台物理服务器可同时为多个区域提供解析

(2) 必须要有根区域文件;/etc/named.ca

(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost(本地主机) 和本地回环地址的解析库 

 rndc :  (remote name domain controller,)远程管理工具,默认与bind安装在同一主机,且只能通过127.0.0.1连接 named进程 : 提供辅助性的管理功能;rndc也是一个服务、也需要监听在套接字上,默认使用 953/tcp 端口,“/etc/rndc.key ”就是rndc 连接ndmed 时的共享密钥(域共享密钥)。


配置文件

 主配置文件: "/etc/named.conf"   和  "/etc/named.rfc1912.zones"

全局配置:options {}; 

日志子系统配置:logging {};

区域定义:本机能够为哪些zone进行解析,就要定义哪 些zone

                        zone "ZONE_NAME" IN {};

        注意:任何服务程序如果期望其能够通过网络被其它主机访 问,至少应该监听在一个能与外部主机通信的IP地址上 。


"区域类型"

"主master"

"从slave"

"跟hint"

"转发 forward"


"监听端口类型:"


# localhost(本机所有地址)

# any(所有)

# none (什么也没有)

# localnet 相同子网


主配置文件语法检查:(检查/named.conf和named.rfc1912.zones文件的语法错误)

~]#  named-checkcof

 解析库文件语法检查: ("域名" 文件

 ~]#  named-checkzone "magedu.com" /var/named/magedu.com.zone



更改完配置文件,从读配置文件

~]#  rndc status | reload ;

~]#  service named reload ;从新载读配置文件,不需要重启,(能使用此命令,就不要从起服务)

~]#  rndc reload #重新读取配置文件,有时候会无效,需要重新启动服务

~]#  rndc flush #清除DNS缓存


主配置文件 :/etc/named.conf 文件,设置一些全局变量

                           " 使用"//" 或"/*    */" 表示注释"
1、先对要操作的配置文件进行备份
7 ~]# cp  /etc/named.conf{,.bak}
2、编辑配置文件 /etc/named.conf
[[email protected] ~]# vim /etc/named.conf
options {
      listen-on port 53 { 172.18.6.77 ; 127.0.0.1; }; "---> 监听端口类型"
/* 
1)、使用"//" 或"/*    */"注释掉,或删除
2)、添加监听的外部地址, "外部地址 ; 回环口地址 "
3)、更改监听端口类型:"localhost(本机所有地址)、 any(所有)、none (什么也没有)、 localnet 相同子网"
        示例:   listen-on port 53 { localhost; }; 
*/
//   listen-on-v6 port 53 { ::1; };  #“//”表示注视掉ipv6回环扣地址,删除也可以,默认模式为:any
     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     { any; };  "---> 允许谁来查询,访问 "
1)、使用"//" 或"/*    */"注释掉,或删除
2)、监听端口类型:"localhost(本机所有地址)、 any(所有)、none (什么也没有)、 localnet 相同子网"
    allow-transfer {地址;}; //安全加固,允许谁从我这复制区域数据, (辅助DNS)
          recursion yes;   //是否开启转发功能,允许递归查询 yes (若DNS服务器上没有查询记录,则去根服务器上查询‘迭代’)
//#dnssec: 建议测试时关闭dnssec;设为no
//       dnssec-enable no ;      是否开启安全认证 ,建议no 或注释掉
//       dnssec-validation no ;  是否开启安全认证 ,建议no 或注释掉
    
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};  #全局配置:options {};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};   #日志子系统配置:logging {};

zone "." IN {          #域名 "."
    type hint;
    file "named.ca";    #域名解析zone文件
}; #区域定义 :zone {};

示例:创建qq.com域
zone "qq.com" IN {          #创建新的域,域名 "magedu.com"
    type hint;
    file "qq.com.zone";    #域名qq.com 的解析zone拓展配置文件
}; #区域定义 :zone {}

include "/etc/named.rfc1912.zones";    #指定拓展的区域数据库文件,zones主配置文件
include "/etc/named.root.key";

zone扩展配置文件,“/var/named/” 目录下

 #在该文件中所有空格和@都表示该域的域名,所以若是写全称则需要在后面加上.表示结束,若不加,则自动补齐域名,该文件的格式是 name [TTL] IN 类型 value其中TTL和IN可以省略
 
$TTL 1D(全局的TTL时间,表示该DNS会在windows电脑和linux服务器等接受端保存多久)
$ORIGIN magedu.com. #  加个宏(默认补齐)
(引用当前域名)    (固定关键字)  (SOA类型)(表示主DNS的FQDN,配合A记录能解析即可,)(管理员邮箱,其中不可以使用@,所以只能使用.)
                                            
@                   IN             SOA           ds1                 rname.invalid.
                                                                     (
                                        2018042021       ; serial  (序列号,主要作用是标识主服务器的数据库文件发生变化,数字递增,若不变,辅助DNS不会更新数据库文件)
                                        1D      ; refresh   #每隔多久推送数据库文件
                                        1H      ; retry     #发生错误多少时间重试
                                        1W      ; expire    #多长时间后过期
                                        0 )     ; minimum   #错误记录缓存多少时间

配置主DNS服务器(正向)

主DNSserver负责的域,解析不到就会发起迭代查询,

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
"主从结构图"                                                                               
master(主)      push(主,更新推送)           slave(从)                                 
l- - - - l      - - - - > - - - - - >     l- - - - l                                                  
l        l                                l        l     DNS解析请求    l- -l
l- - - - l      <- - - - - - <- - - -     l- - - - l    < - - - <- -   l- -l
ns1.server        pull(从,周期性下载)     ns2.server                 客户端(pc)
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
"DNS解析结构图"
www.magedu.com(wed)         DNS.server(主)
l- - - - l                    l- - - - l         DNS解析请求                
l        l                    l        l        < - - - <- -           l- -l
l- - - - l                    l- - - - l        - - > - - ->           l- -l
ns1.server                    ns1.server         DNS解析结果           客户端(pc)
   ^^^                                                                   vvv
  -    -    -    -    -    -    -    -    -    -    -    -    -    -    -    -  
                      收到DNS解析结果,有了地址再去访问wed服务
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =


1) 在主配置文件中定义区域

~]# vim /etc/named.conf  #修改以下部分即可
options {
        listen-on port 53 { localhost; } #监听端口类型
        ...                      
        allow-query     { any; }; #允许所有人访问
        recursion yes;    #默认开启转发功能,如果仅提供内网服务,关闭即可“no”,我们这里开启否则不能实现迭代查询。
        allow-transfer {172.16.100.12;}; #安全加固,允许谁从我这复制区域数据,允许辅助DNS
};
~]# vim /etc/named.conf  文件 或 "/etc/named.rfc1912.zones" 文件 (操作文档前做好备份,建议在后者操作)
格式:
zone "ZONE_NAME" IN {
    type { master; }; 
    file "ZONE_NAME.zone";
};
区域类型:
主master
从slave
跟hint
转发 forward
 ~]# cp /etc/named.rfc1912.zones{,.bak}   #操作文档前做好备份
 -----------------------------
 ~]# vim /etc/named.rfc1912.zones 
zone "qq.com" IN {  #域名
        type master;   #类型,主人
        file "qq.com.zone";  # 区域拓展数据库名字
};
----------------------------------
主配置文件语法检查:(检查/named.conf和named.rfc1912.zones文件的语法错误)
~]#  named-checkco


(2) 定义区域解析库文件

出现的内容

宏定义

资源记录

~]#  cp -p  /var/named/named.loopback  /var/named/qq.com.zone  #复制模板文件进行操作,-p 保留原文件权限,和所属组。
 如果没有加 -p 执行下面两条命令
~]# chmod 640 qq.com.zone
~]# chown :named  qq.com.zone
-rw-r----- 1 root  named 152 Jun 21  2007 magedu.com
 ------------------------------------------
 ~]# vim  /var/named/qq.com.zone
$TTL 86400  
$ORIGIN qq.com.
@       IN       SOA    ns1.qq.com.  admin.qq.com (
(magedu.com.zone)                                        1       ; serial  (序列号,主要作用是标识主服务器的数据库文件发生变化,数字递增,若不变,辅助DNS不会更新数据库文件)
                                        1D      ; refresh   #每隔多久推送数据库文件
                                        1H      ; retry     #发生错误多少时间重试
                                        1W      ; expire    #多长时间后过期
                                        0 )     ; minimum   #错误记录缓存多少时间
        IN      NS              ns1
        IN      NS              ns2
        IN      MX      10      mx1
        IN      MX      20      mx2
ns1     IN      A               172.16.100.11
ns2     IN      A               172.16.100.12
mx1     IN      A               172.16.100.13
mx2     IN      A               172.16.100.14
www     IN      CNAME           websr
websrv  IN      A               172.16.100.11
websrv  IN      A               172.16.100.12
---------------------------------------------------
 解析库文件语法检查: ("域名" 文件)
~]#  named-checkzone "qq.com" /var/named/qq.com.zone
 从新加载配置文件“systemctl reload  named ”命令也可以,建议使用“rndc reload ”
~]#  rndc reload  
本机测试 IP地址 “127.0.0.1 ” 
~]#  dig  www.qq.com   @172.16.100.11 #默认查询A记录
~]#  dig  -t NS  www.qq.com   @172.16.100.11 #指定查询NS记录
~]#  dig  -t NS  .  @172.16.100.11 #查询跟的NS记录
~]#  dig  +teace  www.qq.com  #跟踪解析过程
~]#  dig  -t mx  qq.com #查询谁是qq.com 域的邮件服务器
==========================
反向查询,通过IP查域名
 ~]#  dig  -t prt  11.100.16.172.in-addr.arpa   @172.16.100.11 #反向解析域名的
 ~]#  dig  -x  172.16.100.11   @172.16.100.11 #反向解析域名的
==========================
客户端,更改DNSserv指向,网卡配置文件更改
 ~]# dig +bufsize=1200 +norce @a.root-servers.net 命令执行的结果就是/var/named/named/ca



反向区域

区域名称:网络地址反写.in-addr.arpa.

172.16.100. --> 100.16.172.in-addr.arpa.

 (1) 在主配置文件中定义区域

~]# vim /etc/named.conf 
文件配置与正向解析相同,
 -----------------------------
 ~]# vim /etc/named.rfc1912.zones 
 zone "100.16.172.in-addr.arpa." IN { #域名
    type master;                     #类型,主
    file "100.16.172.in-addr.arpa.zone";  # 区域拓展数据库名字
};
----------------------------------
主配置文件语法检查:(检查/named.conf和named.rfc1912.zones文件的语法错误)
~]#  named-checkco


 (2) 定义区域解析库文件

注意:不需要MX,以PTR记录为主

~]#  cp -p  /var/named/named.loopback  /var/named/100.16.172.in-addr.arpa.zone  #复制模板文件进行操作,-p 保留原文件权限,和所属组。
 如果没有加 -p 执行下面两条命令
~]# chmod 640 qq.com.zone
~]# chown :named  qq.com.zone
-rw-r----- 1 root  named 152 Jun 21  2007 qq.com
 ------------------------------------------
 ~]# vim  /var/named/100.16.172.in-addr.arpa.zone
$TTL 86400
$ORIGIN 100.16.172.in-addr.arpa.
@       IN      SOA     ns1.qq.com. admin.qq.com. (
                                2018042201      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS          ns1.qq.com.  #注意域名结尾加“.”否则会加上区域后缀,
        IN      NS          ns2.qq.com.  #就会变成:ns1.magedu.com.100.16.172.in-addr.arpa.
11      IN      PTR         ns1.qq.com.
11      IN      PTR         www.qq.com.
12      IN      PTR         mx1.qq.com.
12      IN      PTR         www.qq.com.
13      IN      PTR         mx2.qq.com.
---------------------------------------------------
 解析库文件语法检查: ("域名" 文件)
 ~]#  named-checkzone "100.16.172.in-addr.arpa." /var/named/100.16.172.in-addr.arpa.zone
 反向查询,通过IP查域名
 ~]#  dig  -t prt  11.100.16.172.in-addr.arpa   @172.16.100.11 #反向解析域名的
 ~]#  dig  -x  172.16.100.11   @172.16.100.11 #反向解析域名的


从服务器(辅助DNS)

辅助DNS还可以在配置子辅助DNS,但是一般不这么用,

1、应该为一台独立的名称服务器

2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器  

3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于" /var/named/slaves/ "目录中 

4、主服务器得允许从服务器作区域传送

5、主从服务器时间应该同步,可通过ntp进行;

6、bind程序的版本应该保持一致;否则,应该从高,主低 (centos6.9从和7.4主,可以兼容)

定义从区域的方法:

zone "ZONE_NAME" IN {

type slave;

masters { MASTER_IP; };

file "slaves/ZONE_NAME.zone";

};

主DNS配置: 
~]# vim /etc/named.conf #
options {
    allow-transfer {172.16.100.12;}; #安全加固,允许谁从我这复制区域数据,
};#如果不配置,则可以使用,“dig -f axfr  qq.com @172.16.100.11  ”将主DNS上对应的解析域的解析库文件信息挡下来,

~]# vim  /var/named/qq.com.zone (区域解析库文件中必须有一条NS记录指向从服务器  )
@       IN      NS              ns2
ns2     IN      A               172.16.100.12
辅助上的配置:
~]# vim /etc/named.conf #修改以下部分即可
options {
        listen-on port 53 { localhost; } #监听端口类型
        ...
        allow-query { any; }; #允许任何人访问
        allow-transfer {none ;}; #安全加固,允许谁从我这复制区域数据,已经是辅助DNS了所以关闭此功能,谁都不允许。
};
~]# vim /etc/named.rfc1912.zones
zone "qq.com" IN {   #创建区域
type slave;                        #类型奴隶
masters {  172.16.100.11; };   #主的IP地址
file "slaves/qq.com.slave.zone";    #zone拓展配置文件
};
 ~]# rmdc reload  #从读配置文件

子域

子域授权:分布式数据库

正向解析区域子域方法

 定义一个子区域:

情况一,在在总部主DNS上进行授权,分部(天津)不搭建DNS服务器,

方式一:当做记录来写(容错性不高 )

 ~]# vim  /var/named/qq.com.zone #主DNS只需要在“qq.com.zone”父域中添加一条记录即可,
 
www.tj    IN      A               172.16.100.125   #分部天津的wed服务器地址,当做记录来写
mail.tj   IN      A               172.16.100.126   #分部天津的邮件服务器地址

                方式二:在创建一个新的域,(容错性提高,分离出来的一个域,不受父域影响)

/etc/named.conf  #主配置文件同上主DNS配置,
 ~]# vim /etc/named.rfc1912.zones 
zone "tj.qq.com" IN {  #子域名
        type master;   #类型,主人
        file "tj.qq.com.zone";  # 子区域拓展数据库名字
};
 ~]# vim  /var/named/tj.qq.com.zone"
$TTL 86400
$ORIGIN tj.qq.com.zone.
@       IN      SOA     ns1.     admin.qq.com. (
                                2018042201      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@                           IN     NS    ns1
ns1.                        IN     A     172.16.100.14
www                         IN     A     websrv
websrv                    IN     A     172.16.100.123

情况二:总部业务量大,分部(天津)业务量也大,对应的父域,和子域访问量都很大,一台服务器压力太大,建议吧子域剥离出去,

分部建一台单独的DNS服务器,把子域,迁移过去。

注意:父域和子域不再同一DNS服务器上时,父域把子域的DNS管理权委派给另外 一台DNS服务器(子域服务器),委派概念。
            父域和子域再同一DNS服务器上时,就不需要委派了。
总部DNSserver配置 :
 ~]# vim  /var/named/qq.com.zone #主DNS只需要在“qq.com.zone”父域中添加一条委派记录
 
tj        IN      NS               ns4.qq.com            #父域把子域的DNS管理权委派给ns4.qq.com,DNS服务器(子域服务器)
                                                             #“ns4.qq.com”这个名无所谓,只是通过这个名字找到子域服务器IP地址的。
ns4       IN      A                172.16.100.14             #子域的DNSserver IP地址

          分部DNSserver配置:

/etc/named.conf  #主配置文件同上主DNS配置,
 ~]# vim /etc/named.rfc1912.zones    #创建子域
zone "tj.magedu.com" IN {  #子域名
        type master;   #类型,主人
        file "tj.qq.com.zone";  # 子区域拓展数据库名字
};
 ~]# vim  /var/named/tj.qq.com.zone"
$TTL 86400
$ORIGIN tj.qq.com.zone.
@       IN      SOA     ns1.     admin.qq.com. (
                                2018042201      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@                           IN     NS    ns1
ns1.                        IN     A     172.16.100.14
www                         IN     A     websrv
websrv                    IN     A     172.16.100.123

注意:关闭dnssec功能:

 

 ~]# vim /etc/named.conf
 dnssec-enable no;
 dnssec-validation no;

实例1.模拟实现根环境,其中最后一级与配置主从DNS


技术分享图片


统一配置部分:   

centos7最小化安装,需要的命令补齐包
yum search bash   
yum install bash-completion -y 
更改主机名
hostnamectl set-hostname dns1
设置网卡
[[email protected] ~]# nmcli connection modify System\ ens33 ipv4.method manual ipv4.addresses 192.168.117.141/24
[[email protected] ~]# systemctl restart network
安装包
 ~]#  yum install -y bind  #安装bind服务包
 ~]#  yum install bind-utils.x86_64  -y   #安装bind客户端包(工具包)
删除包
 ~]# yum remove bind
服务
~]# systemctl restart named.service
~]# systemctl status named.service 
主配置文件
 ~]# vim /etc/named.conf 
配置文件
 ~]# vim /etc/named.rfc1912.zones 
拓展zone配置文件 
 ~]#  /var/named/zone_name.zone
 ~]#  vim/var/named/named.ca #将该文件中的真正的根服务器IP地址更改为自己设定的"."(根)的地址,删除多余的项
~]# for n in {0..4} ;do scp -rp /var/named/named.ca [email protected]$n:/var/named/named.ca; done #将修改好的配置文件发送给其他主机
~]# vim /etc/named.conf    #除了客户端都需要此操作
 options {
 //      listen-on port 53 { 127.0.0.1; }; #注释
     listen-on-v6 port 53 { ::1; };
     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; };   #注释
 dnssec-enable no;   #改为no
 dnssec-validation no;  #改为no
 };

      根服务器配置

~]# vim /etc/named.conf
 options {
      listen-on port 53 {  localhost; };  #监听端口类型 或注释
//    listen-on-v6 port 53 { ::1; };
      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; };   #允许本地所有地址访问 或注释
 dnssec-enable yes;   
 dnssec-validation yes;  
 
~]# vim /etc/named.rfc1912.zones 
zone "." IN {      
        type master;
        file "root.zone";
};      #创建新的"."域

/*  将原有的"."域注释掉
zone "." IN {
        type master;
        file "root.zone";
};
*/ 
~]# 
~]# cp -p /var/named/named.localhost /var/named/root.zone  #复制模版文件
~]# vim /var/named/root.zone      #编辑zone文件
$TTL 1D
@       IN SOA  dns1 rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        0 )     ; minimum
@       NS      dns1      
com     NS      dns2     #委派com 域至ns2  DNSserver
dns1    A       192.168.117.11
dns2    A       192.168.117.12    # ns2 IP地址

[[email protected] named]# systemctl restart named
[[email protected] named]# systemctl enable named

        com服务器

 options {
      listen-on port 53 {  localhost; };  #监听端口类型 或注释
//      listen-on-v6 port 53 { ::1; };
      allow-query     { localhost; };   #允许本地所有地址访问 或注释
 dnssec-enable no;   #改为no
 dnssec-validation no;  #改为no
};

[[email protected] named]# vim /etc/named.rfc1912.zones
zone "com" IN {
        type master;
        file "com.zone";
};  #创建"com"域 

~]# cp -p /var/named/named.localhost /var/named/com.zone  #复制模版文件
[[email protected] named]# vim /var/named/com.zone
$TTL 1D
@       IN SOA  dns1 rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
           NS      dns1
qq      NS      dns2    #委派qq.com 域至ns2  DNSserver主
qq      NS      dns3    #委派qq.com 域至ns3  DNSserver从
dns1    A       192.168.117.12
dns2    A       192.168.117.13 # ns2 IP地址主
dns3    A       192.168.117.14 # ns3 IP地址从
www      A       20.20.20.20

[[email protected] named]# systemctl restart named
[[email protected] named]# systemctl enable named

        qq.com主服务器

~]# vim /etc/named.conf
 options {
      listen-on port 53 {  localhost; };  #监听端口类型 或注释
//    listen-on-v6 port 53 { ::1; };
      allow-query     { localhost; };   #允许本地所有地址访问 或注释
      allow-transfer {192.168.117.14;}; #安全加固,允许谁从我这复制区域数据,允许辅助DNS
 dnssec-enable no;   #改为no
 dnssec-validation no;  #改为no
};
[[email protected] named]# vim /etc/named.rfc1912.zones 
zone "qq.com" IN {
        type master;
        file "qq.com.zone";
};

[[email protected] named]# cp -p /var/named/named.localhost /var/named/qq.com.zone
[[email protected] named]# vim /var/named/qq.com.zone 
$TTL 1D
@       IN SOA  ds1 rname.invalid. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        0 )     ; minimum
@       NS      ds1
@       NS      ds2
ds1     A       192.168.117.13
ds2     A       192.168.117.14
www     A       3.3.3.3
ftp     A       1.1.1.1

[[email protected] named]# systemctl restart named
[[email protected] named]# systemctl enable named

qq.com从(辅助)服务器

~]# vim /etc/named.conf
 options {
      listen-on port 53 {  localhost; };  #监听端口类型 或注释
//      listen-on-v6 port 53 { ::1; };     
      allow-query     { localhost; };   #允许本地所有地址访问 或注释
      allow-transfer {none;};  #安全加固,允许谁从我这复制区域数据,已是辅助DNS,所以关闭。
 dnssec-enable no;   #改为no
 dnssec-validation no;  #改为no
};
~]# 
~]# cp -p /var/named/named.localhost /var/named/root.zone  #复制模版文件
~]# vim /var/named/root.zone      #编辑zone文件
[[email protected] named]# vim /etc/named.rfc1912.zones
zone "qq.com" IN  {
    type slave;  #
    masters {192.168.117.13;};
    file "slaves/qq.com.slave.zone";
};
[[email protected] named]# systemctl restart named
[[email protected] named]# systemctl enable named

本地缓存DNS配置

~]# vim /etc/named.conf
 options {
      listen-on port 53 {  localhost; };  #监听端口类型
//    listen-on-v6 port 53 { ::1; };
      allow-query     { localhost; };   #允许本地所有地址访问
 dnssec-enable no;   #改为no
 dnssec-validation no;  #改为no
};


客户端测试

dig www.qq.com @192.168.117.10

简单实验:DNS视图--view       (CDN)

1、创建ACL权限,并在view引用acl
~]# vim /etc/named.conf
acl beijingnet  {
        192.168.117.0/24;
};
acl tianjinnet {
        172.18.0.0/16;
};
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        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     { any;localhost;};



view  bjview { #创建视图bjview:
        match-clients {beijingnet;};  引用acl,beijingnet
        include "/etc/named.rfc1912.zones.bj";
};

view  tjview {
        match-clients {tianjinnet;};
        include "/etc/named.rfc1912.zones.tj";
};




2、备份原文件,并复制zone配置文件,为每一个view 创建自己的含zone配置文件,注意权限和所属组

[[email protected] ~]# ll /etc/ |grep named.rf
-rw-r-----   1 root named    1047 Apr 21 08:11 named.rfc1912.zones.bak #备份原文件
-rw-r-----   1 root named    1064 Apr 21 08:22 named.rfc1912.zones.bj  
-rw-r-----   1 root named    1064 Apr 21 08:22 named.rfc1912.zones.tj


3、在view 的zone配置文件中 中创建根域,并创建测试域
 ~]# vim /etc/named.rfc1912.zones.bj
zone "." IN {
        type hint;
        file "named.ca";
};

zone "magedu.com" IN {
        type master;
        file "magedu.com.zone.bj";
        };


4、同上,在view 的zone配置文件中 中创建根域,并创建测试域
 ~]# vim /etc/named.rfc1912.zones.tj
zone "." IN {
        type hint;
        file "named.ca";
};

zone "magedu.com" IN {
        type master;
        file "magedu.com.zone.tj";
        };

5、创建域的zone文件,注意权限和所属组

 ~]# ll /var/named/
-rw-r----- 1 root  named  178 Apr 21 08:38 magedu.com.zone.bj
-rw-r----- 1 root  named  170 Apr 21 08:26 magedu.com.zone.tj

6、配置zone文件
 ~]# vim /var/named/magedu.com.zone.bj
$TTL 1D
@       IN SOA  ns2 rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      ns1
ns1     A       192.168.117.142
www     A       192.168.117.188

7、配置zone文件
~]# vim /var/named/magedu.com.zone.tj
$TTL 1D
@       IN SOA  ns2 rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      ns2
ns2     A       172.18.6.6
www     A       172.18.6.123
~                              

8、客户端测试:
dig  www.magedu.com @172.18.252.102
dig  www.magedu.com @192.168.117.142

以上是关于DNS基础的主要内容,如果未能解决你的问题,请参考以下文章

C#基础系列07 --你值得拥有-- 自动化批量DNS名称解析测试

201555332盛照宗—网络对抗实验1—逆向与bof基础

VsCode 代码片段-提升研发效率

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

DNS原理与BIND基础

JSP基础