Da ich ein MySQL-Backend für meinen DNS-Server benötige, habe ich mich entschieden, von Bind zu PowerDNS zu wechseln, dessen MySQL-Backend etwas praktischer ist.
Grundsätzlich gilt: Benutzer fügen über ein Web-Frontend Domänen zu meiner Datenbank hinzu, diese Domänen werden registriert und sind für PowerDNS verfügbar. Wenn ich den DNS-Server nach diesen Domänen abfrage, erhalte ich eine gültige Antwort. Funktioniert einwandfrei.
Tatsache ist, dass ich meine Domänen und Zonen zu meinen DNS-Registern hinzufügen muss und das Hinzufügen zur Datenbank die Logik meiner Anwendung zerstören würde (nur Benutzer dieser Anwendung sollten Domänen hinzufügen). Ich möchte zusätzliche Domänen und Zonen zu PowerDNS hinzufügen, ohne sie direkt zu meiner Datenbank hinzuzufügen.
Gibt es eine Möglichkeit, zusätzliche Domänen zu registrieren, beispielsweise in einer Datei, die vor jeder MySQL-Abfrage gelesen wird? Oder vielleicht eine Fallback-Datei, falls in meinen MySQL-Datensätzen nichts gefunden wird?
Antwort1
Lösung gefunden, indie Tiefen des PowerDNS Launchpads! Es gibt eine Möglichkeit, DNS-Datendateien zu lesen, bevor das MySQL-Backend verwendet wird, und zwar... mit zwei Backends! Zitat:
Wie beschrieben inhttp://doc.powerdns.com/modules.html- nur nicht mit so vielen Worten ;) - PowerDNS kann eine beliebige Anzahl verschiedener oder sogar gleicher Backends über die Startanweisung starten. Normalerweise würde man das einfach in der Konfigurationsdatei pdns.conf statt in der Befehlszeile tun. Diese Backends werden in der Reihenfolge, in der sie in der Startanweisung angegeben sind, nach Antworten auf Ihre DNS-Abfrage durchsucht. Das bedeutet, dass, wenn Ihr erstes Backend in der Reihe die Frage beantworten kann, es dies auch tut, und wenn nur das vierte in der Reihe die Frage beantworten kann, kommt es zu einer Verzögerung durch die Schleife durch die ersten drei Backends, bis PowerDNS die Antwort sendet. Es ist daher zwingend erforderlich, dass Sie sicherstellen, dass Ihre Backends antwortenschnell genug„schnell genug“ bedeutet, dass der Empfang und die Antwort in <1 s ausreichen sollten, um mit den meisten rekursiven Nameservern kompatibel zu sein; schneller ist jedoch natürlich besser.
Für mein Problem habe ich Folgendes gewählt:
- Ein Bind-Backend, das als vorrangiges dateibasiertes Backend dient.
- Das MySQL-Backend, das an zweiter Stelle kommt.
Im Grunde genommen ist lediglich eine kleine Konfigurationsänderung in erforderlich pdns.local
:
launch=bind,gmysql
Ich habe gehört, dass man mit (weist Backends Namen zu) noch spezifischer sein könnte:
launch=bind:first,gmysql:second
Fügen Sie dann einfach Parameter für beide Backends hinzu:
# Bind backend configuration
bind-config=/path/to/your/zones/file
# MySQL configuration
gmysql-host=localhost
gmysql-port=
gmysql-dbname=db
gmysql-user=user
gmysql-password=passwd
gmysql-dnssec=no
Sie müssen lediglich eine Bind-Zonendatei ( zone{}
Blöcke) erstellen, die auf domänenspezifische Dateien verweist (die SOA-, A-, MX-, NS- usw. Datensätze enthalten).
Neu starten !