zoukankan      html  css  js  c++  java
  • ubuntu搭建DNS

    ubuntu搭建DNS

    一、     bind简介:

        BINDDomain Name System (DNS) 协议的一个实现,提供了DNS主要功能的开放实现,主要包括以下三种:

    *域名服务器

    *DNS解析库函数

    *DNS服务器运行调试所用的工具

    它是一款开放源码的DNS服务器软件,由美国加州大学Berkeley分校开发和维护的

     

    DNS_server主要有以下三种应用模式:

    *主域名服务器

    *辅助域名服务器

    *缓存域名服务器

    Bind使用TCPUDP端口53

    二、     DNS-bind软件的相关资源:

    官方网站:http://www.bind.com/ 

    帮助文档:http://www.isc.org/sw/bind/ 

    配置文件样例:http://www.bind.com/bind.html

    三、     DNS搭建创建环境:

    系统环境:Linux_Ubuntu12.04_X64

    软件版本:BIND9

     

    搭建测试主机:

    *192.168.5.101缓存域名服务器、主域名服务器

    *192.168.5.102缓存域名服务器、辅助/从域名服务器

    *192.168.5.103 测试客户机

    四、     软件安装和主要配置文件解析:

    sudo apt-get  install  bind9  bind9utils  -y

    dns@dns2:/etc/bind$ ll

    total 60

    drwxr-sr-x  2 root bind 4096 Sep 10 16:49 ./

    drwxr-xr-x 91 root root 4096 Sep 1014:06 ../

    -rw-r--r--  1 root root 2389 Jul 27 11:17 bind.keys

    -rw-r--r--  1 root root 237 Jul 27 11:17 db.0

    -rw-r--r--  1 root root 271 Jul 27 11:17 db.127

    -rw-r--r--  1 root root 237 Jul 27 11:17 db.255

    -rw-r--r--  1 root root 353 Jul 27 11:17 db.empty

    -rw-r--r--  1 root root 270 Jul 27 11:17 db.local

    -rw-r--r--  1 root root 2994 Jul 27 11:17 db.root

    -rw-r--r--  1 root bind 463 Jul 27 11:17 named.conf

    -rw-r--r--  1 root bind 490 Jul 27 11:17 named.conf.default-zones

    -rw-r--r--  1 root bind 301 Sep 10 16:43 named.conf.local

    -rw-r--r--  1 root bind 890 Sep 10 14:06 named.conf.options

    -rw-r-----  1 bind bind  77 Sep 10 14:06 rndc.key

    -rw-r--r--  1 root root 1317 Jul 27 11:17 zones.rfc1918

     

    named.conf

        主配置文件,设置一般的named参数,指向该服务器使用的域数据库的信息源,注意里面的include语句

    named.conf.options

        全局配置文件,全局选项配置

    db.root

        根服务器指向文件,由Internet NIC创建和维护,无需修改,但是需要定期更新

    db.local

        正向区域数据库,用于将域名解析为对应的IP地址

    db.127

        反向区域数据库,用于将ip解析为对应的域名

    named.conf.local

        用于定义解析域,一般是在named.conf里的include语句中囊括,单独在该文件中划定解析域,也可以直接在named.conf中直接划定解析域

     

    其中:主配置文件/etc/bind/named.conf的配置语句:

    命令  用法

    acl    定义ip地址的访问控制清单

    #control 定义ndc使用的控制通道

    include  把其他文件包含到主配置文件中

    key    定义授权的安全密钥

    logging 定义日志写什么,写到那里

    options 定义全局配置选项和缺省值

    #server  定义远程服务器的特征

    .....

     

    五、     服务器搭建:

    1.     缓存域名服务器

    77

    cd/var/cache/bind/

    sudomkdir data

    cd data

    sudotouch cache_dump.db

    sudotouch named_stats

    sudochown -R bind:bind /var/cache/bind/data

    sudo vim/etc/bind/named.conf.options

    ############################################

    options { 

    directory "/var/cache/bind"; 

    dump-file "/var/cache/bind/data/cache_dump.db"; 

    statistics-file "/var/cache/bind/data/named_stats"; 

    query-source       port 53; 

    #query-source-v6     port 53; 

    allow-query     { any; };               ;允许所有机器的DNS查询

    version         "dns"; 

    ;当别人要探测我们DNS服务器的版本时,对方得到的将是dns

    forwarders { 202.106.46.151; 8.8.8.8; }; 

     

    #dnssec-validation auto;

    auth-nxdomain no;    # conform toRFC1035

    #listen-on-v6 { any; };

    ; 如果DNS服务运行在有多个网卡的服务器上,那么默认的它会在所有网卡接口上监听服务,这个选项告诉它只在指定的借口上进行服务监听

    };

    ###########################################

    #max-cache-ttlmax-retry-time 目前测试: DNS缓存时间由db文件中的TTL 参数决定

     

    DNS解析模式

    DNS解析的域名本机中没有的时候,就会发起递归(recursion)或者转发(forward)到远程DNS去查询。
    递归:本机直接从根服务器上寻找对应域名的NS记录,再由本机到NS指向的服务器中查询记录
    转发:本机将解析请求转发到指定的服务器去解析,将转发服务器的响应结果直接反馈给查询者
    BIND9
    默认打开递归查询和关闭转发功能

    2.     主域名服务器

    先按照缓存服务器的搭建方法配置此服务器

    a)    定义解析域

    sudo vim named.conf.local

    ############################################

    zone "example.com" IN {      
     type master;                   
      file "db.example.com";         
      allow-transfer { 192.168.5.102; };                

    notify yes;

    also-notify { 192.168.5.102;};
      };  

     

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

            type master;

            file"/etc/bind/db.192.168.5";

            notify yes;

            also-notify { 192.168.5.102; };

     

            allow-transfer { 192.168.5.102; };

    };

     

    ############################################

    master表示定义的是主域名服务器

    file 指定区域数据库文件位置

    notifyalso-notifyallow-transfer等都是为设置辅助域名服务器而配置的

    b)    创建域数据库文件

    sudo vimdb.example.com

    ############################################

    $TTL    7D

    @       IN      SOA    example.com. root.example.com. (

                           2013091001      ; Serial

                             7D         ; Refresh

                              1D         ; Retry

                            28D         ; Expire

                             7D )        ; Negative Cache TTL

    ;

    @       IN      NS     example.com.         #在其后有一个附加的 "."

    @       IN      A      192.168.5.71

    www     IN      A      192.168.5.71

    ############################################

    @代表example.com.

    如果不用@,这里的www得写成www.example.com.

    第一行是TTL设定,生存时间记录字段。它以秒为单位定义该资源记录中的信息存放在高

    速缓存中的时间长度。这里定义为604800秒,也就是1

    第二行的SOA记录,指定授权主机和管理员信箱

        包含几个子参数,用于和辅助域名服务器同步的:

        serial-->相当于一个id号,很重要,只有比辅助服务器的值大,才会更新,一般用当前日期并加上两位序号来表示

        refresh-->这里是要告诉从服务器多久进行资料同步

        retry-->如果从在更新时失败,要隔多久有进行重试

        expire-->这里是记录逾期时间,当从服务器一直都未能成功与主取得联系,到这个时间后就放弃了

        Minimum--> 默认 TTL 值,如果您在前面没有用“$TTL”来定义,就会以此值为准

    第三行的NS记录,表明负责example.com这个域的Name server

    第四行的A记录,就是域名和ip的映射记录

     

    sudo vim db.192.168.5

    $TTL    7D

    @       IN      SOA    example.com. root.example.com. (

                            2013091004      ; Serial

                             7D             ; Refresh

                              1D            ; Retry

                            28D             ; Expire

                            7D )    ; Negative Cache TTL

    ;

    @       IN      NS     example.com.

    @       IN      PTR    example.com.

    71      IN      PTR    www.example.com.

    3.     辅助域名服务器搭建

    先按照缓存服务器的搭建方法配置此服务器

    a)    定义解析域

    和主域名服务器有几点不同的地方:

    编辑/etc/bind/named.conf.local文件

    辅助服务器不需要创建域库文件,因为是从主服务器上同步过来

    sudo vim named.conf.local

    ############################################

    zone "example.com" IN {

      type slave;

      file "/etc/bind/slave/db.example.com";

      masters { 192.168.5.101; };

      allow-notify { 192.168.5.101; };

      };

     

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

      type slave;

      file "/etc/bind/slave/Sdb.192.168.5";

      masters { 192.168.5.101; };

      allow-notify { 192.168.5.101; };

      };

    ############################################

    slave是标明该服务器为辅助域名服务器

    file是指定存放域库文件的位置,我自定义了一个slaves目录来存放master传过来的文件,相对安全些

    sudo mkdir /etc/bind/slave

    sudo chmod g+w /etc/bind/slave

    masters指明主域名服务器地址

    b)    创建域数据库文件

    辅助服务器不需要创建域库文件,因为是从主服务器上同步过来

    c)     配置权限

        注意:创建的slaves是在根目录下面,而根目录(/etc/bind/)默认是只读权限的,所以需要开放权限

    但是又不能和平时加权限一样,如用:chown  bind:bind 类似的办法

    只有如下操作就能正确访问:

    sudo  vim  /etc/apparmor.d/usr.sbin.named

    ############################################

    /etc/bind/** r,

    改成

    /etc/bind/** rw,

    ############################################

    然后重启服务生效:

    sudo /etc/init.d/apparmor restart

    六、     重启服务器

    重启主从服务器上的BIND服务

    sudo /etc/init.d/bind9  restart

     

    最好进行以下几步检查:

    sudo netstat -tnlp | grep 53-->检查开启端口

    sudo tail -f /var/log/syslog-->查看一下启动日志

     

    查看从服务器上库文件

    cd /var/cache/bind

    ls

    从这里可以直观的看见从主复制过来的库文件,更重要的是看日志,能够很清楚的看到主和从传输的过程

     

     

    在客户机上测试,就是本机,修改本机的dns,编辑/etc/resolvcond/resolv.conf.d/tail

    nameserver 192.168.5.101

    需要重启生效

    sudo /etc/init.d/resolveconf restart

    七、     语法检测工具,检测配置是否有语法错误:

    named-checkconf

    检查named.confinclude里包含的文件

        egnamed-checkconf --help

        egnamed-checkconf -t  etc/bind/

    没有任何输出代表语法没有问题

     

    named-checkzone

    检查zone

        egnamed-checkzone -t  etc/bind/

     

    八、     RNDC管理BIND

    Bind 9之后提供新的功能为”rndc”(remote name daemon control),可视为Bind旧版ndc的延伸,它可使系统管理者利用rndc command远端或本端(localhost)控制管理Bind,並以加密方式來传送资料,以防止其他非授权使用者控制Bind

     

    rndcflush 清空本地DNS缓存

    rndcflushname name刷新指定域名的缓存

    rndcreload重载DNS服务器
    rndc status
    查看目前DNS服务器状态
    rndc stop
    停止DNS服务器
    rndc restart
    重新启动DNS服务器
    rndc stats
    生成DNS统计报表到statistics-file
    rndc dumpdb  
    将所有缓存输入文件named_dump.db,以查看DNS缓存,DNS缓存是在内存中的
    success:
    成功查询的次数
    referral:
    就是非recursion的查询次数
    nxrrset:
    有这个域名,但找不到解析记录
    nxdomain:
    就是域名都找不到
    recursion:
    递归查询 failure:除上面那些之外的查询失败响应次数

     

    设置DNS Cache 的时间

     bind 9 中,使用 TTL 参数来设置 DNS 默认的缓存时间,但要记住这个是你解析的域名在别人的 DNS 中的缓存时间。

     

    rndc配置

    参考:http://dns-learning.twnic.net.tw/bind/security.html#two-one

    九、     报错

    1.       如果用户bind对于/etc/bind/slaves目录没有写权限, 则查看 /var/log/syslog 会出现如下类似错误:

    tonybox:~# tail/var/log/syslog

    Aug 15 15:50:12 ubuntu kernel:[12575.839327] type=1400 audit(1376553012.724:18): apparmor="DENIED"operation="mknod" parent=1 profile="/usr/sbin/named"name="/etc/bind/tmp-MosmnKMJxa" pid=2440 comm="named" requested_mask="c"denied_mask="c" fsuid=107 ouid=107

    Aug 15 15:50:12 ubuntunamed[2439]: dumping master file: /etc/bind/tmp-MosmnKMJxa: open: permissiondenied

     





  • 相关阅读:
    GDC2017:Framegraph-extensible-rendering-architecture-in-frostbite
    17072802(UE4的批量Import)
    16011301(统计指令数影响耗时)
    16080401(面向摄像机的Instance模型)
    UE4编译_201701
    17020701(AnimDynamic继续)
    Python过滤utf8mb4无效字符
    Windows下安装MySQL-python
    使用Pycharm更新Github项目(到源项目)
    python异常:error: command 'gcc' failed: No such file or directory
  • 原文地址:https://www.cnblogs.com/aserlinux/p/3598434.html
Copyright © 2011-2022 走看看