Inhaltsverzeichnis
Was ist das?
DNS ist ein Namensauflösungssystem - also die Umwandlung von Hostnamen in IP-Adressen.
Kurze Einführung in das Domain-System:
- eine Domain kann bei einem Registrar für einen bestimmten Zeitraum (x Jahre) registriert werden. Dies kostet je nach Anbieter und Top-Level-Domain üblicherweise zwischen 5 und 20 Euro pro Jahr.
- der Registrar ist für die Namensauflösung verantwortlich (oft per Web-Interface konfigurierbar) und betreibt dafür eigene Nameserver oder lässt die Konfiguration eigener Nameserver zu
- prinzipiell sind somit zwei Modelle möglich:
- Verwaltet vom Registrar
- Alle Namenseinträge (A, CNAME, MX, SRV, ...) lassen sich über ein Interface beim Registrar einstellen. Die Nameserver des Registrars kümmern sich dann um die Verbreitung.
- Selbstverwaltet
- Wir definieren beim Registrar mindestens zwei eigene Nameserver, die zukünftig die Namenseinträge dieser Domain ("Zone") ausliefern sollen.
Da wir ein Hackspace sind und Lust aufs Basteln haben, ist es fraglos viel aufregender, wenn wir unsere DNS-Zone selbst verwalten
Was wollen wir?
- wir brauchen mindestens zwei externe DNS-Server, die unsere Domain-Einträge verbreiten
- diese geben wir beim Domain-Registrar an - er verweist zukünftig auf diese Nameserver, wenn Anfragen bei ihm eingehen
- wir wollen die DNS-Server synchron halten
die gebräuchlichste Lösung dafür ist der Zone-Transfer
- die Einstiegshürde zur Anpassung der DNS-Einträge sollte eher niedrig sein
Umsetzung
Server
Wir verwenden aktuell folgende externe DNS-Server (Replicas):
- 109.239.50.136 / ns1.farbdev.org (Kontakt: Konrad, derzeit auf Eis)
- 78.47.131.46 / ns2.farbdev.org (Kontakt: Konrad)
Beide Replicas werden durch Zonen-Transfers des Master-DNS-Servers im DNS Container aktualisiert.
Master-Einstellungen
Auf dem DNS Container ist PowerDNS installiert. Die Einstellungen liegen unter /etc/powerdns/. Nachdem wir 2014 mit dem Bind-Zonen-Format begonnen haben, sind wir später auf das PostgresQL-Backend umgestiegen. Das Admin-Interface für PowerDNS ist unter dns.hack-hro.de erreichbar. Zuvor ist eine Anmeldung via ldap-Zugangsdaten notwendig. Anschließend wird das PowerAdmin-Passwort benötigt.
Admin-Passwort-Träger:innen: * Konrad * lars
Replica-Einstellungen
Der Zonen-Transfer wird von verschiedenen DNS-Implementierungen unterstützt. Wir können also unabhängig von dem spezifischen Master-DNS-Server auch anderen Implementierungen als Replicas verwenden.
Bind
Bind ist eine verbreitete DNS-Implementierung.
Die folgende Zonen-Definition ist ausreichend:
zone "hack-hro.de" { type slave; file "hack-hro.de.zone"; masters { 5.45.100.156 }; allow-transfer { none; }; };
PowerDNS
PowerDNS ist ein freier DNS-Server, der verschiedene Daten-Backends (Datenbanken, LDAP, Skripte, ...) unterstützt.
Die allgemeine PowerDNS-Konfiguration ist sehr übersichtlich:
master=no slave=yes launch=bind bind-config=/etc/powerdns/bindbackend.conf local-address=ipv4-adresse
Die letzte Zeile sollte um die IPv4 Adresse eures Server ergänzt werden. Das ist insbesondere dann wichtig, wenn euer Server mehrere IP-Adressen hat, weil die Antworten des DNS dann verloren gehen können. Unter der obigen Verwendung des bind-Backends (also mit Zone-Definitionen im Bind-Format) lässt sich unsere Zone folgendermaßen in der Datei /etc/powerdns/bindbackend.conf definieren:
zone "hack-hro.de" { type slave; masters { 5.45.100.156 }; file "/var/run/powerdns/pdns-hack-hro.de.zone"; };
Übliche Aktivitäten
DNS-Einträge abfragen
Das Programm dig (im Debian-Paket dnsutils enthalten) ist ein komfortables Werkzeug zur Analyse von DNS-Einträgen. Alternativ ist auf fast jedem Rechner das weniger flexible Werkzeug nslookup verfügbar.
Beispiele für die Nutzung:
# IP eines Hostnamen erfragen dig hack-hro.de # authorative Nameserver einer Domain erfragen dig NS hack-hro.de # Mailserver für eine Domain abfragen dig MX hack-hro.de # unseren Master-DNS-Server abfragen (nicht-standard Port) dig www.hack-hro.de @5.45.100.156 # unsere beiden Replica-DNS-Server abfragen dig www.hack-hro.de @ns1.farbdev.org dig www.hack-hro.de @ns2.farbdev.org # rückwärtige Namensauflösung (IP zu Name) dig -x 8.8.8.8
DNS-Einträge ändern / hinzufügen / löschen
Du möchtest einen weiteren Hostname unterhalb von hack-hro.de eintragen oder bestehende Einträge ändern? Die folgenden Schritte genügen dafür:
Login auf dns.hack-hro.de
in der Datei hack-hro.de Zone Einträge ändern (Quelle für den Einstieg: Wikipedia)
ggf. pdns Dienst im DNS Container neustarten:
service pdns restart
im Fehlerfall das Log mit journalctl -u pdns prüfen
Die neuen Einträge sind unmittelbar auf dem Master-Server verfügbar. Die Replica-Server (und cachende Nameserver von ISPs und anderen) werden erst innerhalb der nächsten Stunden die neuen Einträge übernehmen.
Weiteren Replica-DNS-Server hinzufügen
Falls du administrativen Zugriff auf einen öffentlich erreichbaren Rechner mit statischer IP hast, dann kannst du gern einen weiteren DNS-Server zu unserer Domain-Auflösung hinzufügen.
Die folgenden Schritte sind erforderlich:
konfiguriere einen DNS-Server auf dem Rechner und füge die obige Replica-Zonen-Konfiguration hinzu (siehe oben: Replica-Einstellungen)
füge deine IP auf DNS in der Datei /etc/powerdns/pdns.d/pdns.local zur Einstellung allow-axfr-ips hinzu
anschließend: service pdns restart
das Log mit journalctl -u pdns auf Fehler prüfen
prüfe, ob dein DNS-Server auf Hostnamen in der hack-hro.de-Domain korrekt reagiert (bei abgeschalteter rekursiver Auflösung)
- ggf. musst du deinen Nameserver jetzt als weiteren NS-Record hinterlegen
- fertig!
DNS-Besonderheiten
CNAME-Einträge verbergen alle Einträge auf selber Ebene
Wenn ein CNAME-Eintrag existiert, dann ist es nicht möglich, für denselben Namen weitere Einträge (beispielsweise NS, MX oder SRV) anzulegen.
Somit sollte jede Second-Level-Domain (z.B. hack-hro.de durch einen A- anstelle eines CNAME-Eintrags aufgelöst werden, da hier üblicherweise NS- und MX-Einträge notwendig sind.
CNAME-Einträge nicht verketten
Die RC 2181 in Punkt 10.3 sagt aus, dass CNAMEs nicht verkettet werden mögen. Manche Nameserver lösen dies wohl trotzdem auf - zumindest bei Bind scheint es jedoch problematisch zu sein.
Redundante Server (Round-Robin)
Für einen Namen können mehrere A-Einträge definiert werden. Clients (Browser, Mailprogramme, ...) werden üblicherweise durch die zurückgelieferten Ergebnisse rotieren. Somit lässt sich eine gewisse Ausfallsicherheit herstellen, die dem Nutzenden nicht auffällt.