Using Bind-dlz to store zone data in a database

From Notes

Jump to: navigation, search

Build Bind from source:


curl -C - -L -O 'http://ftp.isc.org/isc/bind9/9.6.0-P1/bind-9.6.0-P1.tar.gz' tar xzvf bind-9.6.0-P1.tar.gz cd bind-9.6.0-P1

yum install openssl-devel mysql-devel openldap-devel unixODBC-devel gcc

  1. 64 bit systems -

export CPPFLAGS="-I/usr/lib64/mysql $CPPFLAGS" export LDFLAGS="-L/usr/lib64/mysql $LDFLAGS" export LD_LIBRARY_PATH="/usr/lib64/mysql"


./configure \

 --prefix=/usr/local/bind        \
 --disable-openssl-version-check \
 --with-dlz-mysql=yes            \
 --with-dlz-ldap=yes             

make && make install


  1. Login to mysql server, create objects

create database dns_data;

DROP TABLE IF EXISTS dns_values; CREATE TABLE dns_values (

 host VARCHAR(255) DEFAULT  NOT NULL,
 type ENUM('SOA','NS','MX','A','CNAME','TXT','HINFO','PTR') NOT NULL DEFAULT 'SOA',
 data VARCHAR(255),
 ttl INT(11) DEFAULT 300 NOT NULL,
 mx_priority VARCHAR(10),
 refresh INT(11) DEFAULT 0 NOT NULL,
 retry INT(11) DEFAULT 0 NOT NULL,
 expire INT(11) DEFAULT 0 NOT NULL,
 minimum INT(11) DEFAULT 0 NOT NULL,
 serial BIGINT(20) DEFAULT 0 NOT NULL,
 resp_person VARCHAR(255),
 primary_ns VARCHAR(255),
 key host_index (host),
 key type_index (type)

) ENGINE=MyISAM;


DROP TABLE IF EXISTS xfr_table; CREATE TABLE xfr_table (

 zone VARCHAR(255) NOT NULL,
 client VARCHAR(255) NOT NULL,
 key zone_client_index (zone,client)

) ENGINE=MyISAM;


  1. modify to reflect replicated postfix.domains table

CREATE VIEW dns_records AS SELECT

 d.domain        as zone
 ,dv.host        as host
 ,dv.type        as type
 ,dv.data        as data
 ,dv.ttl         as ttl
 ,dv.mx_priority as mx_priority
 ,dv.refresh     as refresh
 ,dv.retry       as retry
 ,dv.expire      as expire
 ,dv.minimum     as minimum
 ,dv.serial      as serial
 ,dv.resp_person as resp_person
 ,dv.primary_ns  as primary_ns

FROM domains d, dns_values dv ;


  1. Setup grants

GRANT USAGE ON postfix.* TO binddlzuser@localhost identified by 'binddlzpassword'; GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO binddlzuser@localhost;


FLUSH PRIVILEGES;


  1. bind start parameters, will setup in init script

/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -f -g -u named


insert into dns_values (host,type,data,ttl,refresh,retry,expire,minimum,serial) values ('ns1.example.com.','A','192.168.142.180',3600,10800,900,604800,600,2009020401);

insert into dns_values (host,type,data,ttl,refresh,retry,expire,minimum,serial) values ('ns2.example.com.','A','192.168.142.181',3600,10800,900,604800,600,2009020401);

Personal tools