Beschlossen, meine Windows-basierten DNS-Server auf Linux zu verschieben. Das Problem ist, dass ich in der Lage sein muss, Zonendateien dynamisch zu aktualisieren, ohne die Bindung neu starten zu müssen. Es scheint, dass die beliebteste Lösung darin besteht, Bindetreiber für einen Datenbankserver (postgresql, sqlite, mysql) zu installieren und dann die Zonendatei zu aktualisieren. Scheint einfach genug, aber ich kann es nicht dazu bringen, für mein Leben zu arbeiten.
Ich verwende derzeit die Amazon Linux-Distribution, habe aber auch alles in RHEL 6.2 ausprobiert, ohne mehr Glück.
Ich habe ein paar verschiedene Methoden ausprobiert. Die erste bestand darin, die Bindung mit den Quellcodeänderungen für die MySQL-Unterstützung zu kompilieren . Http://pbraun.nethence.com/doc/net/bind-mysql.html . Dies lässt sich gut mit den Änderungen kompilieren und ich erhalte keine Fehler, aber nach dem Ausführen werden make install
alle Binärdateien nach / usr / local / sbin kopiert, aber ich kann den von mir ausgeführten Daemon-Prozess scheinbar nicht starten service named start
und es wird mir nur mitgeteilt, dass es keinen Dienst mit dem Namen "(" gibt. kein Wortspiel beabsichtigt ). Zweitens wird keine der Konfigurationsdateien generiert. Also habe ich eine Datei mit dem Namen.conf erstellt und in /etc/named.conf abgelegt. Dann wurde sie ausgeführt /usr/local/sbin/named-checkconf
und es wurde mir mitgeteilt, dass die Datei /etc/named.conf nicht gefunden werden konnte, sodass ich keine Ahnung habe.
Als nächstes habe ich versucht, das Paket bind-sdb zu installieren und postgresql zu verwenden. Installierte Pakete
Befolgen Sie yum -qy bind bind-sdb bind-utils postgresql postgresql-server
die Schritte auf http://bind-dlz.sourceforge.net/postgresql_example.html. Ich habe eine neue Postgre-Datenbank und -Tabelle usw. erstellt. Nachfolgend finden Sie meine aktuelle namens.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
dlz "my.zone" {
database "postgres 1
{host=localhost port=5432 dbname=bind user=postgre password=****}
{select zone from dns_records where zone = '%zone%'}
{select ttl, type, mx_priority, case when lower(type)='txt' then '\"'
|| data || '\"' when lower(type)='soa' then data || ' ' || resp_person || ' '
|| serial || ' ' || refresh || ' ' || retry || ' ' || expire || ' ' || minimum
else data end from dns_records where zone = '%zone%' and host = '%record%'}";
};
include "/etc/named.rfc1912.zones";
Ausgabe aus meiner Datenbanktabelle
Zone | Host | ttl | Typ | mx_priority | Daten | resp_person | seriell | aktualisieren | verfallen | Minimum ------------ + ------------- + -------- + ------ + ------- ------ + ------------------------ + ------------------ ---- + -------- + --------- + -------- + --------- my.cloud | meine Wolke. | 259200 | SOA | 0 | dns01.my.cloud. | it.cloud.com. | 1 | 28800 | 86400 | 28800 my.cloud | meine Wolke. | 259200 | NS | 0 | dns01.my.cloud. | | 0 | 0 | 0 | 0 my.cloud | dns01 | 259200 | A | 0 | 127.0.0.1 | | 0 | 0 | 0 | 0 (3 Reihen)
Offen für alle Lösungen, wenn mich jemand in die richtige Richtung weisen könnte. Ich würde es vorziehen, MySQL als Datenbank zu verwenden, da ich keine Erfahrung mit Postgresql oder SQLite habe.