DNS Git
Run your own DNS servers and manage your zones easily with Git.
This piece of free software gives you the ability to describe your zone files in a simple DSL (Domain Specific Language) with templates and store everything in a Git repository.
Every time you push your changes, a hook generates all zone files and, if necessary, increases serial numbers. This has been inspired by LuaDNS.
Pre-requisites
DNS Git has been tested with version 4.1.1 of the PowerDNS Authoritative Server.
DNS Git supports two PowerDNS backends: BIND and SQLite3.
You need to have Git and a recent version of Ruby (>= v2.4) installed on
your server. If you want to use the SQLite backend, you'll also need
development packages for Ruby and libsqlite3, plus a C compiler (on
Debian-based OS, ruby-dev, libsqlite3-dev and build-essential should
suffice).
Installation
First, clone the repository (on the machine your PowerDNS server runs on):
# git clone git://github.com/digineo/dnsgit /opt/dnsgit
# cd /opt/dnsgit
Then install the required libraries using bundler.
Depending on whether or not you have PowerDNS configured with
launch=bind or launch=gsqlite3, you need to execute one of these
commands:
# bundle install --with=sqlite
Finally, initialize a sample configuration repository:
Please clone and update the configuration:
git clone root@yourserver.example.com:/opt/dnsgit/data dns-config
Configuration
Run these steps locally on your own machine:
$ cd dns-config
The first thing you should do after setup is modify the contained
config.yml and update the values according to your PowerDNS
installation (remove sqlite: section for launch=bind or remove
bind: section for launch=gsqlite3).
Once that's done, you can update the zones.
Then push your changes back to the server.
$ git commit -m "my commit message"
$ git push
On error, your commit will be rejected.
Examples
Take a look at the lib/example/ and tests folders.
Development
To run tests, simply invoke rake.
Debug output
To get a detailed log of what happens on a git push, modify
bin/hooks/pre-receive on the server:
-ruby -I$basedir/lib $basedir/bin/run.rb
+DNSGIT_DEBUG=all ruby -I$basedir/lib $basedir/bin/run.rb
You can reduce the log amount by setting DNSGIT_DEBUG to a comma-separated
list of (lowercase) class names. Known log-enabled classes include:
bind- for the BIND backendsqlite- for the SQLite backendwork- for details in the SQLite backendzone- logs effects of your DSL files
The class names of log-enabled classes are printed in magenta in the log output.