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.
Antworten:
Vielleicht nicht wirklich eine Antwort auf Ihre Frage, aber trotzdem. (Ich habe dieses Problem kürzlich ebenfalls untersucht, und hier sind meine Schlussfolgerungen):
Die DLZ-Unterstützung in BIND9 ähnelt eher einem "Patch". Es ist nicht gut dokumentiert - kein einziges Wort darüber in BIND ARM. Es scheint nicht weit verbreitet zu sein. Die Abfrageleistung ist schrecklich - laut diesem Benchmark wird PostgreSQL 30-mal (!) Langsamer sein als der normale In-Memory-Betrieb. (Der Benchmark ist alt, aber es gibt keinen Grund anzunehmen, dass sich die Dinge drastisch verbessert haben).
Ich denke nicht, dass es eine "beliebteste Lösung" ist.
Andere Optionen:
BIND9 unterstützt dynamische Updates. Es ist gut dokumentiert, weit verbreitet und einfach zu implementieren. Keine Leistungseinbußen - alle Anfragen werden noch aus dem Speicher beantwortet . Die Einrichtung ist einfacher, da keine Datenbank erforderlich ist. Sie führen Aktualisierungen programmgesteuert mithilfe von DNS-Protokollbibliotheken (die wahrscheinlich für die meisten Sprachen vorhanden sind, ich selbst verwende PHP) oder über das Befehlszeilentool durch
nsupdate
. Dies ist die Lösung, die ich empfehlen würde.Wenn Sie wirklich eine Datenbank möchten - PowerDNS scheint für die Verwendung mit dem Datenbank-Backend ausgelegt zu sein. Es verfügt über Funktionen, die dazu beitragen können, die Leistung bei der Verwendung von Datenbanken nicht vollständig zu beeinträchtigen, z. B. können Datenbankabfragen für einige Zeit zwischengespeichert werden, anstatt jedes Mal die Datenbank abzufragen. Einige anständige DNS-Hostings verwenden PowerDNS.
Exotischere Option - BIND10 ist zwar noch in Arbeit, aber Entwickler behaupten, dass die Leute es tatsächlich in der Produktion verwenden. Derzeit verwendet BIND10 das SQLITE-Backend.
quelle
Um der Vollständigkeit halber die ursprüngliche Anforderung zu erfüllen ("Zonendateien dynamisch aktualisieren, ohne die Bindung neu starten zu müssen"): Bearbeiten Sie die Zonendateien, und senden Sie SIGHUP an named. Der Dämon liest die Zonendateien erneut.
quelle
Es ist etwas spät, aber ich habe hier ein Tutorial gemacht .
Die DLZ-Unterstützung ist vollständig in bind9 integriert. Sie müssen sie nur beim Ausführen aktivieren
./configure
.Es ist nicht schwierig, in der Tat ist es ziemlich einfach, aber es ist sehr schlecht dokumentiert.
Mein Tutorial ändert das.
Jetzt sollten Sie nicht länger als 30 Minuten (einschließlich Kompilierungszeit) brauchen, um es in Betrieb zu nehmen.
Leider kann ich das Tutorial hier nicht kopieren, es ist zu groß.
quelle
# yum install -y bind bind-sdb
quelle