Zone-Transfer von PowerDNS zu BIND9

DNS-Verwaltung ist immer so eine Sache. Ich baue meine Setups mittlerweile mit PowerDNS und BIND9 zusammen. PowerDNS dient als „versteckter“ Master, der an sich nicht auf externe Anfragen antwortet. Die BIND9 Server beziehen ihre Zonen via Zonetransfer vom PowerDNS. Dazu kommt dann noch PowerAdmin. Somit hat man ein DNS-Setup mit Webinterface (und MySQL-Backend) und alle Vorteile in Sachen Geschwindigkeit von BIND9 bleiben erhalten.

Irgendwie muss die Slave-Config auf die BIND9-Slave Maschinen kommen. Hierzu ein kleines, simples PHP-Script.

#!/usr/bin/php
<?php
/**
 * Generiert eine BIND9 Slave Konfiguration aus
 * der PowerDNS-Master Datenbank.
 * 
 * @author Simon Lauger <simon@lauger.name>
 * @date   11.06.2011
 */

$dsn    = 'mysql:dbname=pdns;host=127.0.0.1';
$user   = 'root';
$pass   = 'password';
$master = '127.0.0.1';

try {
    $dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    exit;
}

$result = $dbh->query('SELECT name FROM domains;');

foreach ($result as $row):
echo 'zone "'.$row['name'].'" {
	type slave;
	file "'.$row['name'].'.hosts";
	masters {
		'.$master.';
	};
};';
echo "\n";
endforeach;

?>

Diese Konfiguration wird komplett via Puppet auf unsere BIND9 Slaves verteilt.

class bind9 {
...
        file { "/etc/bind/named.conf.local":
                mode => 640,
                owner => root,
                group => bind,
                ensure => file,
                source => "puppet:///modules/bind9/named.conf.local",
        }
...
}

Um auch Konfigurationsänderungen zu berücksichtigen sollte zudem noch ein Reload des BIND9s via Cronjob eingerichtet werden.

Einen Kommentar hinterlassen

Du musst eingeloggt sein um einen Kommentar schreiben zu können.