bind mysql django_Django+bind dlz DNS管理平台

本文介绍了使用Django、bind和MySQL搭建的DNS管理平台,通过DLZ功能将DNS区域和记录存储在数据库中,实现高可用性和负载均衡。平台具备批量管理DNS记录的功能,包括添加、删除和修改。
摘要由CSDN通过智能技术生成

经过两周开发,DNS管理平台终于开发完成。今天正好有时间,给大家分享一下。

1.整体架构

144da55279e972d962ec8d91afd39027.png      > 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)

>测试

3265aa92b2fe805f8696ece584a6b2d6.png

3.DNS 管理平台

DNS管理平台主要功能批量增加记录、删除记录、修改记录、备份记录等功能。

页面展示:b0e311f45183f7b2be192b4c2baeac49.png

批量添加:

caefb6132b94bcfa404dfceb2dc4d840.png

本系统已经上线,代码不方便share。将思路share给大家,还请大家多提意见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值