bind+dlz+mysql实现区域记录动态更新

BIND-DLZ实验:http://bind-dlz.sourceforge.net/

实验环境:RHEL4,BIND-9.5.0-P2.tar.gz(9.4.0以上版本都已含DLZ补丁),Mysql-5.0.56.tar.gz

1、安装mysql(先安装gcc等相关软件包)

#tar zxvf mysql-5.0.56.tar.gz 
   #cd mysql-5.0.56
   #./configure --prefix=/usr/local/mysql --localstatedir=/usr/loal/mysql/data --   libexecdir=/usr/local/mysql/lib --disable-shared
   #make
   #make install
   #cd /usr/local/mysql/
   #groupadd -g 1003 mysql
   #useradd -g 1003 mysql
   #chown -R mysql .
   #chgrp -R mysql .
   #chown -R mysql lib
   #./bin/mysql_install_db --user=mysql //以mysql的用户身份安装
   #chown -R root .
   #./bin/mysqld_safe --user=mysql & //在后台启动mysql

# cd /root/mysql-5.0.56
# cp support-files/my-medium.cnf /etc/my.cnf
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 700 !$
# chkconfig --add mysqld
# chkconfig --list mysqld
  mysqld 1:off 2:on 3:on 4:on 5:on 6:off
# service mysqld start[restart/reload/stop]
# vi /etc/my.cnf
 add this:(防止mysql服务器无查询后8小时自动重连)
wait_timeout = 86400

interactive_timeout = 86400

#/usr/local/mysql/bin/mysqladmin -uroot password ‘aptech‘
   #./bin/mysql -uroot -paptech

#echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

#. !$

2、安装bind

#tar zxvf bind-9.5.0-P2.tar.gz 
   #cd bind-9.5.0-P2
   #./configure --prefix=/usr/local/bind9 --with-dlz-mysql=/usr/local/mysql --enable-threads=no

//--with-dlz-mysql=/usr/local/mysql 要求bind安装中支持DLZ

//--enable-threads=no 关闭多线程

//--disable-openssl-version-check 禁止openssl版本的检查
   #make
   #make install

3、创建database,table

create database mydata;

use mydata;

create table other_dns_records(

zone varchar(255),

host varchar(255),

type varchar(255),

data varchar(255),

ttl int(11),

mx_priority varchar(255),

refresh int(11),

retry int(11),

expire int(11),

minimum int(11),

serial bigint(11),

resp_person varchar(255),

primary_ns varchar(255));

create table cnc_dns_records(

   host varchar(255),

type varchar(255),

data varchar(255),

ttl int(11),

mx_priority varchar(255),

refresh int(11),

retry int(11),

expire int(11),

minimum int(11),

serial bigint(11),

resp_person varchar(255),

primary_ns varchar(255));

insert other_dns_records(zone,host,type,data,ttl,retry)

values(‘aaa.com‘,‘www‘,‘A‘,‘192.168.199.2‘,‘86400‘,‘13‘);

insert cnc_dns_records(zone,host,type,data,ttl,retry)

values(‘bbb.com‘,‘www‘,‘A‘,‘192.55.199.199‘,‘86400‘,‘13‘);

4、编辑/usr/local/bind9/etc/named.conf

#cd /usr/local/bind9/etc

#../sbin/rndc-confgen -a

#../sbin/rndc-confgen > named.conf

#vi !$   //vi named.conf

#less named.conf

# Use with the following in named.conf, adjusting the allow list as needed:
 key "rndc-key" {
        algorithm hmac-md5;
        secret "c4aUV+N7GbOF773V+/LnAA==";
 };
 
 controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
 };
# End of named.conf
options {
directory "/usr/local/bind9/etc/";
pid-file "/usr/local/bind9/var/run/named.pid";
allow-query { any; };
recursion no;
version "gaint-d1";
};
include "/usr/local/bind9/etc/cnc.cl";
include "/usr/local/bind9/etc/other.cl";
view "cnc-user" {
match-clients { cnc; };
dlz "Mysql zone" {
database "mysql
{host=localhost dbname=mydata ssl=false port=3306 user=root pass=aptech}
{select zone from cnc_dns_records where zone = ‘%zone%‘}
{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
cnc_dns_records where zone = ‘%zone%‘ and host = ‘%record%‘}";
};
};
view "other-user" {
match-clients { other; };
dlz "Mysql zone" {
database "mysql
{host=localhost dbname=mydata ssl=false port=3306 user=root pass=aptech}
{select zone from other_dns_records where zone=‘%zone%‘}
{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
other_dns_records where zone = ‘%zone%‘ and host = ‘%record%‘}";
};
};
[[email protected] etc]# less cnc.cl 
acl "cnc"{
192.168.9.0/24;
};

[[email protected] etc]# less other.cl 
acl "other" {
127.0.0.0/18;
};

5、启动&测试

[[email protected] ~]# /usr/local/bind9/sbin/named -gc  /usr/local/bind9/etc/named.conf
06-Mar-2009 22:23:02.569 starting BIND 9.5.0-P2 -gc /usr/local/bind9/etc/named.conf
06-Mar-2009 22:23:02.579 loading configuration from ‘/usr/local/bind9/etc/named.conf‘
06-Mar-2009 22:23:02.583 listening on IPv4 interface lo, 127.0.0.1#53
06-Mar-2009 22:23:02.586 listening on IPv4 interface eth0, 192.168.1.5#53
06-Mar-2009 22:23:02.588 Loading ‘Mysql zone‘ using driver mysql
06-Mar-2009 22:23:02.604 default max-cache-size (33554432) applies: view cnc-user
06-Mar-2009 22:23:02.609 Loading ‘Mysql zone‘ using driver mysql
06-Mar-2009 22:23:02.612 default max-cache-size (33554432) applies: view other-user
06-Mar-2009 22:23:02.616 default max-cache-size (33554432) applies: view _bind
06-Mar-2009 22:23:02.621 command channel listening on 127.0.0.1#953
06-Mar-2009 22:23:02.621 ignoring config file logging statement due to -g option
06-Mar-2009 22:23:02.623 running

注:加-gc参数可显示出启动日志,以便出错排查;显示running表示配置正确.

来源: http://blog.chinaunix.net/uid-10435474-id-2957057.html

来自为知笔记(Wiz)

时间: 2024-10-25 08:25:54

bind+dlz+mysql实现区域记录动态更新的相关文章

黄聪:mysql 存在该记录则更新,不存在则插入记录的sql

一条mysql教程 存在该记录则更新,不存在则插入记录的sql INSERT table (auto_id, auto_name) values (1, ‘yourname') ON DUPLICATE KEY UPDATE auto_name='yourname' ON DUPLICATE KEY UPDATE的使用 如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE.例如,如果列a被

mysql 存在该记录则更新,不存在则插入记录的sql

INSERT test(id, name) values (1, 'hello') ON DUPLICATE KEY UPDATE name='baby'; 原始数据: 运行后数据: 如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE. 如果行作为新记录被插入,则受影响行的值为1:如果原有的记录被更新,则受影响行的值为2.

mysql数据库操作记录持续更新...

1.查看删除数据库表的唯一约束 SHOW INDEX FROM tbl_name (唯一约束也是索引) ALTER TABLE tbl_name DROP INDEX index_name 2.update where中不能使用子查询,解决方案如下: 将子查询作为一张表放在前面 UPDATE `areainfo` a, ( SELECT code FROM `areainfo` where level = 1 ) b SET a.`level` =2 WHERE a.`parent_code`

bind9+dlz+mysql连接断开问题

前言 关于bind-dlz介绍:http://bind-dlz.sourceforge.net/ DLZ(Dynamically Loadable Zones)与传统的BIND9不同,BIND的不足之处: BIND从文本文件中获取数据,这样容易因为编辑错误出现问题. BIND需要将数据加载到内存中,如果域或者记录较多,会消耗大量的内存. BIND启动时解析Zone文件,对于一个记录较多的DNS来说,会耽误更多的时间. 如果近修改一条记录,那么要重新加载或者重启BIND 才能生效,那么需要时间,可

DNS&BIND——动态更新的DNS主从复制

本文配置的正向解析的主从服务,反向同理,不赘述了.... 从服务器应该是一台独立的名称服务器(首先要成为缓存服务器) 主动通知的必要条件(i或ii,满足其一即可) 主服务器的区域解析库文件中,必须有一条NS记录是指向从服务器(主动通知) master: vim  /etc/named.rfc1912.zones also-notify {slave_ip;}; 从服务器只需要定义区域.而无需提供解析库文件; 解析库文件自动同步至/var/named/slaves目录中 主服务器得允许从服务器作区

Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新

DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工,其次如果这台服务器出现了硬件故障那么服务器管理的区域的域名将无法访问.为了解决这些问题,最好的办法就是使用多个DNS服务器同时工作,并实现数据的同步,这样两台服务器就都可以实现域名解析操作. 从服务器要点 1.应该为一台独立的名称服务器 2.主DNS服务器的区域解析库文件中必须有一条NS记录指向从服务器 3.从DNS服务器只

mysql进阶 十四 批量更新与批量更新多条记录的不同值实现方法

mysql 批量更新与批量更新多条记录的不同值实现方法 在mysql中批量更新我们可能使用update,replace into来操作,下面详细介绍mysql批量更新与性能. 批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: UPDATE mytable SE

bind配置mysql后台

参考文档: http://blog.csdn.net/lishangwen_alan/article/details/53332889 http://www.cnblogs.com/xiongpq/p/3384681.html 需求说明:  bind下用mysql可以动态加载DNS记录(dlz), 唯一有点不爽的是mysql  bind 都需要源码编译安装, 简直吐血, 所以整理下来. 1. mysql 编译安装: 安装依赖包 yum -y install make gcc-c++ cmake

Bind+DLZ构建企业智能DNS

Bind+DLZ构建企业智能DNS 目录:一.简介二.服务规划三.安装BIND及基本环境四.配置Bind-View-DLZ-MYSQL五.添加相关记录并进行测试六.配置从DNS七.补充 一.简介:1.智能DNS(Bind-view):智能DNS 原理很简单:在用户解析一个域名的时候的,判断一下用户使用的IP,然后跟DNS 服务器内部的IP 表匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP 地址.目前的域名服务运营商不提供智能DNS 服务,所以必须自行架设DNS 服务或者使用网上免