zoukankan      html  css  js  c++  java
  • DNS和Bind配置指南

    /////////////////////////////目录//////////////////////////////////////
    一、DNS原理相关
    二、使用bind搭建最简单的DNS服务器
    三、使用bind搭建可以解析自己添加的域名的DNS服务器
    四、配置DNS转发
    五、配置主从配置主从
    六、测试主从同步

    拓展学习:
    DNS and BIND配置指南
      http://anyisalin.blog.51cto.com/10917514/1753638
    bind配置视图(view)
      http://wubinary.blog.51cto.com/8570032/1378363
    使用myDNS搭建DNS服务器
      http://www.aminglinux.com/bbs/thread-186-1-1.html
    使用dnsmasq配置DNS缓存
      http://www.aminglinux.com/bbs/thread-5284-1-1.html
    理解DNS递归和迭代查询
      http://jeffyyko.blog.51cto.com/28563/215293
      http://jeffyyko.blog.51cto.com/28563/216962

    ///////////////////////////////////////////////////////////////////////

    一、DNS原理相关
    DNS为域名解析系统的缩写,它是一种将IP地址转换成对应的主机名或者将主机名转换成与之相对应的IP地址的一种服务机制。
    其中通过域名解析出IP地址的叫做正向解析,通过IP地址解析出域名的叫做反向解析。DNS使用TCP和UDP,端口号都是53,但是它主要是使用UDP,服务器之间的备份使用TCP【主从】。
    全世界只有13台“根”服务器,1个主服务器放在米国,其他12台为辅根服务器,DNS服务器根据角色可以分为:主DNS,从DNS,缓存DNS服务器,DNS转发服务器。

    解析过程:
    /etc/hosts <——————客户端,如果有,就返回客户端,如果没有
    客户端——————> DNS server ,如果知道,直接返回给你,如果不知道,自己变成DNS客户端


    二、使用bind搭建最简单的DNS服务器
    yum install -y bind bind-utils     (开源的用来实现DNS服务的服务器,还有mydns也可以实现,只不过依赖MySQL)
    #dig工具的安装需要bind-utils支持
    让我们看看他生成了什么关键文件,这里我们主要列举出来:

        /etc/named.conf    #bind主配置文件
        /etc/named.rfc1912.zones    #定义zone的文件
        /usr/sbin/named-checkconf    #检测/etc/named.conf文件语法
        /usr/sbin/named-checkzone    #检测zone和对应zone文件的语法
        ...
        /var/named/named.ca    #根解析库
        /var/named/named.localhost    #本地主机解析库
        /var/named/slaves    #从文件夹

    安装完毕后配置主配置文件:
    如果不熟练请做好备份

    vi /etc/name.conf
    全局配置段:
      options{
        directory "/var/named";
        #解析库目录路径
      };
    
    区域配置段:
      zone "." IN {
        type hint;
        file "named.ca";
      };
    
      zone "localhost" IN {
        type master;
        file "localhost.zone";
      };
    
      zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
      };
      #|————————————————————————————————————|
      #|至少有三个区域:根、localhost、127.0.0.1|
      #|—————————————————-——————————————————|
      
    日志配置段:
      logging {
      ... ;
      #这里各位需要的请自己补充
      };
      

    配置完毕后:

    chown named /etc/named.conf
    cd /var/named/
    dig -t NS . >named.ca

    然后添加在主配置文件指定的解析库目录中的文件:

    cd /var/named/
    vim localhost.zone //正向解析文件: @ IN SOA localhost. admin.localhost. ( 2013081601 1H 10M 7D 1D ) @ IN NS localhost. localhost. IN A 127.0.0.1

    vim named.local //反向解析文件:
    $TTL 86400
    @ IN SOA localhost. admin.localhost. (
                                 2013081601(这个是序列号,主从有用)
                                 1H
                                 10M
                                 7D
                                 1D
                                 )
    @ IN NS  localhost.
    1 IN PTR localhost

     

    保存完毕后:

    检测配置是否有问题:named-checkconf
    检测正解析:named-checkzone "localhost" /var/named/localhost.zone
    检测反解析:named-checkzone "0.0.127.in-addr.arpa" /var/named/named.local

    检查无误后:

    systemctl start named.service
    netstat -lnp |grep named  //查看一下named进程是否监听了53端口
    首先测试正向解析:dig @127.0.0.1 localhost
    接着测试反解析:  dig @127.0.0.1 -x 127.0.0.1
                          @后面跟的是DNS服务器的ip,可以8.8.8.8
                           -x 反解析 
                           PTR是反解析的意思  

    三、使用bind搭建可以解析自己添加的域名的DNS服务器
    要解析自己添加的域名,需要在上述实验成功前提下进行
    不过先针对下面配置的一些参数进行说明:

    DNS资源记录类型:
       SOA:起始授权记录,一个区域的解析库中有且只能有一条SOA记录,必须为解析库中的第一条记录,定义主DNS服务器地址和相关事件时间定义。
       A:实现FQDN ==> IPv4
       MX:标明提供邮件服务的主机
       NS:标明当前域内的DNS服务器
       AAAA:FQDN ==> IPv6
       CNAME:Canonical Name,别名记录
       PTR:IP ==> FQDN
    DNS资源记录定义方法:
       A记录:IP IN  A Value ; 示例:192.168.1.1 IN A www.anyisalin.com.
       NS记录:domain IN NS Value; 示例:anyisalin.com. IN  NS ns1.anyisalin.com. #一条NS记录必须要有一条与之对应的A记录
       MX记录:domain IN NS priority Value; 示例:anyisalin.com. IN  MX 10 mail1.anyisalin.com. #一条MX记录必须要有与之对应的A记录, 优先级0-99,越低优先级越高
       PTR记录:IP.in-addr.arpa. IN PTR Value; 示例:1.1.168.192.in-addr.arpa. IN PTR www.anyisalin.com. #PTR记录的写法比较诡异,为逆向网络地址加.in-addr.arpa.后缀组成
       AAAA记录:和A记录相似,只是将IPv4地址换为IPv6

    配置解析一个区域的步骤:

    1.定义一个区域(在主配置文件操作)
    正向区域: zone
    "zone_name" { type hint|master|slave|forward; #根 |主 |从 |转发 file "TheFileName"; #master|slave {MASTER|SLAVE_IP ip;}; #这个是主从配置要用到的参数 };
    反向区域:
      区域名称以逆向的网络地址,并以.in-addr.arpa为后缀,譬如:
      zone "132.75.168.192.in-addr.arpa" IN {
        type hint|master|slave|forward; 
    file "132.75.168.192.local";
    };
     
    2.定义区域对应的数据库文件(在解析区域数据库目录操作)
       文件名需要和上面的 TheFileName相同
       
       区域数据库文件的一些写法:
       (假如这里的区域名称是a.com,主机名dns.a.com):
        a.com. IN  NS  dns.a.com.
        @      IN  NS  dns       
               IN  NS  dns       
        这三种写法是一样的
        例如上面第二条dns后面不加. 会自动在后面补上区域自身名字,等于dns.a.com
        如果要写全,必须把最后一个.写上,例www.a.com.
       
        SOA记录(第一条记录):
          name:  只能是区域名称,例:a.com.  通常可以用@简写
          value: 必须是主DNS服务器的FQDN
          SOA必须是区域数据库文件的第一条记录
        
        例子如下:
        $TTL 600(开头的TTL作用于全局,咋开头使用后下面就不需要写了)
        @(引用区域名称)  IN(关键字)  SOA (类型) ns.a.com. (主DNS名字)  dnsadmin.a.com. (邮箱地址,其中不用用@,用.代替) (
                        serial number ; 序列号,这里;为注释,十进制数字,不能超过10位,通常使用日期,例如2014031001
                        refresh time ;刷新时间,每隔多久到主服务器检查一次
                        retry time ;重试时间,应该小于refresh time
                        expire time ;过期时间
                        negative answer ttl ;否定答案的ttl,客户端缓存的时间,设定过长会导致无法立即生效,设定过短导致客户端频繁请求
       )
    
        之后的记录写法如下:
        name [ttl] IN RRtype Value
        
        NS记录格式说明:
          @ 600(TTL) IN NS  ns.dx.com.
          ns.dx.com. IN A   192.168.1.201 
          任何一个NS记录,必须有一条对应的A记录
    
       A记录格式说明:
         name:FQDN(可以使用相对名称)
         value IP
         www        600  IN  A   1.2.3.5
         www.a.com  600  IN  A   1.2.3.4
            这里同一个主机IP不同用于负载均衡
       
       MX记录格式说明:
         可以有多个
         必须给一个A记录
         name:区域名称,用于表示smtp服务器
         value:包含优先级和FQDN
         优先级:0-99,数字越小,级别越高
       
       例:(如果第一个没响应就找第二个)
         @ 600 IN MX  10 mail(注意没加. 会自动补上区域名称 )
         @ 600 IN MX  20 mail
       
       
       PTR记录格式说明:
       反向解析,IP -> FQDN,只能定义在反向区域数据库文件中
       反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成
       name:IP,主机地址反过来写,例:172.16.100.7的name为7.100.16.172.in-addr.arpa.
       value:FQDN 
       例子如下:
         201.1.168.192.in-addr.arpa. 600 IN PTR www.a.com. 这里的1.168.192.in-addr.arpa为区域名称
         或简写成
         201 600 IN PTR www.a.com.  会自动补上区域名称1.168.192.in-addr.arpa
    3.正向/反向的区别
    反向解析区域数据库文件可用正向文件直接修改,SOA和NS一样的,只是不需要MX记录和A记录

    回到正题,如果我的网站的域名是abc.com,步骤如下

    vi /etc/named.conf   //添加如下内容
    zone "abc.com" IN {
        type master;
        file "abc.com.zone";
    };
    
    zone "137.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.zone";
    };

    在解析库目录下创建文件:  

    vi /var/named/abc.com.zone //增加如下内容:
    $TTL 600(开头的TTL作用于全局)
    @        IN    SOA    abc.com.    root.abc.com.(
                                    2013081601
                                    1H
                                    10M
                                    7D
                                    1D
    )
            IN    NS        ns.abc.com.
            IN    MX   10   mail.abc.com.
    ns      IN    A         192.168.137.11
    www     IN    A         192.168.137.73
    mail    IN    A         192.168.137.10
    bbs     IN    CNAME     www.abc.com.
    
    
    编辑反解析文件:
    vi /var/named/192.168.zone  //增加如下内容
    $TTL 600
    @        IN    SOA    ns.abc.com.    root.abc.com.(
                                    2013081601
                                    1H
                                    10M
                                    7D
                                    1D
    )
    @         IN    NS     ns.abc.com.
    10        IN    PTR    ns.abc.com.
    11        IN    PTR    mail.abc.com.
    73        IN    PTR    www.abc.com.

    保存完毕后:
    分别检测两个配置文件是否有问题:

    named-checkconf
    named-checkzone "abc.com" /var/named/abc.com.zone
    named-checkzone "137.168.192.in-addr.arpa" 192.168.zone

    没问题,就重启named

    /etc/init.d/named restart
    并使用dig命令检查
    dig @127.0.0.1 www.abc.com 
    dig @127.0.0.1 -x 192.168.137.11

    四.配置DNS转发
    我们配置的DNS是只能解析我们定义的zone的,我们没有定义的DNS是不能解析的
    配置DNS转发就可以解析其他互联网上的域名,前提是这个域名在互联网中的确使用,也就是说这个域名已经被某个DNS服务器解析了

    /etc/named.conf
    /var/named/localhost.zone
    /var/named/named.local

    这两行就是用来配置转发的,该DNS服务器不能解析的域名会转发到8.8.8.8这个DNS服务器上去解析

    五.配置主从
    在从服务器上:
    yum install -y bind
    拷贝主上配置文件到从上,包括:

      /etc/named.conf
      /var/named/localhost.zone
      /var/named/named.local

    拷贝完毕后:
    修改从的/etc/named.conf //内容参考如下:

    options{
        directory "/var/named";
    };
    
    zone "." IN {
        type hint;
        file "named.ca";
    };
    
    zone "localhost" IN {
        type master;
           #如果这里写成slave,需要写masters {...},因为我们不需要同步localhost,所以可以master
        file "localhost.zone";
    };
    
    zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
    };
    
    zone "abc.com" IN {
        type slave;
        file "slaves/abc.com.zone";
        masters { 192.168.0.11; };
    };
    
    zone "137.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/192.168.zone";
        masters { 192.168.0.11; };
    };

    在从上启动named

    启动成功后会在 /var/named/下生成一个slaves目录,这个目录下会有192.168.zone,abc.com.zone这两个文件,内容是和主上一行的

    在从上测试: dig@127.0.0.1 www.abc.com

    六.测试主从同步
    在主DNS上更改文件 /var/named/abc.com.zone //在最后增加一行:

    123 IN A 1.1.1.1

    另外需要修改一下第三行的那个数字串,这个是用来做标记的,只有这个数字变化了,才可以让从自动跟着变化,数字只能是变大,不能变小,2013081601 -> 2013081602
    重启named服务
    经测试我们发现一个问题,就是从经常会同步得比较慢,这是很要命的,所以需要我们做一个特殊的操作,在主上的/etc/named.conf中,abc.com中增加两行:

    notify yes;
    also-notify{
    192.168.0.12(指定从的IP);
    };
  • 相关阅读:
    MyBatis参数传入集合之foreach动态sql
    【mybatis】多次查询缓存的问题
    svn is already locked解决方案
    Python 命令行之旅:使用 docopt 实现 git 命令
    Django 官方推荐的姿势:类视图
    这可能就是你苦苦寻找免费、高颜值、功能强大的 Markdown 编辑器(共5款)
    超级好用的 Java 数据可视化库:Tablesaw
    让你如“老”绅士般编写 Python 命令行工具的开源项目:docopt
    开发 Django 博客文章阅读量统计功能
    使用 Docker 让部署 Django 项目更加轻松
  • 原文地址:https://www.cnblogs.com/ImJerryChan/p/6607072.html
Copyright © 2011-2022 走看看