一、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: