Domain Name System
Anwendung | DNS | |||
Transport | UDP | TCP | ||
Netzwerk | IP | |||
Netzzugang | Ethernet | Token Ring |
FDDI | ... |
Das Domain Name System (DNS) ist einer der wichtigsten Dienste im Internet. Das DNS ist eine verteilte Datenbank, die den Namensraum im Internet verwaltet. Das geschieht im Wesentlichen durch die Umsetzung von Namen in Adressen. Das Ganze ist vergleichbar mit einem Telefonbuch, das die Namen der Teilnehmer in ihre Telefonnummer auflöst. Das DNS ist notwendig, weil Menschen sich Namen weitaus einfacher merken können als Zahlenkolonnen. So kann man sich den Domainnamen www.wikipedia.de sehr einfach merken, die dazugehörende IP-Adresse 207.142.131.236 dagegen nicht ganz so einfach. Darüber hinaus ermöglicht das DNS eine logische Lösung von der darunterliegenden Physik, z. B. Änderung der IP-Adresse, ohne den Domainnamen ändern zu müssen, und sogar rudimentäre Lastverteilung (Load Balancing).
Das DNS (Domain Name System) wurde 1983 von Paul Mockapetris entworfen und im RFC 882 beschrieben. Der RFC 882 wurde inzwischen von den RFCs 1034 und 1035 abgelöst.
Das DNS löste die hosts-Dateien ab, die bis dahin für die Namensauflösung zuständig waren. Es zeichnet sich aus durch
- dezentrale Verwaltung
- hierarchische Strukturierung des Namensraums in Baumform
- Eindeutigkeit der Namen
- Erweiterbarkeit
Komponenten des DNS
Das DNS besteht aus drei Hauptkomponenten
- Domänennamensraum
- Nameservern
- Resolver
Domänennamensraum
Der Domänennamensraum hat eine baumförmige Struktur. Die Blätter und Knoten des Baumes werden als Labels bezeichnet. Ein kompletter Domänenname eines Objektes besteht aus der Verkettung aller Labels. Label sind Zeichenketten (alphanumerisch, als einziges Sonderzeichen ist '-' erlaubt) die mindestens ein Zeichen und maximal 63 Zeichen lang sind. Die einzelnen Label werden durch Punkte voneinander getrennt. Ein Domänenname wird mit einem Punkt abgeschlossen (Der hinterste Punkt wird normalerweise weggelassen, gehört rein formal aber zu einem vollständigen Domänennamen dazu). Ein korrekter, vollständiger Domänenname (auch FQDN) lautet z. B. www.wikipedia.de. (der letzte Punkt gehört zum Domänennamen).
Ein Domänenname darf inklusive aller Punkte maximal 255 Zeichen lang sein.
Ein Domänenname wird immer von rechts nach links delegiert und aufgelöst, d.h. je weiter rechts ein Label steht, umso höher steht es im Baum. Der Punkt ganz rechts wird auch als root (Wurzel) im Namensraum bezeichnet.
Das erste Label (das, das ganz rechts steht) wird im allgemeinen auch als Top Level Domain (TLD) bezeichnet.
Die DNS-Objekte einer Domäne (zum Beispiel die Rechnernamen) werden als Satz von Resource Records in einer Zonendatei gehalten, die auf einem oder mehreren autoritativen Nameservern abliegt. Anstelle von Zonendatei wird meist der etwas allgemeinere Ausdruck Zone verwendet.
Nameserver
Nameserver sind Programme, die einen oder mehrere Teile des Namensraumes kennen und diese auf Anfrage weitergeben. Nameserver werden von der höheren Ebene im Baum delegiert und sind dann für den Teilnamensraum unterhalb der delegierten Ebene zuständig (und können u.U. weitere Teilnamensräume unterhalb dieser Ebene delegieren). Die Baumstruktur stellt die eindeutige Zuordnung eines Nameservers zu einem Teil des Namensraum sicher.
Normale DNS-Anfragen werden auf Port 53 UDP beantwortet. Transfers kompletter Zonen werden auf Port 53 TCP durchgeführt.
Man unterscheidet zwischen autoritativen und nicht-autoritativen Nameservern. Ein autoritativer Nameserver ist ein Nameserver, der gesicherte Informationen über eine Zone besitzt. Dem gegenüber hat ein nicht-autoritativer Nameserver Informationen über eine Domäne sozusagen aus zweiter oder dritter Hand. Er kann deshalb nicht sicher sein, dass seine Daten aktuell und nicht veraltet sind. Aus Redundanz- und Lastverteilungsgründen werden autoritative Nameserver fast immer als Server-Cluster realisiert, wobei die Zonendaten identisch auf einem Master (auch: Primary Server) und auf einem oder mehreren Slaves (auch: Secondary Server) liegen. Die Synchronisation zwischen Master und Slaves erfolgt per Zonentransfer.
Nameserver speichern die einmal von einem Resolver angefragten Informationen im lokalen RAM ab, damit diese bei einer erneuten Anfrage schneller vorliegen. Diese Technik wird als Caching bezeichnet. Caching ist möglich, da sich DNS-Daten normalerweise nur sehr selten ändern. Die Daten im Cache des Nameservers verfallen nach der TTL (time to live). Das kann u.U. aber auch bedeuten, dass der Nameserver in dieser Zeit falsche Informationen liefern kann, wenn sich die Daten zwischenzeitlich geändert haben. Nameserver können auch als caching only Nameserver agieren. Sie besitzen dann selbst keine gesicherten (autoritative) Informationen sondern lösen alle eintreffenden Anfragen rekursiv auf. Damit ein Nameserver Informationen über andere Teile des Namensraumes finden kann, werden ihm Informationen über die sog. Root-Server in Form einer statischen Datei hinterlegt. Diese Cachedateien enthalten die Namen und IP Adressen der Root-Server. Derzeit gibt es 13 Root-Server (Server A bis M).
Nameserversoftware
- BIND (Berkeley Internet Name Domain) ist der Ur-Nameserver und heute noch die meistgenutzte Nameserversoftware. BIND ist Open Source Software.
- djbdns (entwickelt von Dan Bernstein) gilt als sehr sicher und erfreut sich steigender Beliebtheit.
- PowerDNS ist eine kostenpflichtige Implementierung, die vor allem für das direkte Betreiben von Zonen aus SQL-Datenbanken bekannt ist. Dagegen ist MyDNS als Open-Source-Software frei benutzbar, ist aber auf MySQL- und PostgreSQL-Datenbanken beschränkt.
- NSD ist optimiert für Server die ausschließlich autoritative Antworten liefern sollen.
Resolver
Resolver sind Programme, die Informationen aus den Nameservern abrufen können. Sie bilden die Schnittstelle zum Nameserverdienst. Resolver sind entweder eigene Programme, oder sie sind in Applikationen (z.B. einen Browser) eingebunden. Ein Resolver arbeitet entweder iterativ oder rekursiv.
Bei einer rekursiven Anfrage schickt der Resolver eine Anfrage an einen ihm bekannten Nameserver und bekommt als Antwort entweder den gewünschten Resource Record (wenn der befragte Nameserver selber rekursiv arbeitet) oder „gibt es nicht“. Rekursiv arbeitende Resolver überlassen also die Arbeit anderen und funktionieren so wie manches andere im Internet: Ich weiß ein bisschen was und ich kenne jemanden der mehr weiß.
Bei einer iterativen Anfrage bekommt der Resolver entweder den gewünschten Resource Record oder einen weiteren Nameserver, den er als nächsten fragt. Der Resolver hangelt sich so von Nameserver zu Nameserver bis er bei einem autoritativen Nameserver landet. Die so gewonnene Antwort gibt der Resolver dann weiter.
Die Root-Server arbeiten ausschließlich iterativ. Sie wären sonst mit der Anzahl der Anfragen schlicht überlastet.
Bekannte Resolver sind die Programme nslookup und dig. Weitere Informationen zur iterativen/rekursiven Namensauflösung finden sich unter rekursive und iterative Namensauflösung.
Der Resolver übernimmt im Wesentlichen folgende drei Aufgaben:
Er erzeugt die Abfrage und übermittelt sie an den Nameserver. In der Regel ist dies der Nameserver des Internet-Providers, über den man ins Internet geht.
Im Falle einer erfolgreichen Namensauflösung interpretiert er die Antwort des Nameservers.
Anschließend übergibt der Resolver die Informationen an das Programm, das die Daten angefordert hat, beispielsweise an den Webbrowser.
Beispiel
Im Beispiel wird www.example.net „per Hand“ aufgelöst. Die Adresse von A.root-servers.net (198.41.0.4) wird dabei als bekannt vorausgesetzt, die Ausgabe ist auf das Wesentliche gekürzt.
$ dig +norecurse @198.41.0.4 www.example.net net. 172800 IN NS A.GTLD-SERVERS.net. A.GTLD-SERVERS.net. 172800 IN A 192.5.6.30 $ dig +norecurse @192.5.6.30 www.example.net example.net. 172800 IN NS a.iana-servers.net. a.iana-servers.net. 172800 IN A 192.0.34.43 $ dig +norecurse @192.0.34.43 www.example.net www.example.net. 172800 IN A 192.0.34.166
Bei den von den nicht-zuständigen Nameservern zusätzlich ausgegebenen A-Records handelt es sich um Glue Records
Erweiterung des DNS
Bisher waren die Label – wie beschrieben – auf alphanumerische Zeichen und das Zeichen '-' eingeschränkt. Dies hängt vor allem damit zusammen, dass das DNS (wie auch das Internet ursprünglich) in den USA entwickelt wurde. Allerdings gibt es in vielen Ländern Zeichen, die nicht in einem Label verwendet werden durften (im deutschen Sprachraum zum Beispiel die Umlaute ä, ö und ü) oder Zeichen aus komplett anderen Schriftsystemen (z.B. Chinesisch). Namen mit diesen Zeichen waren bisher nicht möglich.
Dies hat sich durch die Einführung von IDNA (RFC 3490) geändert. Seit März 2004 können deutsche, liechtensteinische, österreichische und schweizer Domains (.de, .li, .at und .ch) mit Umlauten registriert und verwendet werden. Um das neue System mit dem bisherigen kompatibel zu halten, werden die erweiterten Zeichensätze mit erlaubten Zeichen kodiert, also auf derzeit gültige Namen abgebildet. Die erweiterten Zeichensätze werden dabei zunächst gemäß dem Nameprep-Algorithmus (RFC 3491) normalisiert, und anschließend per Punycode (RFC 3492) auf den für DNS verwendbaren Zeichensatz abgebildet. Das Voransetzen des durch die IANA festgelegten IDNA-Prefix xn-- vor das Ergebnis der Kodierung ergibt das vollständige IDN-Label.
Eine weitere aktuelle Erweiterung des DNS stellt ENUM (RFC 2916) dar. Diese Anwendung ermöglicht die Addressierung von Internet-Diensten über Telefonnummern, also das „Anwählen“ von per Internet erreichbaren Geräten mit dem aus dem Telefonnetz bekannten Adressschema. Aus dem breiten Spektrum der Einsatzmöglichkeiten bietet sich insbesondere die Verwendung für Voice over IP Services an.
DynDNS
Es kann nur Rechnern mit fester, sich also nie ändernden IP-Adresse ein fester Rechnername zugeordnet werden. Da jedoch sehr viele Nutzer mit Heimrechnern eine variable IP-Adresse haben (mit jeder Einwahl in das Internet wird eine andere IP-Adresse aus einem Pool zugeteilt), gibt es inzwischen DynDNS-Betreiber, die dafür sorgen, dass man auch mit solch rasch ändernden Adressen möglichst immer über den selben Rechnernamen erreichbar ist.
Siehe auch: Liste der TCP/IP-basierten Netzwerkdienste
DNS-Security
Das DNS ist ein zentraler Bestandteil einer vernetzten IT Infrastruktur. Eine Störung kann erhebliche Kosten nach sich ziehen und eine Verfälschung von DNS-Daten Ausgangspunkt von Angriffen sein. Mehr als zehn Jahre nach der ursprünglichen Spezifikation wurde DNS um Security-Funktionen ergänzt. Folgende Verfahren sind verfügbar:
- Bei TSIG (Transaction Signatures) handelt es sich um ein einfaches, auf symmetrischen Schlüsseln beruhendes Verfahren, mit dem der Datenverkehr zwischen DNS-Servern gesichert werden kann.
- Bei DNSSEC (DNS Security) handelt es sich um ein komplexes Public-Key Verfahren, mit dem nahezu alle DNS-Sicherheitsanforderungen erfüllt werden können. Neben der Server-Server-Kommunikation wird auch die Client-Server-Kommunikation gesichert.
Domain-Registrierung
Um DNS-Namen im Internet bekanntmachen zu können, muss der Besitzer die Domain, die diese Namen enthält, registrieren. Durch eine Registrierung wird sichergestellt, dass bestimmte formale Regeln eingehalten werden und dass Domain-Namen weltweit eindeutig sind. Domain-Registrierungen werden von Organisationen (Registrars) vorgenommen, die dazu von der IANA bzw. ICANN autorisiert wurden. Registrierungen sind gebührenpflichtig.
Detaillierte Informationen finden sich unter Domain-Registrierung.