aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan HuntBIND 9 DLZ MySQL module with support for dynamic DNS (DDNS)
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan HuntAdapted from code contributed by Marty Lee, Maui Systems Ltd.
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan HuntThis is a dynamically loadable zone (DLZ) plugin that uses a fixed-
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Huntschema MySQL database for back-end storage. It allows zone data
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Huntto be updated via dynamic DNS updates, and sends DNS NOTIFY packets
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Huntto other name servers when appropriate.
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan HuntThe database for this module uses the following schema:
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt CREATE TABLE `Zones` (
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `id` int(11) NOT NULL AUTO_INCREMENT,
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `domain` varchar(128) NOT NULL DEFAULT '',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `host` varchar(128) NOT NULL DEFAULT '',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `admin` varchar(128) NOT NULL DEFAULT '',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `serial` int(11) NOT NULL DEFAULT '1',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `expire` int(11) NOT NULL DEFAULT '86400',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `refresh` int(11) NOT NULL DEFAULT '86400',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `retry` int(11) NOT NULL DEFAULT '86400',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `minimum` int(11) NOT NULL DEFAULT '86400',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `ttl` int(11) NOT NULL DEFAULT '86400',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `writeable` tinyint(1) NOT NULL DEFAULT '0',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt PRIMARY KEY (`id`),
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt KEY `domain_idx` (`domain`)
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt );
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt CREATE TABLE `ZoneData` (
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `id` int(11) NOT NULL AUTO_INCREMENT,
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `zone_id` int(11) NOT NULL,
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `name` varchar(128) NOT NULL DEFAULT '',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `type` varchar(16) NOT NULL DEFAULT '',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `ttl` int(11) NOT NULL DEFAULT '86400',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt `data` varchar(128) NOT NULL DEFAULT '',
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt PRIMARY KEY (`id`),
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt KEY `zone_idx` (`zone_id`),
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt KEY `name_idx` (`zone_id`, `name`),
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt KEY `type_idx` (`type`)
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt );
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt'Zones' contains information about specific zones:
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - domain: the zone name
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - admin: the zone administrator
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - serial, expire, reresh, retry, minimum: values in the SOA record
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - ttl: default zone TTL
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - writeable: set to true if the zone can be updated via DDNS
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt'ZoneData' contains the individual records within the zone:
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - zone_id: the 'id' from the corresponding record in Zones
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - name: domain name, relative to the zone apex. (Data at the zone
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt apex itself may use a blank name or "@".)
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - type: the RR type, expressed as text
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - ttl: the record's TTL
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt - data: the records rdata, expressed as text.
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan HuntTo configure this module in named.conf:
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Huntdlz "mysqldlz" {
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt database "dlopen <path to>/dlz_mysqldyn_mod.so <dbname> [dbhost [dbuser [dbpass]]]";
aefb3e308ba01ad47a3d3aaadf77a5edd4261cb9Evan Hunt};