经过两周开发,DNS管理平台终于开发完成。今天正好有时间,给大家分享一下。
1.整体架构
> DNS 服务器分成两组,每组在不同的机房。保障一组机器出现问题,减少对用户的影响。
> 每组DNS服务器使用lvs,实现负载均衡。
> 针对不同运营商的用户,可以将dns 服务器分成两个view(我分成了电信和其它,你可以根据自己的业务进行定义)。
>使用dns的dlz功能,将zone和记录都保存至数据库,每次更改记录时,无需重新启动服务。
> DNS管理平台对zone和记录进行管理。
2. DNS服务器搭建
> 首先在每台DNS服务器安装bind软件,配置DLZ#安装bind之前,首先安装mysql服务端和mysql-devel
yum install mysql-devel mysql-server mysql
#安装bind-9.9.5版本
#bind-9.9.5+版本才支持dlz功能
wget http://www.isc.org/downloads/file/bind-9-9-5-w1/?version=tar.gz
tar -zxvf bind-9-9-5.tar.gz
LDFLAGS=-L/usr/lib64/mysql ./configure --prefix=/usr/local/mydns/ --enable-rrl --enable-threads --enable-newstats --with-dlz-mysql && make && make install
#配置BIND
#/usr/local/mydns/etc/named.conf bind配置文件
key "rndc-key" {
algorithm hmac-md5;
secret "keZqPKmKedNuLBV2R3bwAg==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options {
tcp-clients 50000;
directory "/usr/local/mydns/etc/";
pid-file "/usr/local/mydns/log/mydns.pid";
dump-file "/usr/local/mydns/log/mydns_dump.db";
statistics-file "/usr/local/mydns/log/mydns.stats";
rate-limit {
nxdomains-per-second 3;
window 1;
};
recursion no;
version "david-bind9-version.1.00";
allow-notify { none; };
allow-recursion { none; };
key "rndc-key" {
algorithm hmac-md5;
secret "keZqPKmKedNuLBV2R3bwAg==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options {
tcp-clients 50000;
directory "/usr/local/mydns/etc/";
pid-file "/usr/local/mydns/log/mydns.pid";
dump-file "/usr/local/mydns/log/mydns_dump.db";
statistics-file "/usr/local/mydns/log/mydns.stats";
rate-limit {
nxdomains-per-second 3;
window 1;
};
recursion no;
version "david-bind9-version.1.00";
allow-notify { none; };
allow-recursion { none; };
allow-transfer { none; };
allow-query { any; };
};
logging {
channel info
{
file "/usr/local/mydns/log/dns_warnings" versions 3 size 100m;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};
channel general_dns
{
file "/usr/local/mydns/log/dns_logs" versions 3 size 100m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default { info; };
category queries { general_dns; };
category client { info; };
category resolver { info; };
category lame-servers { null; };
};
include "/usr/local/mydns/etc/master.conf";
#/usr/local/mydns/etc/master.conf
#/usr/local/mydns/etc/ct_acl_list.conf 是电信ACL列表
include "/usr/local/mydns/etc/ct_acl_list.conf";
view CT {
match-clients {CT;};
dlz "Mysql zone" {
database "mysql
{host=x.x.x.x dbname=mydns port=3308 user=root pass=xxxxx} #连接的数据库
{select zone from bind_ct where zone = '$zone$' limit 1}
{select ttl, type, data, resp_person, serial, refresh,retry, expire, minimum from bind_ct where zone ='$zone$' and host = '$record$'}";
};
};
view ANY {
match-clients {any;};
dlz "Mysql zone" {
database "mysql
{host=x.x.x.x dbname=mydns port=3308 user=root pass=xxxxxx}
{select zone from bind_any where zone = '$zone$' limit 1}
{select ttl, type, data, resp_person, serial, refresh,retry, expire, minimum from bind_any where zone ='$zone$' and host = '$record$'}";
};
};
#启动bind
/usr/local/mydns/sbin/named -4
#表结构
mysql> desc bind_ct;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| zone | varchar(255) | NO | MUL | NULL | |
| host | varchar(255) | NO | MUL | @ | |
| type | varchar(6) | NO | MUL | NULL | |
| data | varchar(255) | NO | | NULL | |
| ttl | int(11) | NO | | 86400 | |
| mx_priority | varchar(6) | YES | | NULL | |
| refresh | int(11) | YES | | NULL | |
| retry | int(11) | YES | | NULL | |
| expire | int(11) | YES | | NULL | |
| minimum | int(11) | YES | | NULL | |
| serial | bigint(20) | YES | | NULL | |
| resp_person | varchar(255) | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)
#插入数据
mysql> insert into bind_ct(zone, host, type, data, ttl) values('david.com', 'www', 'A', '202.106.11.3', '600');
Query OK, 1 row affected, 2 warnings (0.00 sec)
>测试
3.DNS 管理平台
DNS管理平台主要功能批量增加记录、删除记录、修改记录、备份记录等功能。
页面展示:
批量添加:
本系统已经上线,代码不方便share。将思路share给大家,还请大家多提意见。