码迷,mamicode.com
首页 > 其他好文 > 详细

DNS

时间:2015-01-23 21:28:24      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:

● DNS(Domain Name Service):域名解析,核心和标准都是基于一个软件,软件名为:BIND(Berkeley Internet Name Domain)

    ■ DNS:名称解析,Name Resolving 名称转换(背后有查询过程,依赖于数据库)

        ♦ FQDN(主机名)<-->IP:双向转换,这就是解析的过程

          # 名称解析不仅仅只是主机和ip之间,很多两者之间的转换都属于名称解析

          # 将端口转换成对应服务也属于名称解析,如:http和80之间

        ♦ 要完成名称解析的机制有很多,于是,一个统一的框架便出现了:

            nsswitch

 

● nsswitch:是一个框架、平台,展现出来的是一个配置文件:

    /etc/nsswitch.conf

 

    ■ 将DNS转换为ip地址的机制有两个:

      libnss_files.so

      libnss_dns.so

      这两个都是库文件,只能被调用

    ■ /etc/nsswitch.conf中加入一行

        hosts:    files    dns

        # files是指让libnss_files.so找/etc/hosts文件

        # dns是指dns服务

    ■ stub resolver:名称解析器

        主机名和ip地址转换的过程是由stub resolver来完成的

      ♦ 当ping www.magedu.com的时候就会借助本地的stub resolver来完成名称解析

        stub resolver第一步会根据files去找/etc/hosts中是否有www.magedu.com对应的ip地址,没有就会找DNS来解析

    ■ 为什么要用到hosts文件呢?

      ♦ 人们记住数字的能力是有限的,很难记住几十个ip地址,所以便有了hosts文件,它的格式为:

        IPASSR      FQDN             Ailases(别名)

        172.16.0.1  www.magedu.com  www

      ♦ 主机越来越多之后,随意给自己的主机起名字造成通信的不便,于是便出现了名称地址管理机构:IANA

        但是由于IANA拥有军方的背景,人们不想自己的信息被政府所掌控,于是功能转移到了ICANN

 

● ICANN:管理顶级域,规范ip和主机名之间的关系

    ■ A主机如何知道网络上加入了D主机呢?

      ♦ 早期时,IANA通过ftp服务器管理了一个hosts文件,在线更新,用户只要将hosts文件下载下来覆盖自己的hosts就行了

        1、定义周期性计划任务,每多长时间就下载hosts并覆盖

        2、后来IANA干脆建立服务器,只要用户提出请求,服务器负责解析,不需要再下载更新

        3、但后来hosts文件条目太多了,不便于查询和管理,便开始进行分布式管理,将权限一步步下放,IANA只需维护根就OK

 

● 分布式数据库:DNS属于分布式数据库

    上级仅知道其直接下级,不能越级管理

    下级不知道上级以及上上级,但能知道根

    但是不绝对,只要会配置

 

● 域名:

    ■ www.magedu.com 这是个主机名(主机名FQDN:Full Qualified Domain Name,完全限定域名)

      # .com是个域名,magedu是.com下的一个域

      # .magedu.com也是个域名,只不过有的主机叫做www有的叫做ftp、mail等

 

    ■ 域名由大到小进行组合,就像外国人写地址,如www.magedu.com.

      # www:范围最小,主机名

      # .magedu:

      # .com:顶级域

      # .:全局,表示根域

 

    ■ 根域-->顶级域(TLD:Top Level Domain)-->二级域

        顶级域分为:

            组织域:.com,.org,.net,.cc…

            国家域:.cn,.tw,.hk,.iq,.ir,.jp…

            反向域:将IP-->FQDN专用的

                反向:IP-->FQDN在一个数据库

                正向:FQDN-->IP在另一个数据库

 

    ■ 主机名称是自底向上的如:www.magedu.com,而授权是自顶向下的

 

    ■ 查询有两种方式:

        递归:只发出一次请求

        迭代:可能发出多次请求

 

       

      ♦ 递归:

        # st1主机想要查询www主机,可以向根域发送请求,但如果2秒后st1想要继续查询,就需要再次发送请求

          这样就十分浪费带宽,但是可以将www主机地址缓存下来,下次访问直接读取缓存文件即可

        # 这时st2也想查询www主机,但是st2无法读取st1的缓存文件,如果ibm下上万台主机同时查询www主机就会很麻烦

        # 于是就在ibm下建立一台主机ns.ibm.com专门负责接收请求和解析

        # 此时st1想要查询www主机时,会向ns发送请求,由于ns不知道它的上级只能将请求发送至根,根找.com,.com找

          magedu,magedu找www,找到后便将答案一步一步发送到st1

        这样就会造成根十分繁忙,所以,根不会给任何主机递归。于是,正确的方式应该是这样的:

 

      ♦ 迭代:

        # st1找ns,ns找根,根让ns找.com,.com让ns找magedu,magedu直接把答案告诉ns,ns将答案缓存到本地

 

      ♦ 权威答案和非权威答案:

        ♠ ns主机缓存下来的条目属于非权威答案

        ♠ magedu提供的才是权威答案,因为只有magedu才是最清楚www信息的

            # magedu将www的信息以及TTL发给ns,告诉ns此信息缓存的有效时间是多久

            # 所以说每个服务器返回答案中还必须包含超时时间

            # 缓存10S和1000S服务器负载的差距是巨大的

            # 缓存时间的长短取决于主机的变动频率

 

      ♦ 授权数据库:

          每个域都有一个数据库,里面记录的是它的所有下级中负责接收请求和解析的服务器的ip地址,返回的答案就是此ip

 

● ns服务器管理:

    ■ 一个服务器如何管理多个ns服务器?

          每个ns服务器的ip同时指向该服务器

    ■ 此服务器如何管理多个域?

          该服务器同时维护多个服务器,每个域对应不同的服务器

 

● DNS的高级机制:负载均衡

    ■ 在dns中主机名和ip地址之间是多对多的关系,也就是说一个ip地址有多个主机名,一个主机名也能对应对多个ip地址

    ■ 这样的好处就是负载均衡,比如:1000个用户同时访问www.111.com,500个用户在A服务器,500个用户在B服务器

    ■ 但是这种机制的性能很差

 

● DNS服务器的作用:

    1、接受本地客户查询请求,查询方式为递归:

        比如st1请求ns服务器,ns服务器给st1进行递归,自己迭代查询

    2、外部客户端请求:请求权威答案

        如果请求的主机存在,则发送肯定答案和缓存时间(TTL)

        如果请求的主机不存在,则发送否定答案和缓存时间(TTL)

    3、外部客户端请求非权威答案,比如:

        st1想要查询www,但是它没有给ns.ibm.com发送请求反而去请求ns.kernel.org

 

    ■ /etc/resolv.conf中

        ♦ nameserver后面的ip地址一定是可以给本ip进行递归的,不然上不了网

        ♦ 就像如果运营商的DNS服务器不给我们递归,我们一样上不了网是一样的道理

 

    ■ 根和顶级域不会给其他服务器递归

 

● DNS的主从结构和类型:

    ■ DNS服务器如果挂了,通过ip地址可以访问,无法通过域名来访问。为了安全,需要不止一台DNS服务器

 

    ■ 为了保证两台服务器的数据能够完全同步就需要用到主从结构:

        ♦ 主DNS服务器:数据修改在此完成,每修改一次数据版本号+1

        ♦ 辅助DNS服务器:请求数据同步

            ♠ 辅助DNS不能修改

            ♠ 如果主DNS挂了,辅助DNS也会跟着挂掉

            ♠ 数据只能是去请求而不能被推送过来:不能说我没开浏览器,浏览器就自动打开网页

            ♠ 所以,辅助DNS定时去查看主DNS,比较二者的数据的版本/序列号。由此,我们需要定义:

                # 版本/序列号(serial number):

                # 查看时间(refresh time):

                # 重试时间(retry):上一次查看主DNS没反应

                # 过期时间(expire):多长时间内查看主DNS没反应

                # 否定答案的缓存时长(nagative ansver TTL):

 

    ■ 缓存DNS服务器:不提供权威答案(不接受外部请求),只提供缓存服务

 

    ■ 转发器:不缓存,只转发。缓存服务器把缓存功能去了就成了转发器

 

● DNS

    ■ DNS服务器是由上级授权,比如ns作为ibm域的DNS便是由.com授权

 

    ■ DNS服务器数据库中记录了该域内所有主机的类型

        数据库中的每一个条目称作一个资源记录(RR:Resource Record)

 

    ■ 资源记录的格式:

        NAME      [TTL]   IN    RRT(资源记录类型)    VALUE(类型)

        www.magedu.com.   IN    A                    1.1.1.1            正向

        1.1.1.1           IN    PTR(主机名类型)       www.magedu.com.    反向

        ♦ 以上都是资源记录

        ♦ 如果TTL都相同,可以在全局定义TTL值,此时的TTL就能省略

        ♦ www.magedu.com.中的.必须写上

 

    ■ 资源记录类型:

        SOA(Start Of Authority):    起始授权记录,用于标明一个区域内部主从服务器之间如何同步数据以及起始授权对象是谁的

 

            ZONE NAME     TTL    IN    SOA    FQDN               ADMINISTRATOR_MAILBOX( )

            @/magedu.com. 600    IN    SOA    ns1.magedu.com.    admin.magedu.com. (

                                2013040101;最长不能超过10位

                                1H

                                5M

                                1W

                                1D )

 

            # SOA必须为第一条,用于标明本区域内多个DNS服务器彼此之间是如何完成数据同步的

            # FQDN:起始授权主机一般是主DNS服务器地址

            # ADMINISTRATOR_MAILBOX:邮件邮箱地址

                邮箱格式:admin@magedu.com-->admin.magedu.com

                  @是有特殊意义的,是一个通配符,用来表示ZONE NAME

            # 括号里面的内容为:(serial number refresh retry expire na TTL)写在同一行中括号可以省略

                时间单位:MHDW(分时日周),默认是秒

            # 分号为注释信息,不再是#,比如:

                2013040101 ; serial number换行格式时使用,同一行不方便

 

        NS(Name Server):ZONE NAME(区域名)-->FQDN

 

            magedu.com.    600    IN    NS    ns.magedu.com.

            ns.magedu.com  600    IN    A     1.1.1.2

 

            # 任何NS记录都要有A记录与之相随

            # FQDN必须要有A记录

            # 需要成组出现refresh timerefresh time

        MX(Mail eXchanger):ZONE NAME-->FQDN(邮件服务器的名称)    邮件交换器

 

            ZONE NAME          TTL    IN    MX  pri(优先级)    VALUE

            magedu.com.        600    IN    MX  10             mail.magedu.com.

            mail.magedu.com.   600    IN    A                  1.1.1.3

            # FQDN对应ip地址,而通信也要依赖ip地址,所以任何一个邮件服务器都需要增加一个A记录

            # 它有优先级的概念,从0-99,数字越少级别越高

            # 多台邮件服务器工作时,首选级别最高的服务器接收邮件,然后才会是次一级

 

        A(address):FQDN-->Ipv4    最常见

        AAAA:FQDN-->Ipv6

        PTR(pointer):IP-->FQDN

        CNAME(Canonical NAME):FQDN-->FQDN    正式名称

            www2.magedu.com.    IN    CNAME    www.magedu.com.   

            表示www2.magedu.com.是www.magedu.com.的别名

        TXT

        CHAOS

        SRV

 

● 域名解析分为:

    正向:FQDN-->IP

    反向:IP-->FQDN

 

● 根域:

    ■ 根服务器是相当重要的,如果根挂了,网络就会瘫痪

 

    ■ 全球一共有13个根服务器

        从a.root-server.net-->m.root-server.net

 

    ■ 根服务器的内容都是一模一样,所以说:

        每一个域为了安全性和稳定性会有多个服务器,每个服务器的内容必须一模一样

 

● 域和区域:

   站在DNS的角度上讲:

    域(Domain):是个逻辑概念

    区域(Zone):是个物理概念

    区域和域没有必然的包含关系,域从上级得到授权,上级是在区域文件中定义

 

    ■ 现有主机名:magedu.com. ip网段:192.168.1.0/24,配置其他主机的ip和域名

      ♦ 首先要获得上级的授权,.com中这样定义:

        magedu.com.    IN    NS    ns.mage.com.

        ns.magedu.com. IN    A     192.168.0.10    说明ns所在的ip

      ♦ 规划主机:

        www    192.168.0.1

        mail   192.168.0.2,MX(邮件服务器)

      ♦ 建立,建立两个区域文件:

        ♠ 正向区域文件:   

          magedu.com.      IN     SOA

 

          www.magedu.com.  IN  A  192.168.0.1

          可以简写为:

          www              IN  A  192.168.0.1   

 

          # 简写是一定不能加.但全写时一定要加.

 

        ♠ 反向区域文件:

          0.168.192.in-addr.arpa.      IN    SOA

 

          192.168.0.1                  IN    PTR    www.magedu.com.

          全写:

          1.0.168.192.in-addr.arpa.    IN    PTR    www.magedu.com.

          简写:

          1                            IN    PTR    www.magedu.com

          # 1由于没带点所以会自动补上0.168.192.in-addr.arpa.

          # www.magedu.com.一定不能简写,因为简写自动补全的区域名,如果简写为www那结果就是

            www.0.168.192.in-addr.arpa.

 

        # 区域文件不能直接写主机名而应该写域名

        # 区域文件中无论是正向还是反向第一条一定是SOA,通常第二条记录是ns,接下去正向是A记录,反向是PTR

        # 按照规定手动写入

        # 反向区域文件一定是跟ip地址相关,所以第一行是网段地址反过来写

        # in-addr.arpa.:特定后缀

        # 两个区域文件中SOA格式除了区域名称之外其他都可以是相同的

        # MX记录只需要定义在正向文件之中

        # NS记录可以定义在正反向文件中

        # A记录只能定义在正向,PTR只能定义在反向

 

    ■ 区域传送:

        主从同步时间取决于SOA中的定义,主DNS服务器只要被修改就会通知从DNS服务器进行同步

      ♠ 区域传送的类型:

        完全区域传送(axfr):新增一台从DNS服务器,需要完全复制

        增量区域传送(ixfr):主DNS服务器只更新了一条记录,只同步修改的

      ♠ 区域类型:从服务器不仅可以作为主的从,还可以作为从的从。所以要规定从服务器要去哪同步数据

        主区域(master):主DNS服务器

        从区域(slave):

        提示区域(hint):dns服务器在接到客户端请求的时候得不到正确答案,此时就要定义根的位置,让DNS找根

        转发区域(forword):直接告诉客户端所请求主机的位置,不用再去找根

       

● 配置DNS服务器:

  ■ 互联网上使用最好多的DNS软件是:BIND

      但是BIND不再由伯克利而是由ISC进行维护,dhcp也是由ISC维护

 

● bind:

[root@localhost ~]# yum list |grep "^bind"

bind.i686                                  32:9.8.2-0.30.rc1.el6_6.1     updates

bind-chroot.i686                           32:9.8.2-0.30.rc1.el6_6.1     updates

bind-devel.i686                            32:9.8.2-0.30.rc1.el6_6.1     updates

bind-dyndb-ldap.i686                       2.3-5.el6                     base  

bind-libs.i686                             32:9.8.2-0.30.rc1.el6_6.1     updates

bind-sdb.i686                              32:9.8.2-0.30.rc1.el6_6.1     updates

bind-to-tinydns.i686                       0.4.3-15.20140818gitdf0ddc3.el6

bind-utils.i686                            32:9.8.2-0.30.rc1.el6_6.1     updates

# bind-utils:DNS客户端工具,提供了常用的工具

# bind-libs:提供了程序运行所需库文件

# bind-devel:头文件和库文件,二次开发时需要用到

# bind-chroot:默认bind工作在根下,如果DNS被劫持将会造成安全风险,所以让它工作在假根之下,比如建立

    /var/named/chroot/目录,让这个目录称为假根,假根下建立以下named程序运行所需的所有文件:

        etc/name.conf

        etc/rdnc.conf

        sbin/named

        var/named

 

  ■ 配置文件:

    ♦ 主配置文件: /etc/named.conf,其中定义了:

      BIND进程的工作属性

      区域的定义

    ♦ 额外的:/etc/rndc.key,严格来说这是个密钥文件

      rndc(Remote Name Domain Controller):远程控制文件

      配置信息:/etc/rndc.conf

    ♦ 配置文件语法:

    完整语句必须用分号结尾

    花括号的前后必须有空格(后面没有字符串和分号结尾除外),中间的任何语句都需要分号结尾

  ♦ 区域的定义:

    zone “ZONE NAME” IN {

    type {master|slave|hint|forword};

    file “区域数据文件路径(可以是相对的)“;    # 主区域需定义

    file ”区域文件路径”;    # 从区域需要定义

    masters { 主DNS服务器地址; };    # 从区域需要定义

    };

 

[root@localhost ~]# vim /etc/named.conf

options {    # 全局选项

        listen-on port 53 { 127.0.0.1; };    # 此时只监听本地的,如果想要监听任何外网只需去掉{ 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; };    # 只允许本地查询

        recursion yes;    # 递归

 

        dnssec-enable yes;

        dnssec-validation yes;

        dnssec-lookaside auto;

 

        /* Path to ISC DLV key */

        bindkeys-file "/etc/named.iscdlv.key";

 

        managed-keys-directory "/var/named/dynamic";

};

 

logging {    # 定义生成和保存日志

        channel default_debug {

                file "data/named.run";

                severity dynamic;

        };

};

 

zone "." IN {    # 定义区域

        type hint;

        file "named.ca";

};

 

include "/etc/named.rfc1912.zones";    # 包含其他文件

include "/etc/named.root.key";

 

[root@localhost ~]# vim /etc/named.rfc1912.zones    # 打开分片的配置文件

zone "localhost.localdomain" IN {

        type master;

        file "named.localhost";

        allow-update { none; };

};

 

zone "localhost" IN {

        type master;

        file "named.localhost";

        allow-update { none; };

};

 

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {

        type master;

        file "named.loopback";

        allow-update { none; };

};

 

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

        type master;

        file "named.loopback";

        allow-update { none; };

};

 

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

        type master;

        file "named.empty";

        allow-update { none; };

};

# 都是定义区域的

 

[root@localhost ~]# cd /var/named

[root@localhost named]# ls

chroot  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves

[root@localhost named]# cat named.ca    # 此文件中包含13个根节点的地址,有v4地址也有v6的,如果没有此文件可以dig命令生成

a.root-servers.net. 518400  IN  A   198.41.0.4

b.root-servers.net. 518400  IN  A   192.228.79.201

c.root-servers.net. 518400  IN  A   192.33.4.12

d.root-servers.net. 518400  IN  A   199.7.91.13

e.root-servers.net. 518400  IN  A   192.203.230.10

f.root-servers.net. 518400  IN  A   192.5.5.241

g.root-servers.net. 518400  IN  A   192.112.36.4

h.root-servers.net. 518400  IN  A   128.63.2.53

i.root-servers.net. 518400  IN  A   192.36.148.17

j.root-servers.net. 518400  IN  A   192.58.128.30

k.root-servers.net. 518400  IN  A   193.0.14.129

l.root-servers.net. 518400  IN  A   199.7.83.42

m.root-servers.net. 518400  IN  A   202.12.27.33

a.root-servers.net. 518400  IN  AAAA    2001:503:ba3e::2:30

c.root-servers.net. 518400  IN  AAAA    2001:500:2::c

d.root-servers.net. 518400  IN  AAAA    2001:500:2d::d

f.root-servers.net. 518400  IN  AAAA    2001:500:2f::f

h.root-servers.net. 518400  IN  AAAA    2001:500:1::803f:235

i.root-servers.net. 518400  IN  AAAA    2001:7fe::53

j.root-servers.net. 518400  IN  AAAA    2001:503:c27::2:30

k.root-servers.net. 518400  IN  AAAA    2001:7fd::1

l.root-servers.net. 518400  IN  AAAA    2001:500:3::42

m.root-servers.net. 518400  IN  AAAA    2001:dc3::35

[root@localhost named]# rpm -ql bind-utils    # 查看bind-utils提供了哪些工具

/usr/bin/dig    # dig -t NS . @a.root-servers.net.就能显示根节点

/usr/bin/host

/usr/bin/nslookup

/usr/bin/nsupdate

/usr/share/man/man1/dig.1.gz

/usr/share/man/man1/host.1.gz

/usr/share/man/man1/nslookup.1.gz

/usr/share/man/man1/nsupdate.1.gz

 

[root@localhost named]# cat named.localhost

$TTL 1D

@   IN SOA  @ rname.invalid. (

                    0   ; serial

                    1D  ; refresh

                    1H  ; retry

                    1W  ; expire

                    3H )    ; minimum

    NS  @

    A   127.0.0.1    # 为避免DNS服务器配置错误,将localhost解析成一个正常地址

    AAAA    ::1

 

[root@localhost named]# cat named.loopback    # 用于实现将127.0.0.1解析成localhost,本地主机名的正反向解析

$TTL 1D

@   IN SOA  @ rname.invalid. (

                    0   ; serial

                    1D  ; refresh

                    1H  ; retry

                    1W  ; expire

                    3H )    ; minimum

    NS  @

    A   127.0.0.1

    AAAA    ::1

    PTR localhost.

-----------------------------------手动创建配置文件-----------------------------------

[root@localhost named]# mv /etc/named.conf /etc/named.conf.bak    # 先备份

[root@localhost named]# ll /etc/named.conf.bak

-rw-r-----. 1 root named 1008 7月  19 2010 /etc/named.conf.bak    # 组是named,只有named组能读

[root@localhost named]# vim /etc/named.conf

 

options {

        directory "/var/named";

};

 

zone "." IN {    # 定义根所在

        type hint;    # 定义区域文件类型

        file "named.ca";

};

 

zone "localhost" IN {    # 正向区域

        type master;

        file "named.localhost";

};

 

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

        type master;    # 没有主服务器不能为从只能为主

        file "named.loopback";

};

# 这就是缓存DNS服务器配置

 

[root@localhost named]# chown root:named /etc/named.conf    # 修改属主属组

[root@localhost named]# chmod 640 /etc/named.conf    # 修改权限

[root@localhost named]# named-checkconf    # 检查配置文件语法

[root@localhost named]# named-checkzone "." /var/named/named.ca    # 检查语法

zone ./IN: has 0 SOA records

zone ./IN: not loaded due to errors.

[root@localhost named]# named-checkzone "localhost" /var/named/named.localhost    # 检查语法

zone localhost/IN: loaded serial 0

OK

[root@localhost named]# named-checkzone "0.0.127.in-addr.arpa" /var/named/named.loopback    # 检查语法

zone 0.0.127.in-addr.arpa/IN: loaded serial 0

OK

[root@localhost named]# service named configtest    # 可以一个命令搞定

zone localhost/IN: loaded serial 0

zone 0.0.127.in-addr.arpa/IN: loaded serial 0

[root@localhost named]# service named start    # 启动DNS服务

Generating /etc/rndc.key:                                  [确定]

启动 named:                                               [确定]

[root@localhost named]# tail /var/log/messages    # 启动过程中的信息所在文件

Jan 14 20:19:28 localhost named[2439]: automatic empty zone: 9.E.F.IP6.ARPA

Jan 14 20:19:28 localhost named[2439]: automatic empty zone: A.E.F.IP6.ARPA

Jan 14 20:19:28 localhost named[2439]: automatic empty zone: B.E.F.IP6.ARPA

Jan 14 20:19:28 localhost named[2439]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA

Jan 14 20:19:28 localhost named[2439]: command channel listening on 127.0.0.1#953

Jan 14 20:19:28 localhost named[2439]: command channel listening on ::1#953

Jan 14 20:19:28 localhost named[2439]: zone 0.0.127.in-addr.arpa/IN: loaded serial 0

Jan 14 20:19:28 localhost named[2439]: zone localhost/IN: loaded serial 0

Jan 14 20:19:28 localhost named[2439]: managed-keys-zone ./IN: loaded serial 0

Jan 14 20:19:28 localhost named[2439]: running    # running

[root@localhost named]# getenforce    # 查看selinux启动状态

Enforcing    # 此时为启动状态,应关闭

[root@localhost named]# setenforce 0    # 临时性关闭

[root@localhost named]# getenforce

Permissive    # 成功

[root@localhost named]# netstat -tulnp    # 查看监听的端口,默认监听tcp和udp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1010/php-fpm       

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1162/mysqld        

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      2026/nginx         

tcp        0      0 192.168.1.102:53            0.0.0.0:*                   LISTEN      2439/named          

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      2439/named          

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1025/sshd          

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      2439/named          

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1129/sendmail      

tcp        0      0 :::22                       :::*                        LISTEN      1025/sshd          

tcp        0      0 ::1:953                     :::*                        LISTEN      2439/named         

udp        0      0 192.168.1.102:53            0.0.0.0:*                               2439/named          

udp        0      0 127.0.0.1:53                0.0.0.0:*                               2439/named          

udp        0      0 0.0.0.0:68                  0.0.0.0:*                               2004/dhclient

[root@localhost named]# vim /etc/resolv.conf    # 测试能不能解析主机名

nameserver 192.168.1.102    # 改为指向本机地址

[root@localhost named]# dig -t NS . @A.root-servers.net.    # 测试是否能找到根的位置,结果可以

[root@localhost named]# ping www.magedu.com    # 直接上互联网测试,由于本机不负责解析www.magedu.com,所以去找根,结果可以找到

PING www.magedu.com (122.10.114.6) 56(84) bytes of data.

64 bytes from 122.10.114.6: icmp_seq=1 ttl=51 time=74.1 ms

64 bytes from 122.10.114.6: icmp_seq=2 ttl=52 time=73.7 ms

 

[root@localhost named]# chkconfig --list named    # 查看是否开机启动

named            0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

[root@localhost named]# chkconfig named on

[root@localhost named]# chkconfig --list named

named            0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

---------------------当前主机可以解析主机名了,缓存服务器就此配置完成---------------------

 

 

  ■ bind需要提供区域数据文件:客户端请求查询,DNS需要知道去哪查

      区域文件默认是由管理员在/var/named/目录下创建,文件名可以自定义

  ■ bind安装完成后会生成/etc/rc.d/init.d/named脚本文件,支持命令:

      start|stop|restart|status|reload|configtest

      其中configtest是检查配置文件语法错误的

  ■ 二进制程序(命令):named

 

  ■ 命令:

      named-checkzone

      named-checkconf

 

● 一般而言,先配置成缓存服务器,然后才能成为主DNS服务器,最后才是从

 

● DNS监听的协议及端口:

    53/udp:客户端发起的查询请求,因为udp不需要三次握手速度快得多

    53/tcp:从服务器到主服务器那里传输数据的时候,为了保证安全性和机密性

    953/tcp,rndc:远程

 

● DNS服务器能不能指向此主机,取决于此主机能不能给它递归,而这些都需要进行配置

 

● SOCKET:套接字

    ♦ IP:PORT

        ip+端口,这就是套接字,使客户端通过这样一个机制让两个位于不同主机上的进程进行通信

    ♦ 服务器端一般都会监听在某个套接字上,作为客户端的访问入口

        如果监听在此套接字:172.16.100.1:53就只能接收172.16.100.1的查询请求

        如果监听在此套接字:127.0.0.1将无法接收外网的查询请求

        如果监听在此套接字:0.0.0.0:53表示所有地址的53号端口都不再监听

    ♦ 只要能接收客户端请求都应该监听在套接字上

 

● 配置

  ■ 域:mageedu.com  ip网段:172.16.100.0/24,并且在.com上已经授权给当前主机来解析  

  ■ 规划:

      ns    172.16.100.1

      www   172.16.100.1,172.16.100.3  有两个地址

      mail  172.16.100.2

      ftp    www    在www主机上,所以是www的别名

  ■ 定义自己负责的区域,首先实现正向解析:

[root@localhost named]# vim /etc/named.conf    # 打开配置文件,新增一个区

zone "mageedu.com" IN {

        type master;    # 此时没有其他主DNS服务器

        file "mageedu.com.zone";    # 此文件手动建立,文件名做到见名知意

};

[root@localhost named]# named-checkconf    # 检查语法,只能检查语法错误不能检查逻辑错误

[root@localhost named]# service named restart

停止 named:.                                              [确定]

启动 named

Error in named configuration:

zone localhost/IN: loaded serial 0

zone 0.0.127.in-addr.arpa/IN: loaded serial 0

zone mageedu.com/IN: loading from master file mageedu.com.zone failed: file not found

zone mageedu.com/IN: not loaded due to errors.

_default/mageedu.com/IN: file not found

                                                           [失败]    # 文件还没建立报错是必然的

[root@localhost named]# cd /var/named

[root@localhost named]# vim mageedu.com.zone    # 开始创建区域文件,区域数据文件里面只能存放资源记录

$TTL 600    # 首先定义全局TTL,因为ttl不是一条记录需要使用$引用,声明任何宏的时候需要加$

@      IN    SOA    ns1.mageedu.com.    admin.mageedu.com. (    # @:由于主配置文件中已经定义可以简写为@

                        20150117

                        1H

                        5M

                        2D

                        6H )

     IN    NS    ns1    # ns记录,得先说明这个域的域名服务器是谁,区域名为空白表示和上面相同,ns1为简写会自动补齐为ns1.mageedu.com.

     IN    MX  10  mail    # MX记录

ns1  IN    A       192.168.1.102    # 为DNS服务器即是本机地址指错了也没关系,不在本机用,真正解析本机DNS服务器的是来自父域中的记录

mail IN    A       192.168.1.104

www  IN    A       192.168.1.102    # 有FQDN就必须要有A记录

www  IN    A       192.168.1.103

ftp  IN    CNAME   www    # 别名不是具体的名字,而是某个名字的别名

 

[root@localhost named]# chmod 640 mageedu.com.zone

[root@localhost named]# chown root:named mageedu.com.zone

[root@localhost named]# ll

总用量 36

drwxr-x---. 6 root  named 4096 1月   9 08:38 chroot

drwxrwx---. 2 named named 4096 12月 12 10:22 data

drwxrwx---. 2 named named 4096 12月 12 10:22 dynamic

-rw-r-----. 1 root  named  408 1月  14 22:01 mageedu.com.zone

-rw-r-----. 1 root  named 2075 4月  23 2014 named.ca

-rw-r-----. 1 root  named  152 12月 15 2009 named.empty

-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost

-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback

drwxrwx---. 2 named named 4096 12月 12 10:22 slaves

[root@localhost named]# named-checkzone "mageedu.com" /var/named/mageedu.com.zone    # 语法检查

zone mageedu.com/IN: loaded serial 20150117

OK

[root@localhost named]# service named restart    # 重启完成

停止 named:                                               [确定]

启动 named:                                               [确定]

 

 

● 常用的命令:

  ■ dig:

    dig -t RT(指定资源记录类型) NAME(要查的名称) @IP(DNS服务器)

        # -t还可以指定:

            axfr:完全区域传送

            ixfr:增量区域传送

        # @IP:不经过互联网中间环节,直接去此IP查询答案

    dig -t NS mageedu.com:查mageedu.com的DNS服务器

    +recurse:递归

    +norecurse:不递归查询

    +trace:追踪查询

  反向查询:

  dig -x IP:查询ip对应的主机名

[root@localhost ~]# vim /etc/resolv.conf

nameserver 192.168.1.102    # 改为本机地址

[root@localhost named]# dig -t A www.mageedu.com    # 查询www.mageedu.com的A记录

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t A www.mageedu.com

;; global options: +cmd

;; Got answer:

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

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

 

;; QUESTION SECTION:    # 问题

;www.mageedu.com.       IN  A

 

;; ANSWER SECTION:    # 回答

www.mageedu.com.    600 IN  A   192.168.1.102

www.mageedu.com.    600 IN  A   192.168.1.103

 

;; AUTHORITY SECTION:    # 权威段,ns1.mageedu.com.是mageedu.com.的权威DNS服务器

mageedu.com.        600 IN  NS  ns1.mageedu.com.

 

;; ADDITIONAL SECTION:    # 附加段,任何NS记录都要有A记录与之相随

ns1.mageedu.com.    600 IN  A   192.168.1.102

 

;; Query time: 7 msec

;; SERVER: 192.168.1.102#53(192.168.1.102)

;; WHEN: Thu Jan 15 13:23:55 2015

;; MSG SIZE  rcvd: 99

[root@localhost named]# dig -t A www.mageedu.com    # 第二次查询

;; ANSWER SECTION:

www.mageedu.com.    600 IN  A   192.168.1.102    # 192.168.1.102在上,这就是DNS的负载均衡

www.mageedu.com.    600 IN  A   192.168.1.103

[root@localhost named]# dig -t CNAME ftp.mageedu.com    # 查询CNAME

;; ANSWER SECTION:

ftp.mageedu.com.    600 IN  CNAME   www.mageedu.com.

[root@localhost named]# dig -t NS mageedu.com.    # 查询mageedu.com.域内DNS服务器

;; ANSWER SECTION:

mageedu.com.        600 IN  NS  ns1.mageedu.com.

 

;; ADDITIONAL SECTION:

ns1.mageedu.com.    600 IN  A   192.168.1.102

[root@localhost named]# dig -t MX mageedu.com.    # mail和ns对应的名称只能是域,而不是具体的主机

;; ANSWER SECTION:

mageedu.com.        600 IN  MX  10 mail.mageedu.com.

 

;; AUTHORITY SECTION:

mageedu.com.        600 IN  NS  ns1.mageedu.com.

 

;; ADDITIONAL SECTION:

mail.mageedu.com.   600 IN  A   192.168.1.104

ns1.mageedu.com.    600 IN  A   192.168.1.102

[root@localhost named]# dig -t SOA mageedu.com.

;; ANSWER SECTION:

mageedu.com.        600 IN  SOA ns1.mageedu.com. admin.mageedu.com. 20150117 3600 300 172800 21600

 

  ■ host:

    host -t RT NAME:查询名称的解析结果

[root@localhost named]# host -t A www.mageedu.com

www.mageedu.com has address 192.168.1.102

www.mageedu.com has address 192.168.1.103

[root@localhost named]# host -t NS mageedu.com

mageedu.com name server ns1.mageedu.com.

[root@localhost named]# host -t MX mageedu.com

mageedu.com mail is handled by 10 mail.mageedu.com.

[root@localhost named]# host -t SOA mageedu.com

mageedu.com has SOA record ns1.mageedu.com. admin.mageedu.com. 20150117 3600 300 172800 21600

 

  ■ nslookup:工作在交互式和命令行模式并支持windows

   

● 配置反向解析:

[root@localhost named]# vim /etc/named.conf    # 新增反向区域

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

        type master;    # 仍然是主DNS

        file "192.168.1.zone";

};

[root@localhost named]# cp mageedu.com.zone 192.168.1.zone -p    # 以正向文件作为反向文件的模板连同权限一起复制

[root@localhost named]# ll

总用量 40

-rw-r-----  1 root  named  413 1月  15 13:53 192.168.1.zone

[root@localhost named]# vim 192.168.1.zone

$TTL 600

@    IN    SOA    ns1.mageedu.com.    admin.mageedu.com. (    # SOA保持不变

                        20150117

                        1H

                        5M

                        2D

                        6H )

     IN    NS      ns1.mageedu.com.

102  IN    PTR     ns1.mageedu.com.

102  IN    PTR     www.mageedu.com.

104  IN    PTR     mail.mageedu.com.

103  IN    PTR     www.mageedu.com.

# 102都为简写

# 反向区域文件中不需要MX记录

# 别名为正向也不需要

[root@localhost named]# named-checkconf    # 检查语法

[root@localhost named]# named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone    # 检查语法

zone 1.168.192.in-addr.arpa/IN: loaded serial 20150117

OK

[root@localhost named]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost ~]# dig -x 192.168.1.102    # 测试

;; QUESTION SECTION:

;102.1.168.192.in-addr.arpa.    IN  PTR

 

;; ANSWER SECTION:

102.1.168.192.in-addr.arpa. 600 IN  PTR www.mageedu.com.

102.1.168.192.in-addr.arpa. 600 IN  PTR ns1.mageedu.com.

 

;; AUTHORITY SECTION:

1.168.192.in-addr.arpa. 600 IN  NS  ns1.mageedu.com.

 

;; ADDITIONAL SECTION:

ns1.mageedu.com.    600 IN  A   192.168.1.102

 

 

● 当我们DNS服务器建立起来后不能随意给其他人进行递归

[root@localhost named]# dig -t A www.qq.com @192.168.1.102    # 通过本机给www.qq.com解析

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t A www.qq.com @192.168.1.102

;; global options: +cmd

;; Got answer:

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

;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

 

;; QUESTION SECTION:

;www.qq.com.            IN  A

 

;; ANSWER SECTION:

www.qq.com.     300 IN  A   101.226.103.106

www.qq.com.     300 IN  A   101.226.129.158

 

;; AUTHORITY SECTION:

www.qq.com.     86400   IN  NS  ns-tel2.qq.com.

www.qq.com.     86400   IN  NS  ns-tel1.qq.com.

 

;; ADDITIONAL SECTION:

ns-tel2.qq.com.     3600    IN  A   183.60.3.202

ns-tel1.qq.com.     600 IN  A   101.226.66.18

ns-tel1.qq.com.     600 IN  A   182.140.167.155

# 默认是开启递归功能的,因为www.qq.com并不是本DNS负责的域,但还是解析出来了

 

[root@localhost named]# dig +norecurse -t A www.baidu.com @192.168.1.102    # +norecurse:不开启递归

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> +norecurse -t A www.baidu.com @192.168.1.102

;; global options: +cmd

;; Got answer:

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

;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14

 

;; QUESTION SECTION:

;www.baidu.com.         IN  A

 

;; AUTHORITY SECTION:

com.            172729  IN  NS  m.gtld-servers.net.

com.            172729  IN  NS  d.gtld-servers.net.

com.            172729  IN  NS  a.gtld-servers.net.

com.            172729  IN  NS  i.gtld-servers.net.

com.            172729  IN  NS  l.gtld-servers.net.

com.            172729  IN  NS  k.gtld-servers.net.

com.            172729  IN  NS  g.gtld-servers.net.

com.            172729  IN  NS  h.gtld-servers.net.

com.            172729  IN  NS  j.gtld-servers.net.

com.            172729  IN  NS  b.gtld-servers.net.

com.            172729  IN  NS  e.gtld-servers.net.

com.            172729  IN  NS  c.gtld-servers.net.

com.            172729  IN  NS  f.gtld-servers.net.

 

;; ADDITIONAL SECTION:

j.gtld-servers.net. 172729  IN  A   192.48.79.30

b.gtld-servers.net. 172729  IN  A   192.33.14.30

b.gtld-servers.net. 172729  IN  AAAA    2001:503:231d::2:30

g.gtld-servers.net. 172729  IN  A   192.42.93.30

m.gtld-servers.net. 172729  IN  A   192.55.83.30

l.gtld-servers.net. 172729  IN  A   192.41.162.30

c.gtld-servers.net. 172729  IN  A   192.26.92.30

h.gtld-servers.net. 172729  IN  A   192.54.112.30

a.gtld-servers.net. 172729  IN  A   192.5.6.30

a.gtld-servers.net. 172729  IN  AAAA    2001:503:a83e::2:30

f.gtld-servers.net. 172729  IN  A   192.35.51.30

i.gtld-servers.net. 172729  IN  A   192.43.172.30

d.gtld-servers.net. 172729  IN  A   192.31.80.30

e.gtld-servers.net. 172729  IN  A   192.12.94.30

 

;; Query time: 3 msec

;; SERVER: 192.168.1.102#53(192.168.1.102)

;; WHEN: Thu Jan 15 15:42:34 2015

;; MSG SIZE  rcvd: 503

# 让我们去找根

 

[root@localhost named]# dig +norecurse -t A www.baidu.com @a.gtld-servers.net.    # 那我们就去找根

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> +norecurse -t A www.baidu.com @a.gtld-servers.net.

;; global options: +cmd

;; Got answer:

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

;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL: 5

 

;; QUESTION SECTION:

;www.baidu.com.         IN  A

 

;; AUTHORITY SECTION:

baidu.com.      172800  IN  NS  dns.baidu.com.

baidu.com.      172800  IN  NS  ns2.baidu.com.

baidu.com.      172800  IN  NS  ns3.baidu.com.

baidu.com.      172800  IN  NS  ns4.baidu.com.

baidu.com.      172800  IN  NS  ns7.baidu.com.

 

;; ADDITIONAL SECTION:

dns.baidu.com.      172800  IN  A   202.108.22.220

ns2.baidu.com.      172800  IN  A   61.135.165.235

ns3.baidu.com.      172800  IN  A   220.181.37.10

ns4.baidu.com.      172800  IN  A   220.181.38.10

ns7.baidu.com.      172800  IN  A   119.75.219.82

# 只返回了baidu DNS的结果

 

[root@localhost named]# dig +norecurse -t A www.baidu.com @dns.baidu.com.    # 继续查询

;; ANSWER SECTION:

www.baidu.com.      1200    IN  CNAME   www.a.shifen.com.

 

;; AUTHORITY SECTION:

a.shifen.com.       1200    IN  NS  ns5.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns4.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns1.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns3.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns2.a.shifen.com.

 

;; ADDITIONAL SECTION:

ns1.a.shifen.com.   1200    IN  A   61.135.165.224

ns2.a.shifen.com.   1200    IN  A   180.149.133.241

ns3.a.shifen.com.   1200    IN  A   61.135.162.215

ns4.a.shifen.com.   1200    IN  A   115.239.210.176

ns5.a.shifen.com.   1200    IN  A   119.75.222.17

# 不递归查询就不会返回正确答案

 

[root@localhost named]# dig +trace -t A www.baidu.com @192.168.1.102    # 进行追踪

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> +trace -t A www.baidu.com @192.168.1.102

;; global options: +cmd

.           516943  IN  NS  a.root-servers.net.

.           516943  IN  NS  l.root-servers.net.

.           516943  IN  NS  b.root-servers.net.

.           516943  IN  NS  e.root-servers.net.

.           516943  IN  NS  j.root-servers.net.

.           516943  IN  NS  k.root-servers.net.

.           516943  IN  NS  g.root-servers.net.

.           516943  IN  NS  i.root-servers.net.

.           516943  IN  NS  h.root-servers.net.

.           516943  IN  NS  f.root-servers.net.

.           516943  IN  NS  d.root-servers.net.

.           516943  IN  NS  m.root-servers.net.

.           516943  IN  NS  c.root-servers.net.

;; Received 496 bytes from 192.168.1.102#53(192.168.1.102) in 4367 ms

 

com.            172800  IN  NS  a.gtld-servers.net.

com.            172800  IN  NS  b.gtld-servers.net.

com.            172800  IN  NS  c.gtld-servers.net.

com.            172800  IN  NS  d.gtld-servers.net.

com.            172800  IN  NS  e.gtld-servers.net.

com.            172800  IN  NS  f.gtld-servers.net.

com.            172800  IN  NS  g.gtld-servers.net.

com.            172800  IN  NS  h.gtld-servers.net.

com.            172800  IN  NS  i.gtld-servers.net.

com.            172800  IN  NS  j.gtld-servers.net.

com.            172800  IN  NS  k.gtld-servers.net.

com.            172800  IN  NS  l.gtld-servers.net.

com.            172800  IN  NS  m.gtld-servers.net.

;; Received 491 bytes from 192.203.230.10#53(192.203.230.10) in 6377 ms

 

baidu.com.      172800  IN  NS  dns.baidu.com.

baidu.com.      172800  IN  NS  ns2.baidu.com.

baidu.com.      172800  IN  NS  ns3.baidu.com.

baidu.com.      172800  IN  NS  ns4.baidu.com.

baidu.com.      172800  IN  NS  ns7.baidu.com.

;; Received 201 bytes from 192.31.80.30#53(192.31.80.30) in 658 ms

 

www.baidu.com.      1200    IN  CNAME   www.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns1.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns4.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns5.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns3.a.shifen.com.

a.shifen.com.       1200    IN  NS  ns2.a.shifen.com.

;; Received 228 bytes from 202.108.22.220#53(202.108.22.220) in 73 ms

# .-->com.-->baidu.com.-->www.badu.com.

 

[root@localhost ~]# vim /etc/named.conf    # 打开全局配置

options {

        directory "/var/named";

        #recursion yes;    # 开启递归,即使不定义默认也是开启的,但是这会给任何人递归,所以注释掉

        #allow-query    # 只允许某些主机递归,很少使用

        allow-recursion { 192.168.1.0/24; };    # 只给此网段的ip递归

};

 

[root@localhost named]# service named reload

重新载入named:                                             [确定]

[root@localhost named]# dig +recurse -t A www.baidu.com @192.168.1.102    # 可以查询答案

;; QUESTION SECTION:

;www.baidu.com.         IN  A

 

;; ANSWER SECTION:

www.baidu.com.      1200    IN  CNAME   www.a.shifen.com.

www.a.shifen.com.   300 IN  A   115.239.211.112

www.a.shifen.com.   300 IN  A   115.239.210.27

[root@localhost named]# dig +recurse -t A www.baidu.com @127.0.0.1    # 由于只能给192网段递归导致本机都递归不了

;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; WARNING: recursion requested but not available

 

[root@localhost named]# dig -t axfr mageedu.com    # 列出区域内所有数据,这样能随便列出来是很不安全的

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t axfr mageedu.com

;; global options: +cmd

mageedu.com.        600 IN  SOA ns1.mageedu.com. admin.mageedu.com. 20150117 3600 300 172800 21600

mageedu.com.        600 IN  NS  ns1.mageedu.com.

mageedu.com.        600 IN  MX  10 mail.mageedu.com.

ftp.mageedu.com.    600 IN  CNAME   www.mageedu.com.

mail.mageedu.com.   600 IN  A   192.168.1.104

ns1.mageedu.com.    600 IN  A   192.168.1.102

www.mageedu.com.    600 IN  A   192.168.1.102

www.mageedu.com.    600 IN  A   192.168.1.103

mageedu.com.        600 IN  SOA ns1.mageedu.com. admin.mageedu.com. 20150117 3600 300 172800 21600

 

[root@localhost named]# dig -t IXFR=20150117 mageedu.com    # 列出指定版本号相对于当前版本号所做出的改变

 

 

 

● 配置区域传送:

  ■ 区域传送只能允许从服务器进行,其他任何ip都不可以

[root@localhost ~]# vim /etc/named.conf    # 打开全局配置

options {

        directory "/var/named";

        allow-recursion { 192.168.1.0/24; };

};

 

zone "." IN {

        type hint;

        file "named.ca";

};

 

zone "localhost" IN {

        type master;

        file "named.localhost";

        allow-transfer { none; };    # 因为本机不能作为任何从服务器,allow-transfer可以放在全局配置中

};

 

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

        type master;

        file "named.loopback";

        allow-transfer { none; };

};

 

zone "mageedu.com" IN {

        type master;

        file "mageedu.com.zone";

        allow-transfer { 192.168.1.104; };    # 只允许从服务器

};

 

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

        type master;

        file "192.168.1.zone";

        allow-transfer { 192.168.1.104; };

};

[root@localhost named]# named-checkconf

[root@localhost named]# service named reload

重新载入named:                                             [确定]

[root@localhost named]# dig -t axfr mageedu.com    # 由于本机ip并不是192.168.1.104,所以无法查看

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t axfr mageedu.com

;; global options: +cmd

; Transfer failed.

 

[root@localhost ~]# ifconfig    # ip为192.168.1.104

eth1      Link encap:Ethernet  HWaddr 00:0C:29:3A:03:E7 

          inet addr:192.168.1.104  Bcast:192.168.1.255  Mask:255.255.255.0

[root@localhost ~]# dig -t axfr mageedu.com @192.168.1.102    # 换ip为192.168.1.104就OK

 

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1 <<>> -t axfr mageedu.com @192.168.1.102

;; global options: +cmd

mageedu.com.        600 IN  SOA ns1.mageedu.com. admin.mageedu.com. 20150117 3600 300 172800 21600

mageedu.com.        600 IN  NS  ns1.mageedu.com.

mageedu.com.        600 IN  MX  10 mail.mageedu.com.

ftp.mageedu.com.    600 IN  CNAME   www.mageedu.com.

mail.mageedu.com.   600 IN  A   192.168.1.104

ns1.mageedu.com.    600 IN  A   192.168.1.102

www.mageedu.com.    600 IN  A   192.168.1.102

www.mageedu.com.    600 IN  A   192.168.1.103

mageedu.com.        600 IN  SOA ns1.mageedu.com. admin.mageedu.com. 20150117 3600 300 172800 21600

 

● 配置从服务器,高亮表示从服务器端

[root@localhost ~]# ifconfig    # ip为192.168.1.104,将这台主机配置为从服务器

eth1      Link encap:Ethernet  HWaddr 00:0C:29:3A:03:E7 

          inet addr:192.168.1.104  Bcast:192.168.1.255  Mask:255.255.255.0

 

[root@localhost ~]# yum install  bind-utils  bind-libs bind    # 安装bind

 

[root@localhost var]# ll -d named    # 从服务器的区域文件不是手动建立而是以named进程去同步主服务器而成的,named进程的属主属组都是named,由于/var/named目录named并不具备写权限,所以同步文件并不能放在此目录下

drwxr-x---. 6 root named 4096 1月  15 20:19 named

[root@localhost var]# cd named/

[root@localhost named]# ll

总用量 40

-rw-r-----  1 root  named  392 1月  15 14:42 192.168.1.zone

drwxr-x---. 6 root  named 4096 1月   9 08:38 chroot

drwxrwx---. 2 named named 4096 12月 12 10:22 data

drwxrwx---. 2 named named 4096 12月 12 10:22 dynamic

-rw-r-----  1 root  named  413 1月  15 13:53 mageedu.com.zone

-rw-r-----. 1 root  named 2075 4月  23 2014 named.ca

-rw-r-----. 1 root  named  152 12月 15 2009 named.empty

-rw-r-----. 1 root  named  152 6月  21 2007 named.localhost

-rw-r-----. 1 root  named  168 12月 15 2009 named.loopback

drwxrwx---. 2 named named 4096 12月 12 10:22 slaves    # 存放此目录中再好不过

 

[root@localhost ~]# setenforce 0

[root@localhost ~]# mv /etc/named.conf /etc/named.conf.bak

[root@localhost ~]# scp 192.168.1.102:/etc/named.conf /etc/    # 从主服务器直接下载作为模板

root@192.168.1.102‘s password:

named.conf  

 

[root@localhost ~]# vim /etc/named.conf

options {

        directory "/var/named";

        allow-recursion { 192.16; };

};

 

zone "." IN {

        type hint;

        file "named.ca";

};

 

zone "localhost" IN {

        type master;

        file "named.localhost";

        allow-transfer { none; };

};

 

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

        type master;

        file "named.loopback";

        allow-transfer { none; };

};

 

zone "mageedu.com" IN {

        type slave;    # 从服务器

        file "slaves/mageedu.com.zone";    # 指定文件所在位置

        masters { 192.168.1.102; };    # 指定主服务器

        allow-transfer { none; };    # 没有设定从的从之前肯定是不允许的

};

 

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

        type slave;

        file "slaves/192.168.1.zone";

        masters { 192.168.1.102; };

        allow-transfer { none; };

 

[root@localhost ~]# named-checkconf

[root@localhost ~]# chgrp named /etc/named.conf

[root@localhost ~]# ll !$

ll /etc/named.conf

-rw-r-----. 1 root named 717 1月   3 15:16 /etc/named.conf

 

[root@localhost named]# vim mageedu.com.zone

$TTL 600

@    IN    SOA    ns1.mageedu.com.    admin.mageedu.com. (

                        2015011701

                        1H

                        5M

                        2D

                        6H )

     IN    NS      ns1

     IN    NS      ns2    # 将新增的从DNS服务器加入

     IN    MX  10  mail

ns1  IN    A       192.168.1.102

ns2  IN    A       192.168.1.104    # 任何NS记录都要有A记录与之相随

mail IN    A       192.168.1.104

www  IN    A       192.168.1.102

www  IN    A       192.168.1.103

ftp  IN    CNAME   www

 

[root@localhost named]# vim 192.168.1.zone

$TTL 600

@    IN    SOA    ns1.mageedu.com.    admin.mageedu.com. (

                        2015011701

                        1H

                        5M

                        2D

                        6H )

     IN    NS      ns1.mageedu.com.

     IN    NS      ns2.mageedu.com.    # 反区域文件中同样加入

102  IN    PTR     ns1.mageedu.com.

102  IN    PTR     www.mageedu.com.

104  IN    PTR     ns2.mageedu.com.    # 反区域文件中同样加入

104  IN    PTR     mail.mageedu.com.

103  IN    PTR     www.mageedu.com.

[root@localhost named]# service named reload

重新载入named:                                             [确定]

[root@localhost ~]# service named start

启动 named:                                               [确定]

 

[root@localhost named]# tail /var/log/messages

Jan 15 20:18:11 localhost named[3532]: client 192.168.1.104#43721: bad zone transfer request: ‘megeedu.com/IN‘: non-authoritative zone (NOTAUTH)

Jan 15 20:20:04 localhost named[3532]: client 192.168.1.104#42600: transfer of ‘mageedu.com/IN‘: AXFR started

Jan 15 20:20:04 localhost named[3532]: client 192.168.1.104#42600: transfer of ‘mageedu.com/IN‘: AXFR ended

Jan 15 20:56:14 localhost dhclient[1355]: DHCPREQUEST on eth0 to 192.168.1.1 port 67 (xid=0xdd28e1)

Jan 15 20:56:14 localhost dhclient[1355]: DHCPACK from 192.168.1.1 (xid=0xdd28e1)

Jan 15 20:56:16 localhost dhclient[1355]: bound to 192.168.1.102 -- renewal in 3218 seconds.

Jan 15 21:27:44 localhost named[3532]: client 192.168.1.104#43665: transfer of ‘mageedu.com/IN‘: AXFR started

Jan 15 21:27:44 localhost named[3532]: client 192.168.1.104#43665: transfer of ‘mageedu.com/IN‘: AXFR ended

Jan 15 21:27:45 localhost named[3532]: client 192.168.1.104#54698: transfer of ‘1.168.192.in-addr.arpa/IN‘: AXFR started

Jan 15 21:27:45 localhost named[3532]: client 192.168.1.104#54698: transfer of ‘1.168.192.in-addr.arpa/IN‘: AXFR ended

 

[root@localhost ~]# tail /var/log/messages

# 如果同步失败请关闭iptables

 [root@localhost ~]# cd /var/named/slaves/

[root@localhost slaves]# ls

192.168.1.zone  mageedu.com.zone

[root@localhost slaves]# cat mageedu.com.zone

$ORIGIN .    # ORIGIN和TTL可以声明多次,到下次声明之间的区域就是此ORIGIN生效的区域

$TTL 600        ; 10 minutes

mageedu.com             IN SOA  ns1.mageedu.com. admin.mageedu.com. (

                                2015011701   ; serial

                                3600       ; refresh (1 hour)

                                300        ; retry (5 minutes)

                                172800     ; expire (2 days)

                                21600      ; minimum (6 hours)

                                )

            NS  ns1.mageedu.com.

            NS  ns2.mageedu.com.

            MX  10 mail.mageedu.com.

$ORIGIN mageedu.com.

ftp         CNAME   www

mail            A   192.168.1.104

ns1         A   192.168.1.102

ns2         A   192.168.1.104

www         A   192.168.1.102

            A   192.168.1.103

[root@localhost slaves]# cat 192.168.1.zone

$ORIGIN .

$TTL 600    ; 10 minutes

1.168.192.in-addr.arpa  IN SOA  ns1.mageedu.com. admin.mageedu.com. (

                2015011701   ; serial

                3600       ; refresh (1 hour)

                300        ; retry (5 minutes)

                172800     ; expire (2 days)

                21600      ; minimum (6 hours)

                )

            NS  ns1.mageedu.com.

            NS  ns2.mageedu.com.

$ORIGIN 1.168.192.in-addr.arpa.

102         PTR ns1.mageedu.com.

            PTR www.mageedu.com.

103         PTR www.mageedu.com.

104         PTR ns2.mageedu.com.

            PTR mail.mageedu.com.

[root@localhost named]# tail /var/log/messages    # 查看日志,一定要习惯看日志

Jan 15 21:27:45 localhost named[3532]: client 192.168.1.104#54698: transfer of ‘1.168.192.in-addr.arpa/IN‘: AXFR ended

Jan 15 21:45:23 localhost named[3532]: received control channel command ‘reload‘

Jan 15 21:45:23 localhost named[3532]: loading configuration from ‘/etc/named.conf‘

Jan 15 21:45:23 localhost named[3532]: using default UDP/IPv4 port range: [1024, 65535]

Jan 15 21:45:23 localhost named[3532]: using default UDP/IPv6 port range: [1024, 65535]

Jan 15 21:45:23 localhost named[3532]: sizing zone task pool based on 5 zones

Jan 15 21:45:23 localhost named[3532]: Warning: ‘empty-zones-enable/disable-empty-zone‘ not set: disabling RFC 1918 empty zones

Jan 15 21:45:23 localhost named[3532]: reloading configuration succeeded

Jan 15 21:45:23 localhost named[3532]: reloading zones succeeded    # 成功

Jan 15 21:45:23 localhost named[3532]: zone mageedu.com/IN: loaded serial 20150118

 

 [root@localhost slaves]# cat mageedu.com.zone

$ORIGIN .

$TTL 600    ; 10 minutes

mageedu.com     IN SOA  ns1.mageedu.com. admin.mageedu.com. (

                20150118   ; serial

                3600       ; refresh (1 hour)

                300        ; retry (5 minutes)

                172800     ; expire (2 days)

                21600      ; minimum (6 hours)

                )

            NS  ns1.mageedu.com.

            NS  ns2.mageedu.com.

            MX  10 mail.mageedu.com.

$ORIGIN mageedu.com.

ftp         CNAME   www

imap            A   192.168.1.105

mail            A   192.168.1.104

ns1         A   192.168.1.102

ns2         A   192.168.1.104

www         A   192.168.1.102

            A   192.168.1.103

[root@localhost slaves]# cat 192.168.1.zone

$ORIGIN .

$TTL 600    ; 10 minutes

1.168.192.in-addr.arpa  IN SOA  ns1.mageedu.com. admin.mageedu.com. (

                20150117   ; serial

                3600       ; refresh (1 hour)

                300        ; retry (5 minutes)

                172800     ; expire (2 days)

                21600      ; minimum (6 hours)

                )

            NS  ns1.mageedu.com.

            NS  ns2.mageedu.com.

$ORIGIN 1.168.192.in-addr.arpa.

102         PTR ns1.mageedu.com.

            PTR www.mageedu.com.

103         PTR www.mageedu.com.

104         PTR ns2.mageedu.com.

            PTR mail.mageedu.com.

测试增量传送

[root@localhost named]# vim /etc/named.conf

$TTL 600

@    IN    SOA    ns1.mageedu.com.    admin.mageedu.com. (

                        2015011702    # 版本号+1

                        1H

                        5M

                        2D

                        6H )

     IN    NS      ns1

     IN    NS      ns2

     IN    MX  10  mail

ns1  IN    A       192.168.1.102

ns2  IN    A       192.168.1.104

mail IN    A       192.168.1.104

www  IN    A       192.168.1.102

www  IN    A       192.168.1.103

ftp  IN    CNAME   www

imap IN    A       192.168.1.105    # 新增一行

[root@localhost ~]# service named reload

重新载入named:                                             [确定]

[root@localhost ~]# tail /var/log/messages    # 确认增量传送进行完成,可以去从端确认

 

● 主从两个DNS服务器中各有正向反向两个区域文件,ns1是正向的主反向的从,ns2是正向的从反向的主是没有任何问题的

 

● rndc:远程控制DNS服务器的工具,远程连接一般是不开放的,因为相当危险

  ■ 首先需要提供一个key文件实现远程控制

[root@localhost ~]# rndc-confgen > /etc/rndc.conf

[root@localhost ~]# vim !$

# Start of rndc.conf

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  中间才是key  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

key "rndc-key" {   

        algorithm hmac-md5;

        secret "/REHC9Bic/s+rA5DEJ1dgw==";

};

 

options {

        default-key "rndc-key";

        default-server 127.0.0.1;

        default-port 953;

};

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  中间才是key  ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

# End of rndc.conf

 

# Use with the following in named.conf, adjusting the allow list as needed:

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  中间需放在name.conf中,并且取消注释  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

# key "rndc-key" {

#       algorithm hmac-md5;

#       secret "/REHC9Bic/s+rA5DEJ1dgw==";

# };

#

# controls {

#       inet 127.0.0.1 port 953

#               allow { 127.0.0.1; } keys { "rndc-key"; };

# };

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  中间需放在name.conf中,并且取消注释  ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

# End of named.conf

:.,$-1w >> /etc/named.conf    # 追加至/etc/named.conf

[root@localhost ~]# vim /etc/named.conf

:.,$s/^# //g    # 取消注释

[root@localhost ~]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost ~]# rndc -c /etc/rndc.conf status    # -c:指定配置文件,不指定也没关系rndc本身就是独立的配置文件

version: 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.1

CPUs found: 4

worker threads: 4

number of zones: 20

debug level: 0

xfers running: 0    # 是否发生区域传送

xfers deferred: 0

soa queries in progress: 0

query logging is OFF

recursive clients: 0/0/1000

tcp clients: 0/100

server is up and running

[root@localhost ~]# rndc -c /etc/rndc.conf notify "mageedu.com"    # 通知mageedu.com

zone notify queued

[root@localhost ~]# tail /var/log/messages

Jan 16 07:55:55 localhost named[1582]: zone mageedu.com/IN: sending notifies (serial 2015011702)

[root@localhost ~]# rndc -c /etc/rndc.conf flush    # 清空缓存

[root@localhost ~]# rndc -c /etc/rndc.conf stop    # 服务停止

[root@localhost ~]# rndc stop    # 和上面结果相同

[root@localhost ~]# netstat -tunlp    # 53端口没了

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1127/php-fpm       

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1295/mysqld        

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1142/sshd          

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1235/sendmail      

tcp        0      0 :::22                       :::*                        LISTEN      1142/sshd  

[root@localhost ~]# service named start

启动 named:                                               [确定]

 

---------------------------------------远程控制---------------------------------------

[root@localhost ~]# vim /etc/named.conf

controls {

        inet 192.168.1.102 port 953    # 将ip改为外网地址或者0.0.0.0

                allow { 192.168.1.104; } keys { "rndc-key"; };    # 将ip改为远程控制的ip,并且是由rndc-key进行控制

};

[root@localhost ~]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost ~]# netstat -tlnp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1127/php-fpm       

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1295/mysqld        

tcp        0      0 192.168.1.102:53            0.0.0.0:*                   LISTEN      1758/named         

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      1758/named         

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1142/sshd          

tcp        0      0 192.168.1.102:953           0.0.0.0:*                   LISTEN      1758/named    # 端口已启动

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1235/sendmail      

tcp        0      0 :::22                       :::*                        LISTEN      1142/sshd 

[root@localhost ~]# scp /etc/rndc.conf 192.168.1.104:/root/    # 将key发送到远程主机,最好不要放在对方/etc/下,以免覆盖其他人

The authenticity of host ‘192.168.1.104 (192.168.1.104)‘ can‘t be established.

RSA key fingerprint is e3:62:a9:82:4d:3a:e2:c3:68:8e:60:a1:43:35:7c:c1.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘192.168.1.104‘ (RSA) to the list of known hosts.

root@192.168.1.104‘s password:

rndc.conf                                                                                           100%  479     0.5KB/s   00:00

[root@localhost ~]# vim rndc.conf

# Start of rndc.conf

key "rndc-key" {

        algorithm hmac-md5;

        secret "/REHC9Bic/s+rA5DEJ1dgw==";

};

 

options {

        default-key "rndc-key";

        default-server 192.168.1.102    # 改成主DNS ip

        default-port 953;

[root@localhost ~]# rndc -c rndc.conf status    # 可以了

 

 

● 子域授权:

    从www.mageedu.com/fin-->www.fin.megeedu.com

  ■ 正向区域内实现授权:

      子域名称    IN    NS    子域服务器的名称(子域得有个域名服务器)

      子域服务器的名称    IN    A    IP(子域服务器的)

        # 任何ns记录都要有A记录与之相随

    ♦ 例如:

      .com

      mageedu.com.      IN    NS    ns1.mageedu.com.

                          IN    NS    ns2.megeedu.com

      ns1.mageedu.com.  IN    A     192.168.1.102

      ns2.mageedu.com.  IN    A     192.168.1.104

        # 所有DNS服务器都要写进去

 

      mageedu.com 

      fin.mageedu.com       IN    NS    ns1.fin.mageedu.com.

      ns1.fin.mageedu.com.  IN    A     192.168.1.105(无需和mageedu.com.域在同一个网段,因为.com不可能和mageedu.com在同一网段)

 

      market.mageedu.com     IN    NS    ns1.market.mageedu.com

      ns1.market.mageedu.com IN    A     192.168.1.110

        # 如果只有一台DNS服务器但写了两条DNS的记录,将会造成逻辑错误

[root@localhost named]# vim mageedu.com.zone    # 打开主DNS正向文件

                        2015011702    # 并将版本号+1

fin          IN    NS      ns1.fin    # 新增4

ns1.fin      IN    A       192.168.1.109

 

market       IN    NS      ns1.market

ns1.market   IN    A       192.168.1.110

[root@localhost ~]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost slaves]# vim /etc/named.conf    # 子域配置

 

options {

        directory "/var/named";

};

 

zone "." IN {

        type hint;

        file "named.ca";

};

 

zone "localhost" IN {

        type master;

        file "named.localhost";

        allow-transfer { none; };

};

 

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

        type master;

        file "named.loopback";

        allow-transfer { none; };

};

 

zone "fin.mageedu.com" IN {    # 新增子域

        type master;

        file "fin.mageedu.com.zone";

};

[root@localhost ~]# cd /var/named

[root@localhost named]# scp 192.168.1.102:/var/named/mageedu.com.zone .    # 直接复制

[root@localhost named]# mv mageedu.com.zone fin.mageedu.com.zone    # 更名

[root@localhost named]# chown :named fin.mageedu.com.zone    # 更改属组

[root@localhost named]# ll

总用量 32

drwxrwx---. 2 named named 4096 12月 12 10:22 data

drwxrwx---. 2 named named 4096 12月 12 10:22 dynamic

-rw-r-----. 1 root  named  663 1月   4 04:41 fin.mageedu.com.zone

 

[root@localhost named]# vim fin.mageedu.com.zone

 

$TTL 600

@        IN    SOA    ns1.fin.mageedu.com.    admin.fin.mageedu.com. (

                        2015011701

                        1H

                        5M

                        2D

                        6H )

             IN    NS      ns1

             IN    MX  10  mail

ns1          IN    A       192.168.1.105

mail         IN    A       192.168.1.109

www          IN    A       192.168.1.110

 

[root@localhost named]# service named restart

停止 named:                                               [确定]

启动 named:                                               [确定]

[root@localhost named]# dig -t A www.fin.mageedu.com @192.168.1.105    # 测试

;; ANSWER SECTION:

www.fin.mageedu.com.    600 IN  A   192.168.1.110

 

;; AUTHORITY SECTION:

fin.mageedu.com.    600 IN  NS  ns1.fin.mageedu.com.

 

;; ADDITIONAL SECTION:

ns1.fin.mageedu.com.    600 IN  A   192.168.1.105

[root@localhost named]# dig -t NS fin.mageedu.com @192.168.1.105    # 测试,NS记录对应域而不是主机名

;; ANSWER SECTION:

fin.mageedu.com.    600 IN  NS  ns1.fin.mageedu.com.

 

;; ADDITIONAL SECTION:

ns1.fin.mageedu.com.    600 IN  A   192.168.1.105

[root@localhost ~]# dig -t A ns1.fin.mageedu.com @192.168.1.102    # 在主DNS上测试

;; ANSWER SECTION:

ns1.fin.mageedu.com.    600 IN  A   192.168.1.103    # 木有问题

 

;; AUTHORITY SECTION:

fin.mageedu.com.    600 IN  NS  ns1.fin.mageedu.com.

------------------------------------定义转发,让子域能知道父域------------------------------------

[root@localhost named]# vim /etc/named.conf

options {

        directory "/var/named";

        forward first;    # 增加两行转发机制

        forwarders { 192.168.1.102; };

};

 

# forward有两个选项:only|first

  # only:转发给其他服务器,如果没有结果返回就算了

  # first:,先转发如果没有结果返回就去找根

# 设置了转发后,默认除了请求查询自身管理的域内的主机外,其他域的请求一律转走

[root@localhost named]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

 

cmd下nslookup测试:

C:\Users\Automan>nslookup

默认服务器:  UnKnown

Address:  192.168.1.1

 

> server 192.168.1.103    # 设定子域ns服务器

默认服务器:  [192.168.1.103]

Address:  192.168.1.103

 

> set q=A    # A记录

> www.fin.mageedu.com

服务器:  [192.168.1.103]

Address:  192.168.1.103

 

名称:    www.fin.mageedu.com    # 测试自己域内的主机是权威答案

Address:  192.168.1.110

 

> www.mageedu.com

服务器:  [192.168.1.103]

Address:  192.168.1.103

 

非权威应答:

名称:    www.mageedu.com    # 设置转发后就能查询到了

Address:  192.168.1.108

# 如果不是父域自己负责解析的域,子域转发给他意义不大,因为父域找根和自己找根完全一样,所以需要设定只转发查询父域的请求

[root@localhost named]# vim /etc/named.conf

options {

        directory "/var/named";    # 将两行移动到下面

};

 

zone "mageedu.com" IN {    # 新建一个转发域,当要查询mageedu.com域内的请求时

        type forward;

        forward first;

        forwarders { 192.168.1.102; };,    # 转发到此ip

};

[root@localhost named]# named-checkconf

[root@localhost named]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

> www.mageedu.com

服务器:  [192.168.1.103]

Address:  192.168.1.103

 

非权威应答:

名称:    www.mageedu.com   # 成功

Address:  192.168.1.108

 

 

● godaddy.com购买域名

 

● acl:

  ■ named.conf中的acl就相当于shell中的变量

    当允许的客户端太多的话写起来会很麻烦,而且修改起来也很不方便

    如 :allow -quert { 192.16.0.0/16; 127.0.0.0/8; 10.0.0.0/8 }

 

  ■ 格式:

    acl ACL_NAME(列表名称) {

        172.16.0.0/16

        127.0.0.0/8

    };

 

    例如:

      acl innet {

          172.16.0.0/16

          127.0.0.0/8

      };

 

        后面引用时:

      allow-auery { innet; };

 

  ■ named中内置了两个常用的列表:

      none:谁都不允许

      any:谁都可以

 

  ■ acl一般定义在文件的最上头

 

[root@localhost ~]# vim /etc/named.conf    # 打开配置文件

acl innet {    # 新增

        192.168.1.0/24;

        127.0.0.0/8;

};

 

options {

        directory "/var/named";

        allow-recursion { innet; };

        notify yes;

};

# acl的名称中间有空格的话就用引号引起来

[root@localhost ~]# service named restart    # 重启没问题

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost ~]# tail /var/log/messages    # 没报错,ok

Jan 21 14:50:59 localhost named[2098]: couldn‘t add command channel 127.0.0.1#953: not found

Jan 21 14:50:59 localhost named[2098]: couldn‘t add command channel ::1#953: not found

Jan 21 14:50:59 localhost named[2098]: zone 0.0.127.in-addr.arpa/IN: loaded serial 0

Jan 21 14:50:59 localhost named[2098]: zone 1.168.192.in-addr.arpa/IN: loaded serial 2015011701

Jan 21 14:50:59 localhost named[2098]: zone mageedu.com/IN: loaded serial 2015011708

Jan 21 14:50:59 localhost named[2098]: zone localhost/IN: loaded serial 0

Jan 21 14:50:59 localhost named[2098]: managed-keys-zone ./IN: loaded serial 0

Jan 21 14:50:59 localhost named[2098]: running

Jan 21 14:50:59 localhost named[2098]: zone 1.168.192.in-addr.arpa/IN: sending notifies (serial 2015011701)

Jan 21 14:50:59 localhost named[2098]: zone mageedu.com/IN: sending notifies (serial 2015011708)

 

 

 

● DNS智能解析功能:

    # 网站拥有多个DNS服务器时,多个DNS服务器是轮流工作的

    # 电信和联通是两个独立的网络,在一个机房有个总接口把它们连接起来了,接口的带宽为100G,这就造成了联通线路和电信线路间的访问速度很慢

    # 当一个网站被电信和联通同时访问时,如何将来自电信的请求用电信机房的地址返回呢?

        将网站的数据文件分成两个部分,来应付来自两个网络的请求

  ■ 想要使用DNS智能解析功能要用到视图view

  ■ view格式:

    view VIEW_NAME {

 

 

    }

    # 一旦定义了视图,所有的区域都必须定义在视图中

    # 根区域放在DNS服务器递归的view中

    # 划分为3个view,一个电信一个联通还有一个是内网,由于我们DNS只给内网递归所以根区域放在内网view中就行

        将192.168.1.0/24归类为电信的,其余为联通的

[root@localhost named]# cp /etc/named.conf .    # 备份配置文件

[root@localhost named]# vim /etc/named.conf   

acl innet {

        192.168.1.0/24;

        127.0.0.0/8;

};

 

options {

        directory "/var/named";

        allow-recursion { innet; };

};

 

view telecom {    # 电信

        match-clients { innet; };    # 这样一个视图是用来匹配来自什么地方的客户端的

        zone "mageedu.com" IN {

                type master;

                file "telecom.mageedu.com.zone";

        };

};

 

view unicom {    # 联通

        match-clients { any; };    # 除了电信以外的,any:所有,上面view匹配不到的下面的都能匹配到

        zone "mageedu.com" IN {

                type master;

                file "unicom.mageedu.com.zone";

        };

};

[root@localhost named]# named-checkconf

[root@localhost ~]# cd /var/named/

[root@localhost named]# vim unicom.mageedu.com.zone

$TTL 43200

@       IN      SOA     ns1.mageedu.com.        admin.mageedu.com. (

                        2015010001

                        1H

                        10M

                        7D

                        1D )

                IN      NS      NS1

                IN      MX  10  mail

ns1             IN      A       192.168.1.102

mail            IN      A       192.168.1.103

www             IN      A       192.168.1.104

[root@localhost named]# chgrp named telecom.mageedu.com.zone

[root@localhost named]# chmod 640 telecom.mageedu.com.zone

[root@localhost named]# cp telecom.mageedu.com.zone unicom.mageedu.com.zone -p

[root@localhost named]# vim unicom.mageedu.com.zone

$TTL 43200

@       IN      SOA     ns1.mageedu.com.        admin.mageedu.com. (

                        2015010001

                        1H

                        10M

                        7D

                        1D )

                IN      NS      NS1

                IN      MX  10  mail

ns1             IN      A       192.168.1.102

mail            IN      A       172.16.100.1

www             IN      A       172.16.100.2

[root@localhost named]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost named]# dig -t A www.mageedu.com @192.168.1.102    # 测试

;; ANSWER SECTION:

www.mageedu.com.    43200   IN  A   192.168.1.104    # 返回的是电信主机的地址,如果是其他网段访问返回的地址是172.16.100.2

 

;; AUTHORITY SECTION:

mageedu.com.        43200   IN  NS  NS1.mageedu.com.

 

;; ADDITIONAL SECTION:

NS1.mageedu.com.    43200   IN  A   192.168.1.102    # DNS应该都是相同的

# 由于没有其他网段的ip地址,做不了实验,但结果不会有什么问题

# 192.168.0.254和172.16.0.1在同一台主机上是允许给对方路由数据的

  ■ 一个DNS服务器可以给多个域提供解析,现在有个a.net域,如何设定a.net域不分开解析呢?

      只要将这个域写入两个view中就行,但指向的文件都应该相同

        zone "a.net" IN {

                type master;

                file "a.net.zone";

        };

 

● CDN(Content Delivery Network):

    能判断客户端的来源,并且能够返回一个距离客户端最近的服务器的地址

 

● DNS之所以解析会这么快,是因为服务在启动时会将配置文件的信息全都载入到内存中,解析都是在内存中完成的

    # 相应的,配置文件越大,服务重启速度就越慢,但是解析的速度还是一样

    # 区域定义的越多配置文件也就越大,人们后来就不再将区域的信息写入配置文件,而是写入数据库中

    # 这样的好处是即时修改即时生效,缺点是解析速度慢

    # bind-sdb.i686便可以将配置文件信息放入数据库

  ■ dnspod:中国非常著名的免费DNS提供商

     # 自己购买了域名以后,可以将自己的DNS服务器指向dnspod,并在上面留下自己的记录,就能实现智能解析

  ■ www.dns.la

 

● DNS日志系统:

[root@localhost named]# vim /etc/named.conf

options {

        directory "/var/named";

        allow-recursion { innet; };

        querylog yes;    # 只需要加入一行,便能够记录日志信息

};

[root@localhost named]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost named]# dig -t A www.mageedu.com @192.168.1.102    # 使用其他ip进行访问

[root@localhost named]# tail /var/log/messages    # 查看日志

…Jan 21 17:31:11 localhost named[2374]: client 192.168.1.103#42847: view telecom: query: www.mageedu.com IN A + (192.168.1.102)    # 详细说明,但如果记录的信息太多会非常麻烦

 

  ■ bind提供了很有弹性的日志系统,日志系统又分为两个子系统:

      ♦ channel:定义日志保存位置,一般有两个位置

        ♠ syslog:/var/log/message,syslog是分级别的

        ♠ file:自定义保存日志信息的文件,也应该定义日志级别

            critical

            error

            warning

            notice

            info

            debug[level]

            dynamic(动态级别)

            # debug和dynamic是bind独有的级别,bind的debug和syslog的不同,bind的debug是有级别的,级别数字越大,信息越详细

            # 默认是info级别

      ♦ category:产生日志的日志源,可以通过category自定义日志源

          日志源总共有15个,不能自定义其他的日志源

            default:为所有category定义默认channel

            general:普通的

            client:客户端相关

            config:配置文件中产生的问题

            dispatch:

            dnssec:

            lame-servers:

            network:跟网络相关的

            notify:跟通知相关

            queries:查询相关的

            resolver:

            security:拒绝查询请求

            update:

            xfer-in:作为从服务器来讲,别人传进来的信息

            xfer-out:传出的信息

 

        一个category可以定义到多个channel,但一个channel只能属于一个category

 

  ■ 格式:

 

      logging {

          channel my_file {    # 定义保存位置和名字

              file “log.msgs” versions 3 size 10k;    # 类型是file文件名为log.msgs,一旦文件超过10k就滚动,保存3个版本

              severity dynamic;    # 日志级别

          };

          channel my_syslog {

              syslog local0;    # 需自定义local0保存的位置

              severity info;    # info及info级别以上

          };

          category xfer-in { my_file; }    # 和xfer-in相关的信息保存至定义的文件中

          category update { my_syslog; }

      };

 

[root@localhost ~]# vim /etc/named.conf

options {

        directory "/var/named";

        allow-recursion { innet; };

        querylog yes;     # 将此行删除

};

 

logging {

        channel querylog {

                file "/var/log/named/bind_query.log" versions 5 size 10M;

                severity dynamic;

                print-category yes;

                print-time yes;

                print-severity yes;

        };

 

        category queries { querylog; };

};

[root@localhost ~]# mkdir /var/log/named

[root@localhost ~]# chown named:named !$

chown named:named /var/log/named

[root@localhost ~]# chmod 770 !$

chmod 770 /var/log/named

[root@localhost ~]# vim /etc/named.conf

[root@localhost ~]# service named restart

停止 named:.                                              [确定]

启动 named:                                               [确定]

[root@localhost ~]# dig -t A www.mageedu.com @192.168.1.102    # 查询一下

 

● queryperf:dns服务器进行压力测试,查询日志对于测试的影响是相当大的

 

● named.conf中//为注释一行 ,/*-->*/为注释多行

 

● DHCP(Dynamic Host Configuration Protocol)它的前身是bootp

 

DNS

标签:

原文地址:http://www.cnblogs.com/yuankaituo/p/4244982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!