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域名,还包含了主机的域名搜索顺序


[root@markpain ~]# 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.com     //定义域名的搜索列表
nameserver 172.18.22.222     //定义DNS服务器的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.magedu.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.magedu.com.    nsadmin.magedu.com. ( 
 
                                       2018042201             ;序列号
                                       2H                     ;新时间
                                       10M                    ;重试时间
                                       1W                     ;过期时间
                                       1D                     ;否定答案的TTL值
                                       )

NS记录

name: 当前区域的名字

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

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

例如:

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


注意:

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

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

MX记录

 name: 当前区域的名字

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

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

         例如:

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


  注意:

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

A记录

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

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

例如:

#记录  
---"名字可以通过多条记录定义多个不同的值;此时 DNS服务器会以轮询方式响应 "
www.magedu.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.3
mx2.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.magedu.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记录
magedu.com.       IN        NS         ns1.magedu.com. #指明名称服务器
magedu.com.       IN        NS         ns2.magedu.com.
magedu.com.       IN        NS         ns3.magedu.com.
# A记录
ns1.magedu.com.   IN        A         3.3.3.1  #给名称服务器地址
ns2.magedu.com.   IN        A         3.3.3.2
ns3.magedu.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缓存


配置主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 "magedu.com" IN {  #域名
        type master;   #类型,主人
        file "magedu.com.zone";  # 区域拓展数据库名字
};
----------------------------------
主配置文件语法检查:(检查/named.conf和named.rfc1912.zones文件的语法错误)
~]#  named-checkco


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

出现的内容

宏定义

资源记录

~]#  cp -p  /var/named/named.loopback  /var/named/magedu.com.zone  #复制模板文件进行操作,-p 保留原文件权限,和所属组。
 如果没有加 -p 执行下面两条命令
~]# chmod 640 magedu.com.zone
~]# chown :named  magedu.com.zone
-rw-r----- 1 root  named 152 Jun 21  2007 magedu.com
 ------------------------------------------
 ~]# vim  /var/named/magedu.com.zone
$TTL 86400  
$ORIGIN magedu.com.
@       IN       SOA    ns1.magedu.com.  admin.magedu.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 "magedu.com" /var/named/magedu.com.zone
 从新加载配置文件“systemctl reload  named ”命令也可以,建议使用“rndc reload ”
~]#  rndc reload  
本机测试 IP地址 “127.0.0.1 ”
~]#  dig  www.magedu.com   @172.16.100.11 #默认查询A记录
~]#  dig  -t NS  www.magedu.com   @172.16.100.11 #指定查询NS记录
~]#  dig  -t NS  .  @172.16.100.11 #查询跟的NS记录
~]#  dig  +teace  www.magedu.com  #跟踪解析过程
~]#  dig  -t mx  magedu.com #查询谁是magedu.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 magedu.com.zone
~]# chown :named  magedu.com.zone
-rw-r----- 1 root  named 152 Jun 21  2007 magedu.com
 ------------------------------------------
 ~]# vim  /var/named/100.16.172.in-addr.arpa.zone
$TTL 86400
$ORIGIN 100.16.172.in-addr.arpa.
@       IN      SOA     ns1.magedu.com. admin.magedu.com. (
                                2018042201      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS          ns1.magedu.com.  #注意域名结尾加“.”否则会加上区域后缀,
        IN      NS          ns2.magedu.com.  #就会变成:ns1.magedu.com.100.16.172.in-addr.arpa.
11      IN      PTR         ns1.magedu.com.
11      IN      PTR         www.magedu.com.
12      IN      PTR         mx1.magedu.com.
12      IN      PTR         www.magedu.com.
13      IN      PTR         mx2.magedu.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 #反向解析域名的
 

猜你喜欢

转载自blog.51cto.com/12105235/2106418
今日推荐