DNS和BIND

来源:互联网 发布:淘宝店友情链接怎么弄 编辑:程序博客网 时间:2024/06/08 15:18

DNS与BIND


            
1.BIND的安装配置
                dns服务,程序报名bind,程序名named
                
                #yum list all bind*
                bind-libs.x84_64                ##64库文件
                bind-chroot.x84_64                  ##一定不要安装,会把服务圈禁在小范围内
                bind-utils.x84_64
                bind.x84_64                       ##主包
                bind-devel.x84_64                ##开发组件
                bind-devel.i686
                bind-libs.i686                    ##32位库文件
                bind-sdb.x84_64                    ##下面这两个库实现将解析库放在非文件中,放在数据库中
                bind-dyndb-lap.x84_64
                
                程序包:
                    bind            ##提供服务
                    bind-libs        ##提供库文件
                    bind-utils        ##提供测试工具
                    
                    #rpm -qi bind-libs
                    #rpm -qi bind-utils        ##测试的命令行工具,dig
                    #rpm -ql bind-utils
                    #yum info bind-chroot
                    bind-chroot:/var/named/chroot/
                
                bind:
                    服务脚本:/etc/rc.d/init.d/named
                        可以用systemctl start|status|stop等命令
                    主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key
                        rfc:请求注解文档
                        rndc:remote name domain controller,只允许控制本地,默认与bind安装在同一主机,
                        且只能通过127.0.0.1来连接named进程,提供辅助性的管理功能
                        rndc也是一个服务,953/tcp
                        rndc.key就是rndc在连接named时的域共享密钥,只能在本机进行连接
                        
                    解析库文件;/var/named/ZONE_NAME.ZONE_NAME
                    负责保存本地区域数据
                        注意:
                            (1)一台物理服务器可同时为多个区域提供解析
                            (2)必须要有根区域文件,named.ca
                            (3)应该有两个(甚至更多,如果包括IPv6的),实现localhost和本地回环的解析库
                                named.loacalhost
                                named.localback
                            
                #yum install bind -y
                #rpm -ql bind | less         ##查看安装生成的文件
                启动脚本:/etc/rc.d/init.d/named
                脚本配置文件:/etc/sysconfig/named
                /etc/sbin/named-checkconf:检查主配置文件是否还有语法错误的文件
                /etc/sbin/named-checkzone:检查区域配置文件是否还有语法错误的文件
                
                
        主配置文件:/etc/named.conf
            options{}:全局配置
            logging{}:日志子系统配置
            zone:定义一个区域,本机能够为哪些zone进行解析,就要定义哪些zone
                zone “ZONE_NAME” IN {}
                type:
            include:
            
            注意:任何服务程序如果期望其能够通过网络被其他网络被其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上
            
            #cp /etc/named.conf[,.bak]            ##把自己复制成.bak的文件
            /etc/named.conf的语法规则:
                注释://,/**/注释符不能嵌套
                {},两边需要有空格,
                每句的结尾都要有;
                
            #ss -tunlp | grep :53
            
            dnssec:关闭掉
            allow-query
            recursion:是否允许递归查询
            directory:区域解析库文件的存放路径,除了这个不可以删,其他都可删
            
2.主DNS名称服务器
                在缓存名称服务器的基础上加zone
                1)在主配置文件定义一个域
                    zone “ZONE_NAME” IN {
                        type {master|slave|hint|forward};
                        file "ZONE_NAME.znoe"
                    };
                2)定义区域解析库文件
                    出现的内容:
                        宏定义
                        资源定义
                    
                    $TTL 86400        刷新时间间隔
                    $ORIGIN magedu.com   当前区域的名字
                    @(当前区域的名字)    IN         SOA        主DNS服务器,在上级服务器定义了,        管理员邮箱地址
                                序列号
                                刷新时间
                                重试时间
                                过期时间
                                否定的最小TTL值)
                        IN     NS    ns1 | ns1.magedu.com.
                        IN    MX 10    mx1
                    ns1    IN    A    172.16.100.11
                    mx2    IN    A     172.16.100.12
                    www    IN     A    172.16.100.11
                    ftp    IN    CNAME    www
                    
                    #named-checkconf:检查配置文件知否有语法错误
                    #named-checkzone "magedu.com" /var/named/magedu.com.zone:检查区域
                3)修改文件的权限,magedu.com.zone为named属组
                    #chown :named /var/named/magedu.com.zone
                    #dig -t A www.magedu.com @172.16.100.11 ##@的作用是去11上解析,如果resolv.conf是配置的DNS服务器的话就可以不用写
                    #service named reload :重读文件
                    #rndc reload:
                    一个主机名,多个iP地址:轮询
3.测试命令:dig的使用
                dig [-t type] name [@SERVEER] [query options]
                dig用于测试DNS系统,不会查询hosts文件进行解析;
                aa:权威答案
                
                查询选项:
                    +[no]trace:跟踪解析过程
                    +[no]recurse:进行递归解析
                测试反向解析:
                    dig -x IP @SERVER
                模拟区域传送:
                    dig -t axfr ZONE_NAME @SERVER
                    例如:dig -t axfr magedu.com @172.16.100.11
            测试命令:host命令
                host [-t type] name [SERVER]
                host -t A www.magedu.com 172.16.100.11:查看www的A记录
                host -t NS magedu.com 172.16.100.11    :查看magedu.com.的主名称服务器
            测试命令:nslookup命令,交互式查询工具
                nslookup [-option] [name | -] [server]
                交互式模式:
                    nslookup>
                        server IP:指明使用哪个DNSserver进行查询;
                        set q=RR_TYPE:指明查询的资源记录类型
                        NAME:要查询的名称
                        

                       

4.反向区域

            区域名称:注册所得的网络地址反写.in-addr.arpa.
                172.16.100.-->100.16.172.in-addr.arpa.
                注意:是不变的地址加上后缀,若是100也变化,就只留172.16
                
            (1)定义区域
                zone “ZONE_NAME” IN {
                        type {master|slave|forward};
                        file "网络地址.znoe"   //若是有多个域,就将网络地址后面加上.1|.2等等加以区别就行
                    };
            (2)区域解析库文件
                注意:不需要MX和A,只需要PTR和CNAME
                #vim -o magedu.com.zone 172.16.100.zone  ##只要有文件就行,名字是什么无所谓
                $TTL 86400
                $ORIGIN 100.16.172.in-addr.arpa.    
                @                    IN    SOA    ns1.magedu.com. admin.magedu.com. (
                                            2014.04201
                                            1H
                                            5M
                                            7D
                                            1D)
                                    IN    NS    ns1.magedu.com.(不能只写ns1)
                                    IN    NS    ns1.magedu.com.
                11(会补上$ORIGIN)    IN    PTR    www.magedu.com.
            (3)修改文件权限
                #chmod 640 172.16.100.zone
                #chown :named 172.16.100.zone
                检查语法错误
                    #named-checkzone "100.16.172.in-addr.arpa" 172.16.100.zone
                    #named-checkconf
                测试:
                    #host -t PTR 172.16.100.11 172.16.100.11
                    #dig -x 172.26.100.11 @172.16.100.11
    
5. 泛域名解析
        在magedu.com.zone 添加记录:
        *    IN    A    172.16.100.11       ##任何写错的域名都访问172.16.100.11
        magedu.com    IN    A    172.16.100.11        ##不支持CNAME
        
6.主从复制
        正反是两个不同的系统,两台主机
                                        一台正主,一台反主,互为从,
                                        一台正反主,一台正反从
                                        总之,怎么都行
        配置从服务器:
            (1)修改主配置文件/etc/named.conf
            (2)启动服务
                此时就配置好了缓存DNS服务器
            (3)添加域
                zone “magedu.com” IN {
                    type slave;
                    masters { 172.16.100.11; };
                    file "slaves/magedu.com.zone";
                }
            (4)修改主服务器
                主服务器上必须把这台主机定义为从服务器,否则不会通知改从主机
                    IN    NS    ns2
                ns2    IN    A    172.16.100.12
            (5)rndc reload
                链式传送:
                
            只要主服务器的记录发生改变,就会通知从服务器
            模拟:
                修改主服务器的区域配置文件:
                    注意:修改了之后必须手动修改序列号
                #rndc reload
                #tail /var/log/messages
                
        总结:
            1.应该为一台独立的名称服务器
            2.主服务器的区域解析库文件必须有一条NS记录是指向从服务器
            3.从服务器只需要定义区域,而无需提供解析库文件:解析库文件应该放置于/var/named/slaves/目录中
            4.主从服务器允许从服务器做区域传送
            5.主从服务器的时间应该同步,可通过ntp进行
            6.bind程序的版本应该保持一致,或者是从高,主低
            
7.配置反向解析从服务器
            1.修改主从的主配置,让其中有从服的记录
            2.在从服添加域
                zone "100.16.172.in-addr.arpa" IN {
                    type slave;
                    masters { 172.16.100.11; };
                    file "slaves/172.16.100.zone";
                }
            3.#named-checkconf
            #rndc reload
            #tail /var/log/messages
            

           

8.rndc:远程管理

        在远程客户机上连接服务器上的rndc,通过rndc来管理named服务,但是这样很有可能会被入侵,所以一般只允许本地连接
        rndc-->rndc (95/tcp)
        rndc COMMAND
        COMMEND:
            reload:重载主配置文件和区域解析库文件
            reload zone:重载区域解析库文件
            retransfer zone:手动启动区域传送过程,而不管序列号是否增加
            notify zone:重新对区域传送发通知;
            reconfig:重载主配置文件
            querylog:开启或关闭查询日志
                DEBUG日志:只有需要找错时才需要打开
            trace:递增debug级别

            trace LEVEL:指定使用的级别


9.子域授权
        类似根域授权tld:
        .com.        IN    NS    ns1.com.
        .com.        IN    NS    ns2.com.
        ns1.com.    IN    A    1.1.1.1
        ns2.com.    IN     A     1.1.1.2
        
        magedu.com.在.com的名称服务器上,解析库中添加资源记录
        magedu.com.            IN    NS    ns1.magedu.com.
        magedu.com.            IN    NS    ns2.magedu.com.
        ns1.magedu.com.        IN    A    3.3.3.1
        ns2.magedu.com.        IN    A    3.3.3.2

    
    正向解析区域子域方法
        定义一个子区域:
            nps.magedu.com.    IN    NS    ns1.magedu.com.
            nps.magedu.com.    IN    NS    ns2.magedu.com.
            ns1.magedu.com.    IN    A    1.1.1.1
            ns2.magedu.com. IN    A    1.1.1.2
        定义转发区域:
            当子域内的某台主机想访问父域的父域的某台主机,就需要给子域转发区域
            1 ) 找根
            2)找别的服务器
                注意:被转发的服务器要能给请求者做递归,否则转发不予进行
                    (1)全部转发,凡是对非本机所有负责解析的区域的请求,统统转发给指定服务器
                        options {
                            forward {first|only};    //转发模式
                            //first:先递归后迭代
                            //only:只递归
                            forwarders
                        }forward only;
                    (2)区域转发,仅仅转发对特定的区域的请求至某服务器
                        zone “ZONE_NAME” IN {
                            type forward;
                            forward {first|only}
                            forwarders
                        }
                当父域内某个主机要访问子域内的某个主机,因为父域知道子域在什么地方,所以直接告诉
                
                子域的区域解析库文件:
                    $TTL 1D
                    @ORIGIN ops.   magedu.com.
                    @    IN    SOA        ns1.ops.magedu.com.    admin.ops.magedu.com. (
                                    2015042501
                                    1M
                                    10M
                                    3D
                                    1D)
                        IN    NS    ns1
                        IN    NS    ns2
                    ns1 IN    A    172.16.100.12
                    ns2 IN    A    172.16.100.19
                    www    IN    A    172.16.100.20
                    *    IN    A    172.16.100.21
                定义转发域:
                    
                    1)全局转发
                    #vim /etc/named.conf
                        forwrd first;
                        forwarders { 172.16.100.1; };
                    2)区域转发(子域转发给父域):
                        zone “magedu.com” IN {
                            type forward;
                            forward only;
                            forwarders { 172.16.100.11; };
                        }
                    遇到问题:子域解析不到父域,父域解析不到父域
                    dessec:vim /etc/named.conf
                    dessec-enable no;
                    dessec-validation no;
                当全局转发和区域转发都定义了;举例
                    子域内有全局转发和区域转发,当子域要访问父域的某主机则用区域转发,访问其他域的用全局转发
                
                
                
10.bind中基础的安全相关的配置
            acl:访问控制列表:把一个或多个主机归并为一个集合,并通过一个统一的名称调用
                acl acl_name {
                    ip;
                    ip;
                    net/prelen;
                }
                bind有四个内置的acl:
                    none:没有一个主机;
                    any:任意主机;
                    local:本机
                    localnet:本机的IP同掩码运算后得到的网络地址;
                    注意:只能先定义,后使用
                示例:
                    acl mynet {
                        172.16.0.0/16;
                    }
            访问控制的指令:
                allow-query {};  允许查询的主机,白名单;
                allow-transfer {};允许区域传送的主机,白名单;
                allow-recursion {};    允许递归的主机
                allow-update {};    允许更新区域数据库的内容,一般是none,为了安全
                
11.BIND view
    为了好的用户体验,会将服务器放到每个网络,如果用户访问就访问最近的服务器
    当一个私网内部有一台服务器,外网的某台主机想访问该服务器,DNS就必须解析成公网IP,通过NAT转换成私网IP
    视图:
        1.一个bind服务器可定义多个view,每个view可定义一个或多个zone;
        2.每个view用来匹配一组客户端;
        3.多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
        当一个服务器收到客户端的请求,会先判断客户端的来源是什么
        view VIEW_NAME {
            match-clients {};
        }
        注意:
            (1)一旦启用了view,所有的zones都只能定义在view中
            (2)仅有必要再匹配到允许递归请求的客户(本地主机)所在view中定义根区域;
            (3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表            
            
            

    
12.编译安装BIND
isc.org:
    yum grouplist
    yum groupinstall “Development Tools” “Server Platform Development”
    
    bind-9.10
        #tar
        #cd
        #groupadd -gr 53 named
        #useradd -u 53 -glue named named -r
        #./configure --prefix=/usr/logcal.bind9 --sysconfigdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
        #make        //编译
        #make install
    问题:
        1.没有配置文件
        2.没有区域解析库文件
        3.没有rndc的相关配置文件
        
        逐步解决:
        一、
            1.导出二进制程序的搜索路径
            #vim /etc/profile.d/named.sh
            export PATH=/usr/local/bind9:/usr/local/bind9/sbin:$PATH
            #./etc/profile.d/named.sh
            以上操作完就可以用named-checkconf等工具,
            2.导出库文件搜索路径
            #vim /etc/ld.so.conf.d/named.conf
            /usr/local/bind9/lib
            #ldconfig(可省略,因为都是静态文件)
            3.导出头文件搜索路径
            #ln -sv /usr/local/bind9/include /usr/include/named
            4.导出帮助文件搜索路径
            #vim /etc/man.config
            MANPATH /usr/local/bind9/share/man
            可以使用man
        
        这样就算是吧named的基本配置就做好了
        
        二、
            1.
            #vim /etc/named.conf
            options {
                directory "/var/named";
            };
            zone "." IN {
                type hint;
                file "named.ca";
            };
            zone "localhost" IN {
                type master;
                file "localhost.zone";
                allow-update { none; };
            };
            zone "0.0.127.in-addr.arpa" IN {
                type master;
                file "named.local";
                allow-update { none; };
            };
            2.
            #mkdir /var/named/
            #dig -t NS . @172.16.0.1   //访问能连接到外网的DNS服务器,获得13个跟服务器的地址
            #dig -t NS . @172.16.0.1 > /var/named/named.ca
            #vim /var/named/localhost.zone
            $TTL 1D
            @            IN    SOA        localhost.    admin.localhost.    (
                                    2015042501
                                    1H
                                    5M
                                    7D
                                    1D)
                        IN    NS        localhost.
            localhost.    IN    A        127.0.0.1
            #cp -p /var/named/localhost.zone /var/named/named.local
            #vim /var/named/named.local
            #vim /var/named/localhost.zone
            $TTL 1D
            @            IN    SOA        localhost.    admin.localhost.    (
                                    2015042501
                                    1H
                                    5M
                                    7D
                                    1D)
                        IN    NS        localhost.
            1            IN    PTR        localhost.
            #chmod 640 /var/named/*
            #chown :named /var/named/*
            #chmod 640 /etc/named/named.conf
            #chown :named /etc/named/named.conf
            #named -u named -f -g -d 3 //手动启动named服务在前台
            #named -u named  //在后台运行
            #killall named     //通过杀死进程来关闭服务
            
            解析:
            1.添加域
            2.写区域解析库文件
            3.改属组
            
            生成rndc的配置文件:
                #rndc-confgen -r /dev/urandom    //不从熵池中取随机数,而是从urandom
                #rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
                生成rndc.conf或rndc.key,
                #rndc-confgen -r /dev/urandom > /etc/named/named.conf
                :.,$-1s@^# @@g  //将文件中# 开头的去掉
                #killall named
                #named -u named
                #killall -SIGHUP named        //reload
                
    
        bind源码目录下,有
            contrib/
            queryperf/:评估查询性能,是能对DNS做压力测试的工具
            #less README:查看如何使用
            #./configure    //queryperf/下的
            #make
            #cp queryperf /usr/local/bind9/bin/
            #queryperf -d test -s 172.16.100.11   //对11座压力测试,测试内容在test下
            test内容:越多才能测试的出来
            www.magedu.com A
            magedu.com NS
            #top      //
            #rndc querylog   //开启查询日志
            #vmstat 1|dstat    //看IO压力
            #iostat 1           //查看IO压力

0 0
原创粉丝点击