Using Bind-dlz to store zone data in a database
From Notes
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
- 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
- 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;
- 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 ;
- Setup grants
GRANT USAGE ON postfix.* TO binddlzuser@localhost identified by 'binddlzpassword'; GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO binddlzuser@localhost;
FLUSH PRIVILEGES;
- 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);
