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.
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).
First, clone the repository (on the machine your PowerDNS server runs on):
$ ssh root@yourserver.example.com
# git clone git://github.com/digineo/dnsgit /opt/dnsgit
# cd /opt/dnsgitThen 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 --without=sqlite
# bundle install --with=sqliteFinally, initialize a sample configuration repository:
# bin/init
Please clone and update the configuration:
git clone root@yourserver.example.com:/opt/dnsgit/data dns-configRun these steps locally on your own machine:
$ git clone root@yourserver.example.com:/opt/dnsgit/data dns-config
$ cd dns-configThe 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 add -A
$ git commit -m "my commit message"
$ git pushOn error, your commit will be rejected.
Take a look at the lib/example/ and tests folders.
To run tests, simply invoke rake.
To get a detailed log of what happens on a git push, modify
bin/hooks/pre-receive on the server:
# Generate Zones
-ruby -I$basedir/lib $basedir/bin/run.rb
+DNSGIT_DEBUG=all ruby -I$basedir/lib $basedir/bin/run.rbYou 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.