DNS-Resolver

DNS-Resolver sind eine essenzielle Komponente des Domain Name System (DNS). Sie fungieren als fragendes Gegenstück zu den antwortenden DNS-Nameservern. Aus Nutzersicht dient ein DNS-Resolver als Schnittstelle zwischen Nutzer bzw. Applikation und Nameservern.

Was ist ein DNS-Resolver?

Ein DNS-Resolver ist ein Dienst, welcher auf Anfrage für einen Domänennamen eine IP-Adresse liefert. Man spricht davon, dass die Domäne in eine IP-Adresse aufgelöst wird; vom „Auflösen“ stammt der Name „Resolver“, welcher im Internet-Spezifikationsdokument RFC 1034 definiert ist:

Zitat

„Resolvers are programs that extract information from name servers in response to client requests. Resolvers must be able to access at least one name server and use that name server’s information to answer a query directly, or pursue the query using referrals to other name servers.“ — Quelle: "https://www.rfc-editor.org/rfc/"

Übersetzung: „Resolver sind Programme, welche als Reaktion auf Client-Anfragen Informationen von Nameservern extrahieren. Resolver müssen zumindest auf einen Nameserver Zugriff haben und dessen Informationen nutzen, um die Anfrage direkt zu beantworten, oder die Anfrage an andere Nameserver weiterzureichen.“ (übersetzt von IONOS)

DNS-Resolver bilden das Gegenstück zu den Nameservern, welche die eigentlichen DNS-Informationen enthalten. Da Nameserver auch als DNS-Server bezeichnet werden, wird gelegentlich der Begriff „DNS-Client“ für DNS-Resolver verwendet. Allerdings handelt es sich bei vielen DNS-Resolvern um Server; es existiert also eine Mehrfachbelegung des Begriffs DNS-Server.

DNS-Resolver kommen in vielen verschiedenen Ausprägungen vor. Es handelt sich bei einem DNS-Resolver nicht zwingend um eine einzelne Komponente, und auch nicht um eine spezifische Technologie. Aus Anwenderperspektive ist ein DNS-Resolver jegliches System, welches sich darum kümmert, zu einem Domänennamen eine IP-Adresse zu ermitteln. Dabei spielt es keine Rolle, wie genau der DNS-Resolver die Information erhält.

Auf der untersten Ebene existieren die sogenannten „Stub-Resolver“. Dabei handelt es sich für gewöhnlich um eine Software-Bibliothek oder einen Dienst, der auf dem lokalen System läuft. Stub-Resolver kommunizieren in der Regel mit auf entfernten Systemen befindlichen DNS-Resolvern, welche die eigentliche Arbeit der Namensauflösung verrichten.

Wozu benötigt man einen DNS-Resolver?

Das Domain Name System (DNS) ist ein hierarchisches, über die ganze Welt verteiltes System zur Verwaltung mit Internet-Domänen verbundener Daten. Eine Domäne ist ein menschenfreundlicher Name, der sich leicht merken und händisch verwenden lässt. Eine der Hauptaufgaben des DNS besteht in der Namensauflösung, also der Zuordnung von Domänenname zu IP-Adressen. DNS-Resolver sind damit einer der Grundpfeiler der technischen Struktur des Internets. Hier ein Beispiel für die Namensauflösung:

Abgefragter Domänenname Zurückgelieferte IP-Adresse
example.com 93.184.216.34

Auch wenn es den meisten Anwendern und Anwenderinnen nicht bewusst sein dürfte, beginnen viele der täglich aufgeführten Arbeitsschritte mit der Auflösung eines Domänennamens in eine IP-Adresse. Der Zugriff auf eine Website, das Abrufen von E-Mail, oder der das Einloggen in ein Benutzerkonto per App beginnen allesamt mit der Namensauflösung. Erst danach kommt es zum eigentlichen Datentransfer.

Arbeitsschritt Protokoll Server Hostname-Beispiel
Auf Website zugreifen HTTP Webserver www.ionos.com
Mail abrufen IMAP Mailserver imap.gmail.com
App-Login HTTPS Api-Server api.twitter.com

Den genannten Arbeitsschritten ist gemein, dass Server involviert sind. Also entfernte Systeme, mit denen unser lokales System kommuniziert. Zur Kommunikation benötigt man die Adresse des Gegenübers. In diesem Fall die IP-Adresse der Server. Jedoch kennt man in der Regel lediglich deren Domänennamen. Glücklicherweise gibt es DNS-Resolver, welche die Auflösung der Namen für uns übernehmen.

Was passiert, wenn der DNS-Resolver fehlt?

Theoretisch ist es möglich, auch ohne DNS-Resolver auszukommen. Es lassen sich durchaus IP-Adressen direkt nutzen. Dies funktioniert heutzutage aber nur noch theoretisch. In der Praxis erfährt man erhebliche Einbußen, wenn die Namensauflösung fehlt.

Zunächst ist das sichere HTTPS-Protokoll an Domänennamen gebunden. Versucht man, mit blanker IP eine Website abzufragen, ist keine verschlüsselte Kommunikation möglich. Ferner ermöglicht erst die Zuordnung des Domänennamens, mehrere Websites auf einem Server zu hosten und gezielt anzusprechen.

Auch moderne Ansätze zur geografischen Verteilung von Server-Ressourcen setzen zwingend Zugriff auf einen DNS-Resolver voraus. Hierbei steht ein einzelner Domänennamen mit mehreren IP-Adressen in Verbindung. Gut nachvollziehen lässt sich dies am Beispiel der Google-Homepage. Wäre diese nur unter einer einzigen IP-Adresse erreichbar, würde der weltweite Traffic dort auflaufen und das System bald überlasten.

Wie funktioniert ein DNS-Resolver?

Das Domain Name System (DNS) besteht aus weltweit verteilten, miteinander interagierenden Komponenten. Es gibt vier hauptsächliche Klassen von Komponenten; drei davon sind Nameserver, welche DNS-Records enthalten. Die verbleibende Klasse umfasst die DNS-Resolver, welche das Gegenstück zu den Nameservern bilden.

DNS-Komponente Englische Entsprechung Erklärung
Stamm-Nameserver Root name server Enthält Adressen der TLD-Nameserver.
TLD-Nameserver TLD name server Enthält Adressen der autoritativen Nameserver für eine TLD.
Autoritative Nameserver Authoritative name server Hält Informationen für eine DNS-Zone vor.
Rekursive Resolver Recursive resolver Ermitteln IP-Adressen zu Hostnamen; stellen dafür Anfragen an Nameserver.
Tipp

Sie möchten noch tiefer in das Thema DNS einstiegen? Im Artikel "Was ist ein Root-Server?" erfahren Sie mehr zu den Grundlagen des Domain Name Systems.

Wie Sie bereits wissen, nimmt ein DNS-Resolver einen Domänennamen als Anfrage entgegen und hat die Aufgabe, eine dazugehörige IP-Adresse zu ermitteln. Wie genau funktioniert nun der Prozess? Tatsächlich gibt es mehrere Vorgehensweisen.

Wurde die Anfrage vorher bereits gestellt, z.B. beim wiederholten Zugriff auf google.com, wird die Antwort aus dem lokalen Cache geladen. Ist dies nicht der Fall, stellt der Resolver Anfragen bei Nameservern und setzt aus den ermittelten Informationen eine Antwort zusammen. Der zur Namensauflösung zum Einsatz kommende Algorithmus wurde in RFC 1034 definiert:

  • Nachschauen, ob die gewünschte Antwort im lokalen Cache enthalten ist. Wenn ja, die Antwort an den Klienten ausliefern.
  • Die besten Nameserver zum Anfragen ermitteln.
  • Den Nameservern Anfragen schicken, bis einer eine Antwort liefert.
  • Die Antwort auswerten; im Anschluss:
    • Falls die Antwort die Anfrage löst, oder einen Name-Error enthält, die Antwort jeweils in den Cache aufnehmen und an den Klienten ausliefern.
    • Falls die Antwort eine Referenz zu anderen Nameservern enthält, die Antwort in den Cache aufnehmen und bei Schritt (2) weitermachen.
      • Wenn es sich bei der Antwort um einen CNAME-Record handelt, den CNAME in den Cache aufnehmen und mit dem kanonischen Namen bei Schritt (1) weitermachen.
    • Wenn die Antwort einen Server-Error enthält, oder fehlerhaft erscheint, den Server von der Server-Liste entfernen und bei Schritt (3) weitermachen.

Was tun bei Problemen mit dem DNS-Resolver?

Wie wir gesehen haben, sind DNS-Resolver und die damit verbundene Namensauflösung wichtig für die tägliche Nutzung von Internet-Ressourcen. Dabei ist das DNS als Fehlerquelle berüchtigt.

Die Fehleranfälligkeit liegt in der Natur des Systems. Das DNS ist ein global verteiltes, hierarchisch organisiertes System innerhalb dessen Änderungen nach und nach propagieren. Das kann bis zu 48 Stunden dauern, so dass es leicht zu Diskrepanzen kommt. Ferner kommen auf allen Ebenen Caches zum Einsatz, welche zwar kritisch für die Performanz sind, jedoch wiederum als Fehlerquelle in Erscheinung treten.

Tipp

Fehler in den lokal gespeicherten DNS-Informationen können eine Bandbreite an Problemen hervorrufen. In vielen Situationen hilft es, den DNS-Cache zu löschen.

Anders als der eigentliche Datenaustausch im Internet, welcher hauptsächlich über das TCP/IP Protokoll läuft, kommt für die DNS-Kommunikation UDP zum Einsatz. Das User Datagram Protocol (UDP) ist simpler und weniger ressourcenintensiv. Genau diese Eigenschaften machen öffentliche DNS-Resolver leider auch zu attraktiven Zielen für Cyberkriminelle.

Mit der UDP-Flood getauften Angriffsvariante werden öffentliche DNS-Resolver als Verstärker für DDoS-Attacken missbraucht. Ferner gibt Cache Poisoning-Angriffe, die darauf abzielen, DNS-Resolvern gefälschte DNS-Informationen unterzuschummeln. Auf Server-Ebene wird Source Port Randomization als Schutzmaßnahme eingesetzt.

Wie überprüft man, ob die Namensauflösung funktioniert?

Treten am lokalen System seltsame Fehler auf, die auf DNS als Ursache deuten könnten, ist es ratsam, zunächst das Funktionieren der Namensauflösung zu überprüfen. Das geht einfach von der Hand und liefert schnell eine Aussage über mögliche Probleme.

Auf so gut wie allen Systemen ist das nslookup-Tool als Kommandozeilenprogramm vorhanden. Im einfachsten Fall führen wir das Tool aus und übergeben als Argument den gewünschten Hostnamen. Funktioniert die Namensauflösung, erhalten wir als Antwort eine korrespondierende IP-Adresse. Ferner gibt das Tool den konfigurierten DNS-Resolver aus:

nslookup example.com
bash

Praktischerweise lässt sich nslookup auch für Reverse DNS-Lookup verwenden. In diesem Fall übergeben wir als Argument eine IP-Adresse und bekommen einen oder mehrere Namen geliefert:

nslookup 9.9.9.9
bash

Alternativ zu nslookup lässt sich ein Ping gegen den Domänennamen ausführen. Der Ping-Befehl ist auf den meisten Systemen vorinstalliert und löst beim Aufruf die Namensauflösung aus. Wir übergeben den Hostname als Argument:

ping example.com
bash

Liefern nslookup oder Ping keine IP-Adresse, muss man davon ausgehen, dass die Namensauflösung nicht funktioniert. In diesem Falle lohnt der Versuch, den DNS-Resolver zu ändern, bzw. übergangsweise einen Eintrag in der Hosts-Datei anzulegen. Dazu unten mehr.

Wird eine IP-Adresse angezeigt, funktioniert die Namensauflösung zumindest prinzipiell. Es kann sich dennoch um eine falsche Information handeln. Um das gelieferte Ergebnis zu bewerten, lohnt ein Abgleich mit global hinterlegten DNS-Einträgen. Wir nutzen den DNS Propagation Checker von whatsmydns.net, um uns die A-Records für den Hostnamen anzuzeigen.

Wie ändert man den DNS-Resolver?

Wie eingangs dargelegt, ist der Begriff DNS-Resolver mehrfach belegt. Wenn wir davon sprechen, den DNS-Resolver zu ändern, meinen wir damit die Adresse des im System konfigurierten Servers, welcher die Namensauflösung für uns ausführt. Den meisten Nutzern dürfte nicht bewusst sein, dass dafür ein externer Server zum Einsatz kommt.

Im Grundzustand kommt auf den meisten Systemen, gleich ob PC, Laptop, oder Smartphone der DNS-Resolver des jeweiligen Internetanbieters zum Einsatz. Bei Heimnetzwerken ist die IP-Adresse des DNS-Resolvers für gewöhnlich im Router hinterlegt. Dabei können sich aus der Nutzung des voreingestellten DNS-Resolvers erhebliche Nachteile ergeben.

Neben dem als DNS-Leak bekannten Abgreifen von persönlich zuordbaren DNS-Informationen existiert mit DNS-Spoofing ein weiteres Problem. Dabei liefert der Internetanbieter manipulierte DNS-Daten an die Nutzer aus. So werden beispielsweise Konkurrenten blockiert, oder Internetverkehr auf Seiten mit Werbung umgeleitet. Es ist daher generell eine gute Idee, den DNS-Resolver selbst einzustellen.

Zum Ändern des DNS-Resolvers geht man je nach Betriebssystem unterschiedlich vor. Generell konfiguriert man die Netzwerkverbindung und trägt die Internetadresse eines bekannten DNS-Resolvers ein. Analog zum Secondary DNS wird neben dem primären DNS-Resolver ein sekundärer Server eingetragen. Dies sorgt für Redundanz und schützt vor Fehlern, wenn der DNS-Server nicht antwortet.

Um den DNS-Resolver zu ändern, muss man die exakte IP-Adressen eines oder mehrerer Server kennen, auf denen ein DNS-Resolver läuft. Da ohne DNS-Resolver die Namensauflösung nicht gegeben ist, lassen sich logischerweise keine menschenfreundlichen Namen verwenden.

Freie DNS-Resolver bieten eine Reihe von Vorteilen. Neben höherer Geschwindigkeit und Schutz der Privatsphäre bieten sie zum Teil Filterfunktionen. Bekannt Beispiele sind Cloudflare mit der gleichlautenden IP-Adresse 1.1.1.1 und Quad9 mit 9.9.9.9.

Wie lässt sich der DNS-Resolver umgehen?

Wie wir gesehen haben, sind DNS-Resolver essenziell für die Arbeit mit dem Internet. Jedoch gibt es manche Situationen, in denen es Sinn macht, die Namensauflösung per DNS-Resolver zu umgehen. Der technische Trick liegt darin, Einträge in der Hosts-Datei vorzunehmen.

Die Hosts-Datei ist ein Relikt aus den Urzeiten des Internets. Damals gab es noch kein DNS, dafür war die Anzahl der angeschlossenen Rechner überschaubar. Um Hostnamen in IP-Adressen aufzulösen, wurden die entsprechenden Kombinationen direkt in die Hosts-Datei eingetragen. Dabei steht eine einzelne IP-Adresse links, rechts davon ein oder mehrere Hostnamen. Auch der Hostname localhost für das „Loopback Interface“ ist häufig so konfiguriert:

# IPv4
127.0.0.1       localhost
# IPv6
::1             localhost
bash

Zur Namensauflösung wertet der lokale Stub DNS-Resolver die Einträge der Hosts-Datei aus. Wird ein Treffer für den abgefragten Hostnamen gefunden, liefert der Stub-Resolver die dazugehörige IP-Adresse zurück. In diesem Fall verbleibt die Anfrage komplett auf der lokalen Maschine. Andernfalls erfolgt der normale Prozess der Namensauflösung über den konfigurierten externen DNS-Resolver.

Die Hosts-Datei erlaubt ein Arbeiten ohne DNS-Resolver. Jedoch erfordert dies, einen Eintrag für jeden aufzulösenden Hostnamen zu erstellen. Zum täglichen Arbeiten ist das wenig praktikabel, für spezielle Anwendungen hingegen gut geeignet. Da die Hosts-Datei zuerst ausgewertet wird, lässt sie sich als Workaround für verschiedene Problemstellungen nutzen.

Ein Nutzen der Host-Datei besteht darin, einen Hostnamen mit einer festen IP-Adresse zu belegen. Dieser Trick wird gerne eingesetzt, um Apps, die „nach Hause telefonieren“ stummzuschalten. Denn manche Anwendungen melden sich periodisch bei einem per Hostname konfigurierten Server und übermitteln ungebremst Daten. Möchte man dies unterbinden, genügt ein Eintrag in der Hosts-Datei.

Veranschaulichen wir uns das Prinzip an einem Beispiel. Wir möchten verhindern, dass ein lokales Programm auf spy.example.com zugreift. Dazu tragen wir den Domänennamen in die Hosts-Datei ein und verweisen auf die Loopback-IP 127.0.0.1. So gehen die Anfragen an das lokale System und erreichen nie den Server. Aus Sicht der App bleiben die Anfragen hängen, als wäre beispielsweise die Internetverbindung gekappt:

127.0.0.1   spy.example.com
bash

Das Prinzip lässt sich auch umdrehen. In vielen Ländern kommen heutzutage Websperren auf DNS-Ebene zum Einsatz. Internet-Provider werden per Gerichtsbeschluss gezwungen, für bestimmte Domänennamen keine oder verfälschte IP-Adressen auszuliefern. Genau genommen handelt es sich um staatlich sanktioniertes DNS-Spoofing. Aus Nutzersicht lassen sich die gewünschten Domänen nicht aufrufen.

Der clevere Einsatz der Hosts-Datei auf dem eigenen System erlaubt, DNS-basierte Websperren zu umgehen. Man benötigt lediglich die tatsächliche IP-Adresse der gesperrten Website. Diese trägt man zusammen mit dem Domänennamen in die Hosts-Datei ein. Nehmen wir beispielshalber an, die Domäne blocked.example.com sei per DNS-Websperre vom Provider blockiert. Tragen wir die IP-Adresse der Site in die Hosts-Datei ein, ist der Zugriff wieder möglich:

93.184.216.34 blocked.example.com
bash

Zu guter Letzt ein Ansatz aus der Webentwicklung, die Namensauflösung auf dem lokalen Gerät per Hosts-Datei zu konfigurieren. Nehmen wir an, eine existierende Website unter der Domäne www.example.com soll migriert werden. Um die Migration vorzubereiten, übertragen wir die Site zunächst auf den neuen Server. Nun gilt, die Installation zu testen, doch es gibt ein Problem: unter dem Domänennamen wird weiterhin die existierende Site auf dem alten Server 93.184.216.34 aufgerufen; die auf den neuen Server migrierte Site lässt sich so nicht testen.

Also tragen wir einfach die IP-Adresse des neuen Servers zusammen mit dem Domänennamen in die Hosts-Datei ein. So gehen unsere lokalen Anfragen an den neuen Server und wir können nach problemlos testen. Gleichzeitig bekommen alle weiteren Besucher weiterhin die IP-Adresse des alten Servers ausgeliefert. So bleibt die Site für Besucher vollumfänglich erreichbar.

198.51.100.0 localhost www.example.com
bash

Ein ähnliches Vorgehen kommt zum Einsatz, um eine Staging Site lokal zu entwickeln. Stellen wir uns vor, die Site unter www.example.com soll neu aufgebaut werden. Wir richten eine Staging Site in einer lokalen Entwicklungsumgebung ein, welche unter der Loopback-Adresse 127.0.0.1 erreichbar ist. In der Hosts-Datei fügen wir einen Eintrag für den Hostnamen dev.example.com hinzu:

127.0.0.1 localhost dev.example.com
bash