dns详解(一)-阿里云开发者社区

开发者社区> 开发与运维> 正文

dns详解(一)

简介:
1
2
3
4
5
6
一:DNS(Domain Name Service),协议
二:DNS服务相关概念
三:DNS的实现方式
四:主配置文件格式
五:测试工具
六:配置正向区域

       

一:DNS(Domain Name Service),协议
    C/S
        53/{tcp,udp}:默认使用该协议通信
                    :主要是用udp实现解析
        
    www.mt.com:FQDN(full qualified domain) //主机名
    f2326589c2c6110fe3b43d54ffa73505.png    早期通过hosts文件进行标识
    解析过程:hosts--->本地缓存-->DNS:/etc/resolv.conf

    根域名:.
    顶级域名:top level domain:tld //
        组织域:.com,.net,.org,.gov,.edu,.mil
        国家域:.lq,.tw,.hk,.ip,.cn,...
    
    父域知道子域,但是子域不知道父域
    
    查询完后:缓存到本地,下一次的话就直接使用缓存
        缓存也有TTL,用来保证有效 //TTL倒计时,到时清除
    
    
    思想:分层而治,划片[区]而管
    
    www.baidu.com. //最后一个 . 是可以不带的,但是是存在的
    
    DNS查询过程:两段
        1:到自己所指向的DNS服务器 //递归
        2:本地DNS在网上查找的过程 //迭代
        
        递归:弟弟我帮你
        迭代:自己去吧
    
    DNS查询类型:
        递归查询;
        迭代查询
    
    DNS名称解析方式://两个不同的数据库
        名称--->IP:正向
        IP-->名称:反向
        //早期智能正向解析,而不能反向解析
        //反向:另外一个树
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
                    [.]
                   /
                []    //in-addr.arpa.
               /
             /
           [1]    
          /  |
        [1]  [2]
                 \
                  [3]
                    \
                      [4]
    1.2.3.4===4.3.2.1.in-addr.arpa
    反向:IP地址表示的过程也是从下往上走:
        表示的时候是:1.2.3.4
        查找过程:
            第一阶段:本地dns-->.
            第二阶段:in-addr.arpa-->1-->2-->3
    正向:也是从下往上查找的    
        表示的时候是:www.baidu.com
        查找过程:
            第一阶段: 本地DNS--->.
            第二阶段:.-->.com-->.baidu--->www
    注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库
        
dns相关网站
    万网//https://wanwang.aliyun.com/domain/ 
    godaddy    //https://sg.godaddy.com/zh/
    
    
二:DNS服务相关概念
1.主-辅DNS
    辅:在主dns挂了的时候,及时顶上去
        :在忙的时候,也可以做负载均衡
        :只能辅到主dns去更新,复制
        :新加入的条目,只能通过主DNS

    主DNS:维护所负责解析的域数据库的服务器;读写操作都可进行
    从DNS:从主DNS或其他从DNS服务器那里“复制”一份解析库;但只能进行读操作
        “复制”操作的实施方式:
            序列号:serial,也即是数据库的版本号;主dns数据库内容发生变化时,其版本号递增
            刷新时间间隔:refresh,从s每多久到主s检查序列号更新状况
            重试时间间隔:retry,小于refresh//否则刷新时间已经改变,从s请求主解析库失败时,再次发起请求的时间间隔
            过期时长:expire,从s多久之后放弃从主s同步数据;停止提供服务;
                //因为他没有权限,进行写,所以他也就不再提供服务了
                //需要手动配置为从为主NS
            否定答案的缓存时长:我没有知道,多长时间内你不要问我
        主s“通知“从s随时更新数据://从s定期间隔来复制,主s更新主动推送
            pull:拉取,拉过来 //从s定期从主s pull数据
            push:推送
        
    区域传送:
        全量传送:axfr传送整个解析库 //一般第一次的时候
        增量传送:ixfr仅传送变化的数据
    区域(zone)域(domain)
        mt.com是一个域
            FQDN-->IP
                正向解析库://也成为一个区域:正向解析区域
            IP-->FQDN
                反向解析库://反向解析区域
        一个域内有:正向解析区域和反向解析区域
        一个域内:正向或者反向//又负责n个域的解析
        区域是物理概念:例如一个正向或者反向的解析库文件
        域是逻辑概念:.com,.cn等
        //因此这两个是无所谓谁大谁小的
    
    子域需要得到父域的授权
    
    每一个DNS只知道自己的负责的DNS子域,而不知道父域是谁
        因此每次查找,可能都需要到根查找    
    如果A请求NS1,单NS1不负责该域,NS1会直接查找根,而根是在配置文件中有直接定义的
        全球的根节点服务器:13个,10:Usa,1:japan,1瑞士,1:英国
            A-M标识,中国2014新增:L:
            l.gtld-servers.net //中国的,位于北京
    把DNS封了的话,国内的访问国内的网站都将失效
        安全:dns缓存毒化,主机名和dns对应到其他ip
        现在有:DNSsec //dns数据上上进行签名     
        
2.区域数据库文件:
    资源记录:Resouce 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,数字越小,优先级越高
        资源记录类型还有很多种,这只是其中几种而已

3.资源记录的定义格式:
    语法:name   [TTL]   IN   RR_TYPE   value 
    资源记录类型:SOA,NS,MX,A,AAAA,CANME,PTR
    区域传送:AXRF,IXFR
    资源记录定义的格式:
        name  [ttl]  IN RR_TYPE  value 

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

1
2
3
4
5
6
7
8
9
10
        magedu.com.  86400 IN  SOA  mt.com. admin.mt.com.  (
                                2017010801;serial 是为以内
                                2H ;refresh time刷新时间
                                10min; retry
                                1W;expire
                                1D;否定答案的TTL值
                                )
        SOA:6+5=11
        NS:5
        MX:6

        例如:NS
            name:当前区域的名称
            value:当前区域的某DNS服务器的名字,例如ns.mt.com.
            
            mt.com.    86400 IN NS ns1.mt.com.
        例如:MX
            name:当前区域的区域名称
            value:当前区域某邮件交换服务器的主机名
                注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级
            mt.com.      86400   IN   MX 10   mx1.mt.com.       
            mt.com.      86400   IN   MX 9    mx2.mt.com.
        例如:A
            name:某FQDN,例如www.mt.com.
            value:某v4地址
            例如:
            
            www.mt.com.     IN  A 1.1.1.1 
            www.mt.com.     IN  A 1.1.1.2
            bbs.mt.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:FQDN
            
            4.3.2.1.in-addr.arpa.    IN   PTR  www.mt.com.
        例如CNAME:
            name:别名FQDN
            value:FQDN格式的正式名字
            
            web.mt.com.    IN  CNAME  www.mt.com.
            
    注意:
        1.TTl可以从全局集成
        2.@表示当前区域的名称
        3.相邻的两个记录,其name相同时,后面的可以省略
            www.mt.com.     IN  A 1.1.1.1 
            www.mt.com.     IN  A 1.1.1.2    
            可以
            www.mt.com.     IN  A 1.1.1.1 
                            IN  A 1.1.1.2    
            //后一个不写
        4.MX,NS等类型的记录其value为一个FQDN,此FQDN应该有一个A记录
        
4.缓存DNS
    缓存DNS server:自己不负责任何域,只负责帮人查找解析
    DNS服务器类型:
        不负责解析域:
            缓存DNS //接受所有DNS查询,进行递归解析
        负责解析至少一个域:
            主DNS
            辅助DNS //备份以及负载均衡

缓存DNS
    一个DNS服务器可以不包含任何域的配置信息,它将接收到的所有DNS查询进行递归解析,
    将解析的结果返回给我们的查询客户端,并且将查询结果缓存下来,
    这样的服务器就称之为Caching DNS Server

三:DNS的实现方式
DNS的开源实现:
    dnsmasp //提供dhcp和bind
    bind //这里重点讲bind
1.DNS and Bind
    BIND的安装配置:
        BIND:berkely Internet Name Domain-->ISC.org{bind,dhcpd}
            早期为伯克利负责维护,后期为ISC
        dns:协议
        bind:dns的一种实现
        named:bind程序的运行的进程名
    yum info bind
    yum list all bind*
    
    程序包:
        bind-utils:被bind和bind-utils包中的程序共同用到的文件
        bind:提供dns server程序,以及几个常用到的测试程序
        bind-chroot:可以选择程序,根切换,早期bind有漏洞,为了减少破坏,使用chroot
                :所有配置文件都放在chroot目录中,然后所有的环境和配置文件都放在哪里
        
        rpm -ql bind-utils //提供的命令有:dig,host,nslookup,nsupdate
        yum install bind 
        rpm -ql bind //查看bind的所有生成文件
    
    主配置文件:/etc/named.conf
        或包含近来的其他文件
            /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 controller:  953/tcp但默认监听于127.0.0.1地址,因此仅允许本地使用
        修改配置文件:cp /usr/share/man/man5/rndc.conf.5.gz 解压到/etc/rndc.conf

2.缓存名称服务器        
    bind程序安装完成之后,默认即可做缓存服务器
    其他用户指向该name server即可,缓存服务器,允许本地递归即可
    systemctl start named.service
    
    注意:
        1.named监听tcp和udp的53号端口    
        2.缓存域名服务器是不需要定义任何区域的,区域主要由:v4&v6的正反向解析记录即可
            因为他不需要负责任何区域,只需要解析自己就可以了    
    
四:主配置文件格式
    全局配置段:
        options{...}
    日志配置段:
        logging{...}
    区域配置段:
        zone{...} 
        由本级负责解析或者转发的区域
    注:每个配置语句都以分号结尾,否则即为语法错误    
        
    1.缓存名称服务器的配置:
        监听能与外部通信的地址
        listen-on port 53 { 192.168.4.100; };  //花括号前后都有空格,监听地址分号结尾
        
        dnssec-enable no;  //可能会影响实验
        dnssec-validation no;
        allow-query { 192.168.4.0/24; }//允许内网主机查询
        
         //bindkeys-file "/etc/named.iscdlv.key";  //已经关闭了dnssec因此这个密钥文件就没有用了
        注释: /* ,,,  */ 多行注释, //单行注释
        named-checkconf  //检查语法错误
        named-checkconf /etc/namned.conf //指定配置文件位置
        systemctl restart named.service    
        netstat -tnul |grep 53
                tcp:953是rndc
    2.vim /etc/resolv.conf 修改 :最多只能有个三个
        nameserver 192.168.4.100 //监听的地址指向自己
        ping www.baidu.com //在缓存nameserver上测试,能够ping通
        dig -t A www.baidu.com //在本机使用,也可以,速度比较快
            Got answer:请求得到了答案
            flags: qr:查询请求  ra:请求答案  
            
            ANSWER SECTION:可能是本地的缓存解析的
            AUTHORITY SECTION:权威段,谁负责解析的
            ADDITIONAL SECTION:附加段,真实的ip对应
        只要本地测试可以,就证明,本地做缓存服务器是可以的
        
    3.允许其他人查询
        /etc/named.conf
            allow-query     { 192.168.4.0/24; };
        dig -t A www.baidu.com @192.168.4.100 //其他内部主机测试即可
    
    小结:自己把nameserver指向自己,listen-on port修改对就可以了
     
五:测试工具
    dig,host,nslookup
    1.dig命令
        dig [-t RR_TYPE] name @Server
        用于测试dns系统,因此不会使用hosts文件
        查询:
            +[no]trace :跟踪解析过程
            +[no]recurse:进行递归解析 
        dig +trace -t A www.baidu.com //追踪查询过程
            1.找根:一个根返回顶级域 .com的所有dns,只有一个会响应  .--> .com
            2. com服务器,告诉我们baidu的所有dns,只有一个响应,.com-->baidu.com.
            3. baidu.com的服务器,找到www,www是一个cname,因此返回            
        dig -x 192.168.4.100 //反向解析
            
        模拟完全区域传送
            dig -t axfr DOMAIN [@server}
    
    2.host命令
        host -t A www.baidu.com
        host -t NS baidu.com  //baidu.com这个域内的NS
        host [-t RR_TYPE] name SERVER_IP
    3.nslookup命令
        nslookup [options] [name] [server]
        nslookup>
            server IP:指定nameserver
            set q=RR_TYPE
            192.168.0.1 
    4.rndc named服务控制命令
        rndc status //查看状态
        rndc stop //可以关闭
        rndc flush //清空服务器缓存
        rndc reload [zone] //重载
        rndc refresh zone  //该zone转为维护模式,不让其解析
    
        
个人使用:
    申请域名+ip
    在注册商:申请修改ns记录:域名==ip

    
    
六:配置正向区域
    以为mt.com域为例
    1.定义区域
        主配置文件或者主配置文件的辅助配置文件中实现
        zone "ZONE_NAME"  IN {
            type {master|slave|hint|forward} //hint提示为根区域 
            file "ZONE_NAME.ZONE";
        };
    2.建立区域数据文件
        在/var/named目录下建立区域数据文件
        
    3.让服务器重载配置文件和区域数据文件
        检查语法格式
    4.权限及属组修改
        chgrp named mt.com.zone
        chmod o= mt.com.zone
        
        172.16.4.100 ns1,bbs
        172.16.4.12 mx1
        172.16.4.13    mx2
        172.16.4.14    www,web 
        172.16.4.15 bbs
    实现:
        1.vim /etc/named.rfc1912.zones  //rfc:Request For Comments注释请求文档,各种协议标准文档

1
2
3
4
5
6
7
8
9
            zone "mt.com" IN {        //mt.com这里不加“."
                    type master;
                    file "mt.com.zone";   //默认位置位/var/named目录中
            };
            ===================================
            zone "4.168.192.in-addr.arpa" IN {  //反向区域
                    type master;    
                    file "192.168.4.zone";        // 正向文件名
            }

            
            ================================================
        2.    /var/named/mt.com.zone
            语法:name   [TTL]   IN   RR_TYPE   value{[域名|DNS_name]+mail}
            例如:SOA
                mt.com.  86400 IN  SOA  mt.com. admin.mt.com.  (
                                        2017010801;serial 是为以内
                                        2H ;refresh time刷新时间
                                        10min; retry
                                        1W;expire
                                        1D;否定答案的TTL值
                                            )            
                value:可以不写全,但是一定尾部不能带 “."  :ns1 
                        写全的话,是一定要带"."            :ns1.mt.com.
                        会自动补齐/etc/named.rfc1912.zones中定义的
                            zone"mt.com"
                        或者开头:$ORIGIN mt.com.
                反向区域中是不需要MX记录的
                反向记录的第一条NS记录,value要写全,因为自动补齐的内容是4.168.192
            ======================================================    
            正向:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 $TTL 3600                //注:这个是$而不是@
 $ORIGIN mt.com.
 @    IN    SOA    ns1.mt.com.    admin.mt.com.    (  //注,这是小括号,不是花括号
                            2017030101
                            1H
                            10M
                            3D
                            1D )
                    IN    NS        ns1    
                    IN    MX 10    mx1    
                    IN    MX 20    mx2    
                ns1    IN    A    172.16.4.100
                mx1    IN    A    172.16.4.12
                mx2    IN    A    172.16.4.13
                www    IN    A    172.16.4.14
                web    IN    CNAME    www
                bbs    IN    A    192.168.4.15
                bbs    IN    A    192.168.4.100

            ===========================================================
            反向: //出错很有可能是IP地址写错了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$TTL 3600
$ORIGIN 4.168.192.in-addr.arpa.
@    IN    SOA    ns1.mt.com.    admin.mt.com. (
                                2017030101
                                1H
                                10M
                                3D
                                12H )
                    IN    NS    ns1.mt.com.
                100    IN    PTR    ns1.mt.com.
                100    IN    PTR    bbs.mt.com.
                12    IN    PTR    mx1.mt.com.
                13    IN    PTR    mx2.mt.com.
                100    IN    PTR    www.mt.com.
                14    IN    PTR    web.mt.com.
                15    IN    PTR    bbs.mt.com.

        ========================================================    
        3.named-checkconf
            named-checkzone mt.com /var/named/mt.com.zone
            rndc status;rndc reload ;rndc status
            number of zones:会发生改变
            测试:
                dig -t NS mt.com
                dig -t MX mt.com
                dig -t A bbs.mt.com //两次执行可能会发生变化
        4.修改属性
            chown :named mt.com.zone     
            chmod o= mt.com.zone  //取消其他人的权限
            
            chmod o= 192.168.4.zone 
            chgrp named 192.168.4.zone 
        5.测试
            dig -x 192.168.4.100
            
注意:rpm -ql bind //假如删除了bind的配置可以到/usr/share/man/man5中找回配置文件 
Windows查看查看DNS缓存:
    ipconfig /displaydns

解析顺序验证:

1.[root@localhost ~]# cat /etc/nsswitch.conf |grep -i name
# An example Name Service Switch config file. This file should be
#    dns            Use DNS (Domain Name Service)
hosts:      files dns myhostname //先从hosts文件(files),后采用dns
2.cat /etc/resolv.conf
nameserver 8.8.8.8












本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1983897,如需转载请自行联系原作者

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章