Dynamic database API aka DynDB for BIND 9

BIND 9.11: DynDB patches are now part of the upstream BIND.

Historical description of the API follows. It may not be up-to-date.

Patches for official BIND9 as used by bind-dyndb-ldap driver are available from bind-dynamic_db repository on Github. This repository is a fork of official ISC BIND repository.

Availability

DynDB patches used by bind-dyndb-ldap project are present in BIND packages:

  • Red Hat Enterprise Linux versions 6 and 7
  • Debian version Jessie
  • Ubuntu 14.10 (Utopic Unicorn).

Principle

Dyndb API basically allows you to pull arbitrary code into BIND process and to pass pointers to some important BIND’s internal structures to your code. As a result, it allows the DynDB driver to hook into native BIND’s database API.

Advatanges

Properly implemented DynDB drivers can have full configuration & performance capabilities of native BIND.

All advantages and disadvantages are just results of this fact:

  1. The API itself has almost zero overhead. E.g. bind-dyndb-ldap offers ~ 99 % of read/query performance when compared with native BIND’s zones. (Compare this with DLZ API where strings are being passed back and forth and re-parsed all the time.)
  2. Drivers can decide to support DNSSEC.
  3. The API itself also supports transactions on database level (for DNS dynamic updates).
  4. The API itself supports all other fancy things:
    • Incremental zone transfers,
    • In-line DNSSEC zone signing (i.e. unsigned data are in database and data are signed by BIND while zone is loading.
    • ... and others.

Disadvantages

This API is more complex than DLZ and is not yet part of original BIND distribution.

Future development

Currently (2015-05-15) we are working with ISC to get the patches merged upstream into official BIND distribution.

Please note that DynDB API is going to change before it reaches official BIND tree!

Work-in-progress version of BIND with improved (but not yet final) DynDB API is available from https://github.com/each/dyndb-work/tree/dyndb (branch dyndb).

This version is incompatible with API versions in RHEL and other distros because we are working on it right now! Improvements require some non-compatible changes, for the greater good! :-)

History

Some historical versions of patches are still available from https://github.com/mnagy/bind-dynamic_db/downloads. Do not use them in production!