DNS部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS部署相关的知识,希望对你有一定的参考价值。

一、DNS系统说明

     目前后端系统的应用均采用硬IP的方式访问,虽然简单易辩,但是不利于系统的扩展和迁移。现搭建主备两台内网DNS服务器,建立严格的监控机制,以保证DNS的高可用性。DNS解析记录的修改和查看采用web界面形式,并通过管理员和guest用户分别控制权限.

    DNS系统采用最新的Bind-DLZ+mysql架构,解析记录存在mysql数据库表中。这样可以避免传统Bind的以下几个问题:

         1、Bind解析记录存储在zone文件中,容易因编辑错误出现问题

         2、Bind需要将解析数据加载到内存,如果数据过多,会消耗大量内存

         3、Bind解析记录修改,需重启才能生效

         4、Bind启动会解析zone文件,数据量大会影响启动时间

    

二、DNS部署


     DNS服务器上均需要安装以下依赖包:

              yum -y install gcc python-devel bind-utils openssl openssl-devel lrzsz wget unzip libaio perl mysql-devel

     配置libmysql_client 依赖包

              mv /usr/local/mysql/lib/mysql /usr/local/mysql/lib/mysql_bak &&  ln -s /usr/lib64/mysql /usr/local/mysql/lib/



     1、在10.160.29.200和10.160.29.100上分别部署mysql,且配置200为master,100为slave.部署步骤略

            cp /usr/local/percona/lib/libmysql* /usr/local/percona/lib/mysql/

     2、在141与167上部署bind-dlz

          2.1、安装bind-9.9.6-P1

                  

                  cd /data/soft
                  wget http://172.16.100.221/yx_soft_repo/bind-9.9.6-P1.tar.gz
                  tar xzf bind-9.9.6-P1.tar.gz && cd bind-9.9.6-P1

                  ./configure --prefix=/data/app/bind/ --disable-openssl-version-check --with-dlz-mysql=/usr/local/mysql && make&&make install

           2.2、配置bind

                  cd /data/app/bind/etc && ../sbin/rndc-confgen -r /dev/urandom >rndc.conf &&  mkdir -p /data/app/bind/logs/ && mkdir -p /var/lib/named/log/


named.conf配置

key "rndc-key" {

        algorithm hmac-md5;

        secret "bBpwKOY8xDX4mozyMlJuCA==";

};

acl goodclients {

        10.180.0.0/16;

        localhost;

        localnets;

};

 

options {

dump-file "/var/log/named_dump.db";

zone-statistics yes;

statistics-file "/var/lib/named/log/named.stats";

recursion yes;

allow-query { goodclients; };

forwarders {

        202.106.196.115;

        114.114.114.114;

                8.8.8.8;

                8.8.4.4;

        };

};

controls {

        inet 127.0.0.1 port 953

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

};

dlz "Mysql zone" {

    database "mysql

    {host=192.168.200.222 dbname=dns ssl=false port=3306 user=dnsadmin pass=Dn5}

    {select zone from dns_records where zone = ‘$zone$‘ and  view = ‘any‘ limit 1}

    {select ttl,type,mx_priority,case when lower(type)=‘txt‘ then concat(‘\"‘,data,‘\"‘) when lower(type)    =  ‘soa‘  then   concat_ws(‘ ‘,  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = ‘$zone$‘   and host = ‘$record$‘ and view = ‘any‘}";

};

logging {

channel query_log {

file "/data/app/bind/logs/query.log" versions 3 size 20m;

severity info;

print-time yes;

print-category yes;

};

category queries {

query_log;

};

};

           2.3、数据库配置

root/Admin123$

mysql -uroot -p --socket=/data/3306/mysql.sock

create database dns;

use dns;

创建数据库表

CREATE TABLE `dns_records` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `zone` varchar(255) NOT NULL,

  `host` varchar(255) NOT NULL DEFAULT ‘@‘,

  `type` enum(‘MX‘,‘CNAME‘,‘NS‘,‘SOA‘,‘A‘,‘PTR‘) NOT NULL,

  `data` varchar(255) DEFAULT NULL,

  `ttl` int(11) NOT NULL DEFAULT ‘800‘,

  `view` char(20) DEFAULT ‘any‘,

  `mx_priority` int(11) DEFAULT NULL,

  `priority` int(3) DEFAULT ‘255‘,

  `refresh` int(11) NOT NULL DEFAULT ‘3600‘,

  `retry` int(11) NOT NULL DEFAULT ‘3600‘,

  `expire` int(11) NOT NULL DEFAULT ‘86400‘,

  `minimum` int(11) NOT NULL DEFAULT ‘3600‘,

  `serial` bigint(20) NOT NULL DEFAULT ‘2008082700‘,

  `resp_person` varchar(64) NOT NULL DEFAULT ‘root.domain.com.‘,

  `primary_ns` varchar(64) NOT NULL DEFAULT ‘ns1.domain.com.‘,

  `data_count` int(11) NOT NULL DEFAULT ‘0‘,

  PRIMARY KEY (`id`),

  KEY `type` (`type`),

  KEY `host` (`host`),

  KEY `zone` (`zone`)

) ENGINE=MyISAM AUTO_INCREMENT=95 DEFAULT CHARSET=gbk

数据通过dns管理web界面增加

grant all privileges on dns.* to [email protected]‘10.160.29.%‘ identified by ‘Dn5‘;


           2.4、启停脚本

                   /etc/init.d/named start

 

三、DNS压力测试

      使用bind自带压力测试软件queryperf,对DNS进行压力测试

      测试方法:

           /usr/local/bind/bin/queryperf -d test.txt -s 10.160.29.200

四、DNS记录修改

     基于django web.py框架开发的DNS在线修改和查找的web应用,访问地址是http://192.168.200.222:8003/。管理员用户可在线增删改查DNS解析记录,guest用户可无密码访问,查找相应的IP或者域名解析记录。

五、DNS监控

     DNS监控以下内容:

           存活状态:

           响应时间:

           QPS:


以上是关于DNS部署的主要内容,如果未能解决你的问题,请参考以下文章

Linux下DNS服务(Bind9)之Web管理利器-NamedManager部署说明

linux下自动部署DNS脚本

入门广电行业DNSDHCP解决方案详解——DNS部署架构及案

VCSA 6.7 U2无DNS部署

企业dns服务器部署详解(上)—高速缓存dns搭建/dns正反向解析

linux系统下部署DNS反向解析