DNS ist ein wichtiger Bestandteil moderner IT. Fast jedes mal wenn eine Website geladen wird oder eine App Daten von einem Server anfragt, kommt DNS zum Einsatz.
Was ist die Aufgabe von DNS
DNS sorgt dafür, dass der Domain Name in eine IP Adresse aufgelöst wird. Ein Domainname ist hierbei der Name einer Website oder eines Webservices, z.B. Google.com oder JRehkemper.de. Da Computernetzwerke binär arbeiten, das heißt in 1 und 0, ist es unpraktisch mit Buchstaben zu arbeiten. Deshalb müssen die Domain Namen einer IP Adresse zugeordnet werden.
Man könnte natürlich auch komplett auf Domain Namen verzichten und ausschließlich mit IP Adressen arbeiten, allerdings ist es für Benutzer einfacher sich einen Namen, wie Google.com oder JRehkemper.de zu merken, anstelle einer Kombination aus vier Zahlen.
Ablauf einer DNS Abfrage (Forward Lookup)
Eine DNS Abfrage ist komplexer als viele sich vorstellen. Der Grund dafür ist, dass es mittlerweile so viele Domains und IP Adressen gibt, dass diese nicht mehr alle von einem einzelnen Server verwaltet werden können. Daher gibt es ein Mehrschichtiges System zu DNS Abfrage.
Wir schauen uns hier zunächst den Forward Lookup an, also die Anfrage mit einem Domain Namen, der in eine IP Adresse übersetzt werden soll.
Lokaler Lookup
Als erstes schaut der Client, ob er die Domain ohne fremde Hilfe auflösen kann. Dazu schaut er z.B. in dem DNS Cache, in dem die letzten DNS Anfragen gespeichert sind. So kann der Client die Website neu laden ohne erneut den DNS Server zu kontaktieren. Dieser Cache löscht sich aber nach relativ kurzer Zeit, da nicht garantiert ist, dass alle Domains noch die gleichen IP Adressen haben, wie bei der letzten DNS Anfrage.
Möchte man den DNS Cache auf seinem Windows PC anschauen, nutzt man folgenden Befehl.
ipconfig /displaydns
Möchte man diesen Löschen um eine neue DNS Anfrage zu erzwingen nutzt man
ipconfig /flushdns
Alternativ zu dem DNS Cache gibt es noch die Hosts-Datei
. Diese ist vergleichbar mit einem lokalen, permanenten DNS Verzeichnis. Hier kann man z.B. IP Adressen im lokalen Netz mit einem DNS Namen versehen. Das beste Beispiel dafür ist der Localhost
, der in fast jeder Hosts-Datei auf die 127.0.0.1
, also den eigenen Computer, verweist.
Die Hosts-Datei ist allerdings nur für den eigenen Client einsehbar und nutzbar.
Anfrage an einen DNS Server
Kann der Client die Domain nicht mit den lokalen Mitteln auflösen, braucht er externe Hilfe. Den DNS-Server oder DNS-Resolver. Dieser ist bei der Netzwerkkonfiguration hinterlegt. Entweder von Hand oder zusammen mit der DHCP Adresse.
Der Client schickt jetzt eine rekursive DNS Anfrage an den DNS- Resolver . Rekursiv bedeutet, dass der DNS- Resolver eine Antwort schicken muss. Sollte er die Antwort nicht wissen, muss er sich darum kümmern die Information zu beschaffen. Dazu geht er in mehreren Schritten vor. Die Besonderheit hierbei ist, dass die Anfragen des DNS- Resolver iterativ sind, dass heißt er bekommt nie die direkte Antwort, sondern immer nur die Information, wen er als nächstes Fragen kann um die Information zu bekommen.
Als erstes fragt er bei den Root-DNS-Servern an. Diese sind ein zentraler Bestandteil des Internets und halten nur die IP Adressen der Top-Level-Domain-DNS-Server bereit. Die Top-Level-Domain oder auf TLD, ist die Endung der Domain (.de, .com, .net, .org). Fragt unser DNS- Resolver also bei den Root-DNS-Servern nach JRehkemper.de, so bekommt er die IP Adresse des TLD-DNS-Servers für alle .de Domains, jedoch nicht die IP für JRehkemper.de.
Mit dieser IP Adresse kann er nun eine weitere Anfrage an den TLD-DNS-Server stellen. Dieser hat aber immer noch nicht die IP-Adresse der gefragten Domain, sondern nur die IP Adresse des entsprechenden autoritativem DNS-Servers, also der DNS Server der für die Angefragte Domain zuständig ist. Dieser DNS Server kann von dem Website Betreiber selbst betrieben werden, zu dem Internetprovider gehören, oder von der Organisation betrieben werden, die die Domain verkauft/vermietet.
Nun weiß unser DNS- Resolver also endlich, wo er die IP zu unserer Domain findet. Er stellt also eine Anfrage an den entsprechenden autoritativen DNS-Server und bekommt die IP-Adresse der Domain zurück. Diese gibt er nun an den Client weiter und hat damit die rekursive Anfrage beantwortet.
Reverse Lookup
Alternativ zu dem oben beschriebenen Forward Lookup gibt es auch den Reverse Lookup. Wie der Name schon vermuten lässt wird hierbei nicht der Domain Name in eine IP Adresse umgewandelt, sondern eine IP Adresse in einen Domain Namen. Dies ist zwar seltener, da in den meisten Fällen mit Domain Namen gearbeitet wird, kann aber sehr praktisch sein, wenn man z.B. in einer Log-Datei IP Adressen hat, die man einer Domain zuordnen möchte.
DNS Anfragen über die Kommandozeile
Wenn man nun eine Domain über den Webbrowser aufruft, weiß man als Benutzer ja immer noch nicht welche IP Adresse man nun aufgerufen hat.
Möchte man das erfahren, kann man das Kommandozeilen-Tool nslookup
nutzen. Dieses gibt es unter Windows und Linux. Die Syntax ist im Grunde sehr simple.
Möchte man einfach nur eine IP Adresse von einer Domain erfahren.
nslookup jrehkemper.de
Hier wird nun der DNS-Resolver angefragt. Der Ablauf ist wie oben beschrieben und daher identisch mit dem Aufruf über den Webbrowser.
Möchte man einen Reverse Lookup durchführen muss man einfach eine IP Adresse anstelle der Domain angeben.
nslookup 8.8.8.8
Man kann aber auch einen anderen DNS Server spezifizieren, als den Standard DNS-Resolver.
nslookup jrehkemper.de 8.8.8.8
In diesem Fall frage ich direkt bei dem Google-DNS Server an. Das kann hilfreich sein, wenn man eine Adresse nicht auflösen kann und prüfen möchte, ob es ein Problem mit dem eigenen DNS-Resolver ist.