Auf Gerät:: [[Computer/ditto|ditto]] Port:: 53 LXC:: [[Container/dns|DNS]] Hostname:: dns.hack-hro.de <> = 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 [[https://en.wikipedia.org/wiki/DNS_zone_transfer|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 [[Container/dns|DNS]] Container aktualisiert. == Master-Einstellungen == Auf dem [[Container/dns|DNS]] Container ist [[https://www.powerdns.net/|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 [[https://dns.hack-hro.de|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: * [[Nutzer/Konrad|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 === [[https://www.isc.org/downloads/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 === [[https://www.powerdns.net/|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 [[https://dns.hack-hro.de|dns.hack-hro.de]] * in der Datei {{{hack-hro.de}}} Zone Einträge ändern (Quelle für den Einstieg: [[https://en.wikipedia.org/wiki/List_of_DNS_record_types|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 [[Container/dns|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 [[http://tools.ietf.org/html/rfc2181|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. ---- KategorieDienste