Wie kann ich alle meine Domains mit minimaler Konfiguration verwalten?

10

Dies ist eine kanonische Frage zur Verwaltung von DNS-Servern.

Ich habe ungefähr hundert Domains. Alle diese Domänen müssen identisch konfiguriert werden, aber es scheint eine enorme Zeitverschwendung zu sein, für jede dieser Domänen eine neue Zone und / oder Zonendatei konfigurieren zu müssen. Es muss einen besseren Weg geben, dies zu automatisieren!

Ich glaube, ich bin auf dem richtigen Weg ... Wenn ich eine Zone mit dem Namen "Erstellen" .oder eine andere Funktion in meiner DNS-Software verwende, um immer eine bestimmte IP-Adresse zurückzugeben, wenn ein AEintrag angefordert wird, scheint dies mich meinem gewünschten Ende ziemlich nahe zu bringen Ergebnis. Mein Server reagiert autoritativ auf die Anfragen und es ist so viel einfacher zu verwalten!

Dies funktionierte hervorragend, bis die Nameserver-Validierungssoftware diese Domänen überprüfte. Ich habe herausgefunden, dass ich die meisten Fehler durch Hinzufügen von NSDatensätzen beseitigen kann , aber meine Software lässt mich nicht mehr als einen SOADatensatz in dieselbe Zonendatei einfügen.

Wie kann ich dieses SOAProblem mit mehreren Datensätzen umgehen?

Andrew B.
quelle

Antworten:

12

Sofern ich die Frage nicht falsch verstehe, mache ich dies regelmäßig mit BIND und es scheint in Ordnung zu sein, solange jede Zone absolut identisch ist.

Auf meinem primären Nameserver befinden sich named.confEinträge, die auf die generische Zonendatei verweisen, z

zone "example.com" {
        type master;
        file "primary/example.GENERIC";
};

zone "example.co.uk" {
        type master;
        file "primary/example.GENERIC";
};

und dann eine Zonendatei primary/example.GENERIC, in der z

;; Start of Authority
@       IN      SOA     ns.teaparty.net. dns.gatekeeper.ltd.uk. (
                        2004091201      ; serial number YYYYMMDDNN
                        28800           ; refresh  8 hours
                        7200            ; retry    2 hours
                        864000          ; expire  10 days
                        3600 )          ; min ttl  1 day
;;
;;      Name Servers
                IN      NS      ns.teaparty.net.
                IN      NS      ns2.teaparty.net.

Und mir sind überhaupt keine Probleme mit diesen Zonen bekannt. Ich bin offen dafür, dass mir gesagt wird, dass ich die Frage falsch verstanden habe oder dass meine Domains tatsächlich nicht funktionieren, aber bis dahin denke ich, dass es für mich funktioniert.

Beachten Sie, dass Sie nicht denselben Trick auf der Sekundärseite ausführen können. Für jede Zone muss eine andere Datei gespeichert werden. Da der Inhalt dieser Datei jedoch durch Zonenübertragungen von der primären Datei gefüllt und auf dem neuesten Stand gehalten wird, ist dies keine große Sache.

MadHatter
quelle
4

Es gibt eine Reihe von Verknüpfungen, mit denen Sie Ihr Leben einfacher gestalten können:

Wenn Sie Bind oder eine ähnliche Software verwenden, die Dateien zum Speichern der Zonendaten verwendet: Zeigen Sie mit Ihren Zonen auf dieselbe Datei, zum Beispiel:

zone "example.net" {
    type master;
    file "/etc/bind/zone/default.zone";
};

zone "example.org" {
    type master;
    file "/etc/bind/zone/default.zone";
};

Da Sie bestimmte DNS-Abkürzungen verwenden können, können Sie eine universelle Zonendatei erstellen:

$TTL 1h      ; default expiration time of all resource records without their own TTL value
@  IN  SOA   ns1.example.com. username.example.com. ( 
                               20140218131405 ; Serial number YYYYMMDDHHMMSS
                                        28800 ; Refresh     8 hours
                                         7200 ; Retry       2 hours
                                       604800 ; Expire      7 days
                                        86400 ; Minimum TTL 1 day )
@             IN  NS    ns1.example.com.      ; ns1.example.com is a primary nameserver
@             IN  NS    ns2.example.com.      ; ns2.example.com is a backup nameserver
@             IN  MX    10 mail.example.com.  ; mail.example.com is the mailserver
@             IN  MX    20 mail2.example.com. ; the secondary mailserver
@             IN  A     192.0.2.1             ; IPv4 address for the bare domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for the bare domain
www           IN  A     192.0.2.1             ; www.domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for www.domain - note by starting the line with a blank it becomes the continuation of the previous record and this IPv6 record applies to www
wwwtest       IN  CNAME www                   ; wwwtest is an alias for www

Dies nutzt die Tatsache aus, dass die Hostnamen in Zonendateien, die nicht mit einem Punkt enden, .immer mit dem Punkt erweitert werden, der $ORIGINwiederum implizit auf den Zonennamen festgelegt ist. Und @ist eine Abkürzung für den $ ORIGIN.


Aktivieren Sie eine Methode, die programmgesteuert mit Ihren Nameservern interagiert, anstatt einzelne Zonendateien manuell zu verwalten.

Ich habe PowerDNS verwendet, das ein RDMS als Back-End ermöglicht, das sehr gut zu dem LAMP-Stack passt, den wir damals verwendeten. Cloud-Dienste wie Amazon Route 53 stellen auch Web-APIs zur Verfügung.

Aber auch ehrwürdige Bindungen unterstützen auch dynamische Aktualisierungen, bei denen es sich um Methoden zum Hinzufügen, Ersetzen oder Löschen von Einträgen auf einem Masterserver handelt, indem eine spezielle Form von DNS-Nachrichten gesendet wird. Das Format und die Bedeutung dieser Nachrichten sind in RFC 2136 angegeben .

Die dynamische Aktualisierung wird durch Einfügen einer allow-updateoder einer update-policyKlausel in die Zonenanweisung aktiviert . Weitere Informationen finden Sie im Bind Administrator-Referenzhandbuch .

HBruijn
quelle
2
Die erste Hälfte Ihrer Antwort ist tot, aber ich bin nicht sicher, ob DDNS hier gilt ... es kann nicht zum Hinzufügen oder Entfernen von Zonen verwendet werden, was das besiegt, was die meisten Leute in diesem Szenario zu erreichen versuchen. (Sie müssen nicht für jede hinzugefügte Zone die Datei named.conf berühren.) Das Nächste, was ich in BIND land kenne, ist die neue rndc addzoneOption, aber das ist immer noch hässlich, da am Ende eine Konfigurationsdatei mit einem Hash-Namen im Arbeitsverzeichnis für generiert wird jede hinzugefügte Zone.
Andrew B
Verstehen Sie, was Sie sagen wollen, aber eine andere Interpretation ist, dass die Schwierigkeit bei vielen Domänen darin besteht, die Arbeit aufrechtzuerhalten und zu duplizieren. Das Automatisieren / Skripten von DNS ist nicht gut dokumentiert.
HBruijn
4

Kurze Antwort

Wenn Sie in BIND nach einem Setup ohne Konfiguration suchen, ist es nicht vorhanden. Das Einrichten einer Root-Zone ( .) scheint eine gute Idee zu sein, ist es aber nicht. Sie müssen eine Lösung finden, bei der DNS nicht entsprechend Ihren Anforderungen unterbrochen wird.

Lange Antwort

Wir haben im letzten Jahr mehrmals Varianten dieser Frage erhalten.

Die Antwort ist hier ziemlich einfach: Sie können keine einzelne Zonendefinition einrichten. Jede Software, die Sie definieren , oder auf andere Weise synthetisieren mehr kann SOADatensätze in diesem Zusammenhang ist gebrochen Software und gebrochene Dinge zu tun , ist nicht auf Thema für ServerFault. Sie müssen entweder eine DNS-Software auswählen, die diese Verwaltung für Sie vereinfacht, oder Sie müssen eine andere Strategie entwickeln, die diese bestimmte Verknüpfung nicht beinhaltet.

Es gibt definitiv einige Tricks, die Sie verwenden können, um das Leben einfacher zu machen. Am Beispiel von BIND ist es ziemlich üblich, mehrere Zonen zu definieren, die alle auf dieselbe Vorlagenzonendatei verweisen. Dies ist völlig legal und Validierungssoftware wird nichts Falsches daran finden: siehe MadHatters Antwort. Die meisten Leute geben diese Lösung weiter, weil es immer noch "zu viel Arbeit" ist, bei jedem Erwerb einer neuen Domain eine Zonendeklaration hinzuzufügen, aber es gibt keine Option "Einmal konfigurieren und weggehen" für diese Art von Hosting.

Neuere Versionen von BIND unterstützen eine Option namens allow-new-zones, mit der Sie über die neue rndc addzoneFunktionalität im laufenden Betrieb dynamisch Zonendefinitionen erstellen können. Vielleicht möchten Sie sich das ansehen und sehen, ob es Ihren Anforderungen entspricht.

Abgesehen von den vorgeschlagenen Lösungen sind Ihre Optionen etwas eingeschränkt. Manchmal bleibt die Arbeit einfach hängen, wenn die Software die Dinge nicht so macht, wie Sie es möchten.

Andrew B.
quelle
-2

Wenn Sie sagen, dass Domänen identisch konfiguriert werden müssen, müssen sie dieselben Ressourceneinträge enthalten? Wäre in diesem Fall eine DNAMERR für alle außer einer Domain keine sauberere Lösung?

Ich kann den Trick von @MadHatter nicht übertreffen, dieselbe Vorlagendatei zu importieren, während ich mich strikt an Ihre Frage halte. Ich kann nur einen ähnlichen Ansatz für das LDAPBackend anbieten (in meinem Fall mit powerDNS verwendet): Fügen Sie die associatedDomainAttribute für die relevanten SOA- und NS-Datensätze wie folgt hinzu :

dn: dc=vanitydomains,ou=DNS,dc=myDIT
objectClass: dNSDomain2
objectClass: domainRelatedObject
dc: vanitydomains
associatedDomain: vanitydomain.ORG
associatedDomain: vanitydomain.NET
associatedDomain: vanitydomain.COM
associatedDomain: vanitydomain.INFO
sOARecord: NS1.example.com  sysadmin.example.com 2011100701 28800 1800 2592000 10800
dNameRecord: example.com
nSRecord: NS1.example.com
nSRecord: NS2.example.com
sema
quelle
Leider verfehlt die DNAME-Technik aufgrund von Einschränkungen der RFCs den Scheitelpunkt der Zone. Die aus DNAME-Aufzeichnungen resultierende CNAME-Synthese unterliegt weiterhin den gleichen Einschränkungen wie nicht synthetische CNAME-Aufzeichnungen. Im Gegensatz zur Lösung von MadHatter ist das Ergebnis weit entfernt von 100% identischen RRsets.
Andrew B