BIND DLZ on Rails

IMPORTANT NOTE: This project has been superseded by the PowerDNS on Rails project and will no longer be supported by me. Someone else can pick up the project and roll with it, please contact me.

Source & Issue Tracker

The source code is available at GitHub and the issue tracker is LightHouse.

Features (current and planned)

  • RESTful architecture to support a rich UI and API’s
  • Multi-user support (admins, owners, API clients)
  • CLI clients to show integration capabilities
  • Conversion and import tools
  • Zone/Record Templates
  • DNS Insight

Overview

Bind is the defacto DNS server out there, and the bind-dlz extensions enhances it even further by providing support for database backends. This simplifies the management of thousands of zones, and provides added redundancy (by way of database replication) and opens the doors for web frontends that ease this even more.

Bind DLZ on Rails is built based on our experience of managing thousands of DNS records through various (often crude) techniques, that included building zone files from databases via cron, and implementing PowerDNS for its database backends.

Nothing we tried seemed convincing, and we opted to go back to Bind using bind-dlz on a MySQL 5.0 backend. Using Rails 2 for a interface just makes sense because we can build a rich interface and an REST API in a single go. We have a lot of integration needs, and this was our main driver.

Bind DLZ Information

The bind-dlz project can be found at http://bind-dlz.sourceforge.net. The documentation is in-depth on that site, I won’t repeat anything here unless its related to this project specifically.

Database Structure

The bind-dlz project allows you to use any database structure you want, since you specify the SQL statements in the configuration files. For the DNS records specifically we’ve opted for a simple two-table approach, `zones` and `records`. The `records` table will be exponentially larger than the the `zones` table, at the very least `zone` * 3 (two NS and one SOA).

Splitting the records table is possible, but the case for it isn’t string enough at this point. Maybe when we reach a couple of million rows, or someone else does, we can investigate splitting that.

Migration to bind-dlz

We plan to build various import and conversion tools after the initial release. You are welcome to submit your own converter/importer for inclusion in the project.

Testing

Bind DLZ on Rails is built using extensive RSpec suites, often termed “Behaviour Driven Development”. It is critical for a core service like DNS to be reliable and that all changes are correct and won’t impact services offered to clients.

Apart from the extensive programmatic tests, we’ll be implementing tests that actually seed a DNS database and use BIND’s dig utility to query a configured bind-dlz installation.

Thanks

Thanks to ISP in a Box for allowing us to build this project in company time and giving us the required infrastructure, support and human testing during the development, now and in the coming months.

flattr this!