1、不同主机程序(进程)间通讯机制:

    socket:ip+port


2、裸套接字:

    无需调用传输层的tcp和utp协议端口号,而自身可以实现此功能,并能借助网络层发送出去。


3、DNS:domain name server;是一个应用层程序

    协议端口:tcp:53,udp:53

    tcp53:用于区域传送

    udp53:用于负责解析


4、客户端名称解析过程:

    先查本地的hosts文件,在去查dns缓存,如果都没有,在去查dns服务器。


5、hosts文件:

    它记录了要通信主机的主机名和ip地址,主机不多时,可以用,多了就会降低解析效率。host文件是通用的,可以作为库文件供开发人员调用。

    库:getipbyhostname( )

    库:gethostnamebyip( )


6、dns基础知识介绍:

18、DNS服务_第1张图片

    dns是一个分层结构的名称解析程序。

      由根(.)、一级域(也叫顶级域:tlp,top level domain)、二级域、三级域(可以继续往下分层)组成。


    DNS缓存(dns cache):

       为了减少每次输入域名主机时,都要去dns服务器查找提供服务的主机,因此,每次去访问dns服务器时,都缓存一份名称库解析在dns cache中,缓存时间的定义(即缓存有效期)是由DNS服务器来设定的,它通过设置一个递减的时间(TTL)来实现此功能。


    DNS查询类型:

      递归查询:一般是主机到指定的DNS服务器进行查询,需要DNS服务器帮自己去完成解析

      迭代查询:一般是DNS服务器向根、顶级域及二级域之间的查询

    

    DNS解析方式:

      正向解析:从名称解析得到ip

      反向解析:从ip解析得到名称

      注意:正向解析和反向解析是两种完全不同的解析功能,他们不是同一个名称空间,是彼此间独立的,因此二者的数据库也是不一样的。

18、DNS服务_第2张图片


    常见的域名提供商:万网(国内备案商)、godaddy(国外,无需备案)


    域和FQDN的区别:FQDN:full qualified domain name。

      域:mageedu.com

      FQDN:www.magedu.com


    DNS服务器类型:

      负责解析至少一个域:主机名称服务器,辅助名称服务器

      不负责域解析: 缓存名称服务器。

       

7、一次完整的DNS查询请求经过的过程:

    client--->查找本地hosts文件--->dns本地缓存--->dns服务器(如果是dns负责的域,直接返回查询结果;否则进行迭代查询)。


    解析应答结果分类:

      分类一:

        肯定答案

        否定答案(不存在查询的键,因此不存在与其查询键对应的值)

      分类二:

        权威应答:由直接负责的DNS服务器回答的结果

        非权威应答:


8、DNS服务器类别:主dns服务器、从(辅助)dns服务器

    主DNS服务器:维护所负责解析域数据库的那台服务器,读写操作均可进行。

    从(辅助)DNS服务器:从主DNS服务器那里或从其他的从(辅助)服务器那里“复制”一份解析库,但只能进行读操作,即查询操作。


8.1、主从(辅助)DNS服务器“复制”操作的实施方式:

    serial:序列号,也即是数据库的版本号,主服务器数据库内容发生变化时,其版本号递增。

    refresh:刷新时间间隔,从(辅助)服务器每次多久到主服务器检查序列号更新状况。

    retry:重试时间间隔,重试时间间隔短于(小于)刷新时间间隔,辅助服务器从主服务器那里请求同步解析库失败时,再次发起尝试请求的时间间隔。

    expire:过期时长,辅助服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据,辅助服务器停止提供服务。

    否定答案的时长:


    注意:DNS主服务器“通知”从服务器随时更新数据。


8.2、主从(辅助)DNS同步方式:即区域数据传送

    axfr:全量传递,传送整个数据库,一般发生在同步的第一次

    ixfr:增量传递,仅传送变量的数据。


8.3、区域和域:

    域:mageedu.com

    区域:正向区域、反向区域

    注意:域和区域没有绝对大小之分,如上,域有两个区域,但是域(magedu.com)又是.com区域中的一个记录。同时,dns权限都是由上级指派的。


9、DNS区域数据文件组成:主要由资源记录组成

    区域文件中每一行一个资源记录(Resourse Record ,简称RR)    

    资源记录有类型的概念区分,常见的类型有:A AAAA PTR SOA NS CNAME MX9.1    


9.1、资源记录类型:

    SOA:start of authority;起始授权记录,一个区域解析库有且只能有一个soa记录,而且必须放在第一条;它用来标识是哪个区域的

    NS:name service;域名服务记录,一个区域解析库可以有多个ns记录,其中一个为主的;它用来标识区域内哪些服务器是dns服务器。

    A:address,地址记录,FQDN--->IPv4

    AAAA:address,地址记录,FQDN--->IPv6

    CNAME:canonical name,别名记录

    PTR:pointer,IP--->FQDN

    MX:mail exchange;邮件交换器,可以有多个,有优先级的概念,mx优先级0-99,数值越小优先级越高


9.2、资源记录的定义格式:注意资源记录中的“.”是不能少的

    语法:name [TTL] IN RR_NAME VLAUE    

        name:名称或ip

        ttl:ttl存活时间,可省,

        IN:关键字

        RR_NAME:资源记录类型

        VALUE:name对应的值


各类型定义格式说明:

    SOA类型资源记录:

        name:当前区域的名字,例如:magedu.com或者2.3.4.in-addr-arpa

        value:由多部分组成

            第一部分:当前区域的区域名称,也可以使用主dns服务器的名称

            第二部分:当前区域管理员的邮箱地址,但地址中不能有“@”符号,一般用“.”(点)来代替

            第三部分:(主、从服务协调属性的定义以及否定答案的TTL)   //放在括号中来说明主从复制的参数

         示例:

            $TTL 1D

            magedu.com.IN SOA  magedu.com. admin.magedu.com. (

                         0; serial

                         1D; refresh

                         1H; retry

                         1W; expire

                         3H ); minimum

            )  

  

    NS类型资源记录:

        name:当前区域的区域名称

        value:当前区域的某dns服务器的名字,例如ns.magedu.com. ;注意一个区域可以有多个ns记录

        示例:

        magedu.com. 86400 IN NS ns1.magedu.com.

        magedu.com. 86400 IN NS ns2.magedu.com.

        


    MX类型资源记录:

        name:当前区域的区域名称

        value:当前区域某邮件交换器的主机名

            注意:邮件交换器是smtp,不是pop,MX记录可以有多个,但每个记录的value之前应该有一个数字表示的优先级,数字越小,优先级越高

       示例:

        magedu.com. 86400 IN MX 10 mx1.magedu.com.

        magedu.com. 86400 IN MX 20 mx2.magedu.com.


   A类型资源记录:

        name:某FQDN,例如:www.magedu.com

        value:某IPv4地址。

        注意:A记录的name和value是多对多的关系

       示例:

        www.magedu.com. 86400 IN A 1.1.1.1

        www.magedu.com. 86400 IN A 1.2.3.4 

        bbs.magedu.com. 86400 IN A 1.1.1.1


   AAAA类型资源记录:

        name:某FQDN,例如:www.magedu.com

        value:某IPv6地址。

        注意:AAAA记录的name和value是多对多的关系


    PTR类型资源记录:

        name:ip地址,但是有特定格式,ip要反过来写而且还要加特定后缀。如:1.2.3.4的记录应写成:4.3.2.1.in-addr.arpa.

        value:FQDN

       示例:

        4.3.2.1.in-addr.arpa. 86400 IN PTR www.magedu.com.

    

    CNAME记录:

        name:别名,FQDN格式的别名

        value:FQDN格式的正式名字

       示例:

        web.magedu.com. 86400 IN CNAME www.magedu.com.


注意:

    ①、TTL可以从全局继承,但要事先定义,如:$TTL 86400

    ②、@表示当前区域的区域名称,因此,任何用到当前区域的的名称的地方都可以用“@”来替代

    ③、相邻的两条资源记录的“name”相同时,后面的name可省略,如下:

          www.magedu.com. 86400 IN A 1.1.1.1

        www.magedu.com. 86400 IN A 1.2.3.4 

       可写成:        

          www.magedu.com.  86400 IN A 1.1.1.1

                 86400 IN A 1.2.3.4 

    ④、对于正向区域来说,各MX、NS等类型的记录value值为FQDN时,此FQDN应该有一个A记录。


    




10、DNS and bind

    bind:Berkeley internet name domain,现由ISC.org组织维护


    dns是协议,bind是dns协议的一种实现工具    

    

    named:bind程序运行的进程名称。


10.1、bind程序包安装:

   查看程序包是否安装:

    [root@localhost ~]# yum info bind   //查看程序包信息

    [root@localhost ~]# yum list all *bind* 

    [root@localhost ~]# rpm -q bind   //查询是否安装bind

    bind-9.9.4-37.el7.x86_64

    [root@localhost ~]# 

    

   bind程序包:

    bind-libs:被bind和bind-units包中的程序共同用到的库文件   

    bind-utils:bind客户端程序集,例如dig、host、nslookup等

    bind:提供dns server程序,以及几个常用的测试程序

    bind-chroot:选装项,让named进程运行于jail(容器或沙箱)模式下。


10.2、bind安装后程序文件: 

   主配置文件:

    /etc/named.conf


   其他辅助性配置文件:

    /etc/named.iscdlv.key

    /etc/named.rfc1912.zones   //区域一般定义在此文件中。

    /etc/named.root.key


   解析库文件:

    /var/named   //一般名字为zone_name.zone

      注意: ①一台dns服务器可同时为多个区域提供解析(包括正向和反向)

         ②、必须要有根区域解析文件,一般为:/var/named/named.ca

        ③、还应该有两个区域解析库文件:localhost和127的正、反向解析库文件。

        正向:/var/named/named.localhost

        反向:/var/named/named.loopback

        

   远程名称服务器管理工具:rndc   

    /usr/sbin/rndc;默认工作与tcp的953端口,但默认监听于127.0.0.1地址,因此仅允许本地使用。


注意:bind程序安装完成后,默认即可做缓存名称服务器使用,如果没有专门负责解析的区域,直接可启动服务。

    centos6:service named start

    centos7:systemctl strart named


10.3、bind主配置文件格式:/etc/named.conf

   由三段组成:

    全局配置段

        options {.....}

示例:部分配置

    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; };     //允许哪些主机查询



    日志配置段


        logging{.....}


    区域配置段: 主要配置那些有本机负责解析的区域或转发的区域。

        zone {.....}


10.4、缓存名称服务器的配置:不负责解析

    ①、在options段添加监听能与外部主机通讯的地址,如添加192.168.0.107 

        listen-on port 53 { 127.0.0.1; 192.168.0.107 };    //注意地址与花括号前后都有空格隔开

    

    ②、注释掉:options中 allow-query     { localhost; };选项,或者添加可以访问的地址、地址段   

        注释方法:

            多行注释:/*........*/

            单行注释://


    ③、关闭dns安全配置,(学习是建议关闭);将两处yes改为“no”

        dnssec-enable yes;

        dnssec-validation yes;


    ④、检查配置文件语法是否有错误

        [root@localhost named]# named-checkconf /etc/named.conf   //可以写要检查的配置文件,也可以不写

        [root@localhost named]# named-checkconf -h     //查看named-checkconf的使用方法

        usage: named-checkconf [-h] [-j] [-p] [-v] [-z] [-t directory] [named.conf]

    注意:生产环境中一定要在重启前检查配置文件,防止因配置错误导致服务不能正常启动。

                  

    ⑤、启动服务:并查看服务

         centos6:service named start

         centos7:systemctl strart named

        [root@localhost named]# systemctl  status named


    ⑥、查看相应端口是否开启:

        [root@localhost named]# ss -utnlp        

         tcp53:用于区域传送

        udp53:用于负责解析


    ⑦、测试是否能正常完成;测试工具dig、host、nslookup

        dig命令:用于测试DNS系统,因此不会查询hosts文件

        dig命令格式:dig [-t RR_TYPE] name [@server] [query options]   //@server指定以哪台服务器去测试解析;不加@server:表示以本机测试

            [query options]

                +[no]trace:跟踪解析过程

                +[no]recurse:进行递归解析

          示例:[root@localhost named]# dig -t A wwww.baidu.com @192.168.0.107 +trace

             #dig -x IP  //反向解析

            #dig -t axfr domain [@server]  //模拟完全区域传送

            [root@localhost /]# dig -t a www.baidu.com


            ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t a www.baidu.com

            ;; global options: +cmd    //全局属性配置项

            ;; Got answer:         //已经得到应道

            ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33057

            ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6   //flags:标志位;qr:查询请求;ra请求答案


            ;; OPT PSEUDOSECTION:   //伪选项段

            ; EDNS: version: 0, flags:; udp: 4096

            ;; QUESTION SECTION:    //问题段,请求的问题是什么

            ;www.baidu.com.IN  A     //重复问题是什么,解析www.baidu.com的A记录 


            ;; ANSWER SECTION:       //应答段部分

            www.baidu.com.   433 IN CNAME www.a.shifen.com.  //www.baidu.com是一个www.a.shifen.com.的别名记录

            www.a.shifen.com.  274 IN  A 180.97.33.107      //www.a.shifen.com.的A记录是180.97.33.107

            www.a.shifen.com.  274 IN  180.97.33.108      //www.a.shifen.com.的A记录是180.97.33.108


            ;; AUTHORITY SECTION:   //权威段;谁来负责解析的

            a.shifen.com. 413 IN NS ns2.a.shifen.com.   //a.shifen.com.域是由ns2.a.shifen.com.(dns服务器)负责解析

            a.shifen.com. 413 IN NS ns4.a.shifen.com.

            a.shifen.com. 413 IN NSns5.a.shifen.com.

            a.shifen.com. 413 IN NSns1.a.shifen.com.

            a.shifen.com. 413 IN NSns3.a.shifen.com.


            ;; ADDITIONAL SECTION:  // 附加段,将权威段的dns服务器解析为IP地址

            ns1.a.shifen.com. 449 IN 61.135.165.224

            ns2.a.shifen.com. 452 IN 180.149.133.241

            ns3.a.shifen.com. 27  IN 61.135.162.215

            ns4.a.shifen.com. 24  IN 115.239.210.176

            ns5.a.shifen.com. 503 IN 119.75.222.17


            ;; Query time: 103 msec   //查询指令时长

            ;; SERVER: 192.168.1.1#53(192.168.1.1)   //由哪个服务器负责解析的,基于迭代的方式查询并返回解析结果

            ;; WHEN: Sun Feb 04 09:04:19 CST 2018

            ;; MSG SIZE  rcvd: 271


            [root@localhost /]# 




        host命令格式:host [-t] [RR_type] name server_ip    //server_ip指定使用指定的ip去测试解析,而不用本机测试


        nslookup命令格式:nslookup [-options] [name] [server]

            交互模式:nslookup>

                    server IP   //以指定的IP作为server进行解析

                    set q=RR_TYPE  //要查询的资源记录类型

                    name      //要查询的名称。

           

        rndc命令:named服务控制命令

            #rndc status

            #rndc flush //清空缓存


10.5、配置一个正向区域的步骤:

    ①、定义区域:在主配置文件中或主配置文件的辅助配置文件中实现  //主配置文件:/etc/named.conf,主配置文件的辅助配置文件:/etc/named.rfc1912.zone

        基本格式:

            zone "zone-name" IN {

                type {master | slave | hint | forward };  

                file "zone_name.zone";

            };

    注意:每行的分号(;)是不能少的,否则为语法错误,hint表示定义为根服务器;file “zone_name.zone”此处的路径是相对路径(/var/named/目录下),也可以使用绝对路径。 


    ②、建立区域数据文件:在/var/named目录下建立区域数据文件,主要记录为A、AAAA

    ③、让服务器重载配置文件和区域数据文件;注意:重载前要记得检查配置语法是否有错误。

  

 正向区域配置示例:以magedu.com域为例:

    ①、定义区域:

        [root@localhost named]# vim /etc/named.rfc1912.zones  //添加如下语句

        zone "magedu.com" IN {

         type master;

         file "magedu.com.zone";

        };

        

    ②、建立区域数据文件:

        [root@localhost named]# vim /var/named/magedu.com.zone

        $TTL 1D    //定义区域全局TTL时间,下面的资源记录不写ttl,从此处继承。

        $ORIGIN magedu.com. //如果下面的资源记录不写全的话,则自动为其补上此magedu.com.后缀。如果不写此项,则从/etc/named.rfc1912.zones中定义的“zone_name”字符串补全

        @              IN SOA @ admin.magedu.com. (

         2018020401

         1H

         20M

         1D

         1W

        )

        @               IN NS  ns1.magedu.com.    //@代表区域的名称

        @              IN NS  ns2     //会自动补上magedu.com. ;补上/etc/named.rfc1912.zones中定义的“zone_name”字符串,此时不要加点(.),和$ORIGIN不冲突

        @              IN MX  10 mx1.magedu.com.

        @              IN MX  20 mx2.magedu.com.

        ns1             IN A  192.168.100.100

        ns2             IN A  192.168.100.101

        mx1             IN A  192.168.100.103

        IN A  192.168.100.104

        www.magedu.com.     IN A  192.168.100.105

             IN A  192.168.100.106    //如果此处的name和上次一样,可以不写name

        web1.magedu.com. IN CNAME www.magedu.com.

        web2             IN CNAME www

        web3             IN A  192.168.100.107 

        [root@localhost named]# 


    注意:区域数据文件的权限要设置成其他用户没有权限;区域数据文件的属主、属组为root named;然后在检查主配置文件,区域数据文件的语法是否有错误。

        [root@localhost named]# chgrp  named magedu.com.zone 

        [root@localhost named]# chmod o= magedu.com.zone 

        [root@localhost named]# ll magedu.com.zone

        -rw-r-----. 1 root named 561 Feb  4 07:11 magedu.com.zone

        [root@localhost named]# 

         [root@localhost named]# named-checkconf

        [root@localhost named]# named-checkzone  magedu.com.  /var/named/magedu.com.zone 


    ③、让服务器重载配置文件和区域数据文件:

        [root@localhost named]# rndc status

        [root@localhost named]# rndc reload        


    ④、检验:

        dig -t a www.magedu.com

          dig -t a www.magedu.com @192.168.0.107

          dig -t a web1.magedu.com @192.168.0.107

          dig -t a www.magedu.com @192.168.0.107

          dig -t a web1.magedu.com @192.168.0.107

          dig -t a web2.magedu.com @192.168.0.107

          dig -t a web3.magedu.com @192.168.0.107

            

10.6、配置解析一个反向区域

    ①、定义区域:在主配置文件中或主配置文件的辅助配置文件中实现  //主配置文件:/etc/named.conf,主配置文件的辅助配置文件:/etc/named.rfc1912.zone

        基本格式:

            zone "zone-name" IN {

                type {master | slave | hint | forward };  

                file "zone_name.zone";

            };

    注意:每行的分号(;)是不能少的,否则为语法错误,hint表示定义为根服务器;

        zone-name:一般写法为ip地址的反写,遵循特定格式:反写的网段.in-addr.arpa.;如:1.2.3.4的记录应写成:3.2.1.in-addr.arpa.

       file “zone_name.zone”此处的路径是相对路径(/var/named/目录下),也可以使用绝对路径。

        

    ②、建立区域数据文件:在/var/named目录下建立区域数据文件,主要记录为PTR


    ③、让服务器重载配置文件和区域数据文件;注意:重载前要记得检查配置语法是否有错误。


 正向区域配置示例:以magedu.cn域为例:    

    ①、定义区域:

        [root@localhost named]# cat /etc/named.rfc1912.zones    

        zone "3.2.1.in-addr.arpa" IN {

         type master;

         file "1.2.3.zone";

        };


    ②、定义反向区域数据文件

        [root@localhost named]# vim  /var/named/1.2.3.zone

        $TTL 8H

        $ORIGIN 3.2.1.in-addr.arpa.  //自动补上区域名字,但是此时不再是magedu.cn;而是3.2.1.in-addr.arpa. ;因此名字要写全了。简写的只能是IP不能是主机名

        @     IN  SOA  magedu.cn admin.magedu.cn (

         2018020214

         1D

         2H

         30M

         1W

        )

         IN  NS ns1.magedu.cn.

             IN  NS ns2.magedu.cn.

        67   IN  PTR ns1.magedu.cn.

        68   IN  PTR ns1.magedu.cn.

        69   IN  PTR ns2.magedu.cn.

        70   IN  PTR www.magedu.cn.

        [root@localhost named]# 


        [root@localhost named]# chgrp named 1.2.3.zone 

        [root@localhost named]# chmod o= 1.2.3.zone 


    ③、验证:

        [root@localhost named]# rndc reload

        [root@localhost named]# dig -x 192.168.0.70 @192.168.0.107