Seite wählen

DNS Cache

Basiswissen

DNS steht für Domain Name System. Es handelt sich um ein verteiltes System zur Zuordnung von Domainnamen (z. B. www.example.com) zu den entsprechenden IP-Adressen (z. B. 192.0.2.1), die von Computern verwendet werden, um andere Computer oder Dienste im Internet zu finden.

DNS-Cache

Ein lokaler DNS-Cache ist eine Funktion auf Computern und Netzwerkgeräten, die DNS-Anfragen temporär speichert, um die Leistung und Effizienz von DNS-Abfragen zu verbessern. 
Wenn ein Computer eine DNS-Anfrage stellt, sucht der lokale DNS-Cache zuerst in seinem Speicher nach der entsprechenden Antwort. Falls die Antwort bereits gespeichert ist, muss die Anfrage nicht an den entfernten DNS-Server weitergeleitet werden, was Zeit und Bandbreite spart. Falls die Antwort nicht im Cache gefunden wird, wird die DNS-Anfrage an einen öffentlichen DNS-Server weitergeleitet, um die entsprechende IP-Adresse abzurufen und diese dann im lokalen Cache zu speichern, um zukünftige Anfragen zu beschleunigen.
In eine typischen Netzwerk Setup gibt es jedoch min. folgende Kaskade einer DNS Abfrage:
  • Root DNS Server
    • Top Level Domains (TLD) (z.B. Denic)
      • Authorative Nameserver
        • DNS Server des Internet Providers (Caching DNS)
          • Lokaler Router (Caching DNS)
            • Lokaler Rechner (Caching DNS)
In diese Kaskade vom Lokalen Rechner bis hin nach oben werden die DNS Server abgefragt, sofern der nächste in der Kaskade eine Anfrage nicht beantworten kann.
Ist eine Domain noch gar nicht bekannt, wird zunächst beim Root Server über den Top Level Domain der zuständige Nameserver ermittelt. Für Endung .de ist z.B: die Denic verantwortlich. Diese Wiederum verweisen dann zum zuständigen autorativen Nameserver.
ROOT DNS
Ein Root-DNS-Server ist der erste Schritt in der Hierarchie des Domain Name Systems (DNS). Es handelt sich um eine Gruppe von Servern, die sich auf der obersten Ebene der DNS-Hierarchie befinden. Ihre Hauptaufgabe besteht darin, die Anfragen für die Auflösung von Domainnamen (wie z. B. www.example.com) zu koordinieren und an die entsprechenden Top-Level-Domain (TLD)-Server weiterzuleiten. Das DNS ist hierarchisch aufgebaut. Es gibt insgesamt 13 Root-DNS-Server weltweit, die mit den Buchstaben A bis M bezeichnet sind. Jeder dieser Server hat eine eindeutige IP-Adresse, und mehrere Kopien davon werden auf der ganzen Welt an verschiedenen Standorten betrieben, um Redundanz und Ausfallsicherheit zu gewährleisten. Wenn ein Computer eine DNS-Anfrage für eine bestimmte Domain stellt, beispielsweise „www.example.com„, beginnt der lokale DNS-Resolver (meistens von Ihrem Internetdienstanbieter bereitgestellt) mit der Suche im lokalen Cache. Falls die DNS-Antwort nicht im Cache vorhanden ist, wird die Anfrage an die nächstgelegenen Root-DNS-Server weitergeleitet. Die Root-DNS-Server geben jedoch keine spezifische IP-Adresse für die angeforderte Domain zurück. Stattdessen verweisen sie den Resolver auf die TLD-Server, die für die Verwaltung der jeweiligen Top-Level-Domain zuständig sind. Zum Beispiel würde ein Root-DNS-Server den Resolver an den TLD-Server für „.com“ oder „.org“ weiterleiten. Die TLD-Server geben dann wiederum Informationen über die Nameserver zurück, die für die Verwaltung der spezifischen Domain verantwortlich sind, in diesem Fall „example.com“. Der lokale Resolver fragt dann den entsprechenden Nameserver, um die genaue IP-Adresse für „www.example.com“ zu erhalten. Die Root-DNS-Server sind entscheidend für das reibungslose Funktionieren des DNS, da sie den Resolvern den Weg zu den richtigen TLD-Servern zeigen, die schließlich zu den spezifischen Domain-Namenservern führen. Ohne die Root-DNS-Server wäre es nicht möglich, das DNS effizient und zuverlässig zu betreiben und Websites über Domainnamen zu erreichen.
 

Top Level Domains
Top-Level-Domain (TLD)-Server: Die TLD-Server sind die nächste Ebene der DNS-Topologie. Sie sind für die Verwaltung der verschiedenen Top-Level-Domains verantwortlich. Zum Beispiel gibt es TLD-Server für „.com“, „.org“, „.net“, „.de“ und so weiter. Die Root-DNS-Server verweisen den Resolver an die entsprechenden TLD-Server, um Informationen über die zuständigen Nameserver für die angeforderte Domain zu erhalten.

Authorative Nameserver

Jede Domain hat ihre eigenen authoritativen Nameserver. Diese Nameserver sind für die Verwaltung der DNS-Einträge und die Bereitstellung von IP-Adressen für die Subdomains innerhalb der Domain verantwortlich. Wenn ein DNS-Resolver eine spezifische Domain auflösen muss, fragt er den zuständigen Authoritative Nameserver für diese Domain nach den IP-Adressen der Subdomains.

Caching Nameserver

Die meisten DNS-Resolver in den Computern und Netzwerkgeräten sind sogenannte Caching Nameserver oder Recursive Resolver. Sie speichern die Ergebnisse von DNS-Anfragen temporär in ihrem Cache, um die Geschwindigkeit und Effizienz der DNS-Auflösung zu verbessern. Wenn ein Caching Nameserver eine DNS-Anfrage erhält, überprüft er zuerst seinen Cache. Wenn die Antwort bereits gespeichert ist, gibt er sie zurück, ohne die Anfrage weiterzuleiten. Andernfalls durchläuft er die oben genannten Ebenen der DNS-Topologie, bis er die richtige IP-Adresse für die angeforderte Domain erhält, und speichert sie dann in seinem Cache für zukünftige Anfragen.

DNS-Cache löschen

In der Entwicklung von Web Anwendungen und dem IT-Betrieb kann es bei Änderungen notwendig werden einen DNS Cache zu löschen. Die obige Erleuterung wiederum war wichtig, um das Cahcing verhalten und damit u.U. einhergehende Probleme zu verstehen.

Sofern eine Domain innerhalb der üblichen TTL von 3600 Sekunden angefragt wurde, wird der DNS Eintrag vom vorgelagerten Cache geliefert. Das ist wichtig im Hinterkupft zu behalten! Denn das Löschen des lokalen DNS Cache führt nicht immer zum gewünschen Ergebniss:

DNS-Cache Systeme

Abhängig vom der Distribution / Betriebsysteme und Version können untersdhiedliche Tools und Mechanismen zum Cachen der DNS Daten zu Einsatz kommen.
Nachfolgende Beispiele müssen daher nicht für jeden Fall und Konstelation richtig sein. 
bind

Prüfen des Status:

service named status
Löschen des Cache:
rndc flush
Prüfen ob die Änderung angekommen ist:
systemd-resolve --statistics
rndc dumpdb -cache
cat /var/named/data/cache_dump.db
Die Liste an Einträgen sollte nach dem Erstellen des dumps leer sein.

systemd-resolve
Prüfen des Status:
systemd-resolve --statistics
DNSSEC supported by current servers: no Transactions
Current Transactions: 0
Total Transactions: 27370 Cache
Current Cache Size: 4
Cache Hits: 27190
Cache Misses: 221 DNSSEC Verdicts
Secure: 0
Insecure: 0
Bogus: 0
Indeterminate: 0
Löschen des Cache:
systemd-resolve --flush-caches
Neustart des Dienstes:
systemctl restart systemd-resolved.service
Prüfen ob die Änderung angekommen ist:
systemd-resolve --statistics
DNSSEC supported by current servers: no Transactions
Current Transactions: 0
Total Transactions: 28046 Cache
Current Cache Size: 1
Cache Hits: 27791
Cache Misses: 301 DNSSEC Verdicts
Secure: 0
Insecure: 0
Bogus: 0
Indeterminate: 0
resolvectl
Prüfen des Status:
resolvectl statistics
Löschen des Cache:
resolvectl flush-caches
Prüfen ob die Änderung angekommen ist:
systemd-resolve --statistics
nscd
Prüfen des Status:
nscd -g |grep "hosts cache" -A22
hosts cache: yes cache is enabled
no cache is persistent
yes cache is shared
211 suggested size
216064 total data pool size
104 used data pool size
600 seconds time to live for positive entries
0 seconds time to live for negative entries
0 cache hits on positive entries
0 cache hits on negative entries
2 cache misses on positive entries
0 cache misses on negative entries
0% cache hit rate
1 current number of cached values
1 maximum number of cached values
0 maximum chain length searched
0 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for change
Löschen des Cache:
nscd --invalidate=hosts cache
Prüfen ob die Änderung angekommen ist:
nscd -g |grep "hosts cache" -A22
hosts cache: yes cache is enabled
no cache is persistent
yes cache is shared
211 suggested size
216064 total data pool size
0 used data pool size
600 seconds time to live for positive entries
0 seconds time to live for negative entries
0 cache hits on positive entries
0 cache hits on negative entries
4 cache misses on positive entries
0 cache misses on negative entries
0% cache hit rate
0 current number of cached values
1 maximum number of cached values
0 maximum chain length searched
0 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes
dnsmasq
Prüfen des Status:
sudo kill -USR1 $(pgrep dnsmasq)
cat /var/log/syslog | grep dnsmasq
oder:
journalctl -xeu dnsmasq
Jul 20 16:16:39 localhost dnsmasq[4256]: gestartet, Version 2.86, Zwischenspeichergröße 150
Jul 20 16:16:39 localhost dnsmasq[4256]: DNS-Dienst auf Unternetze eingeschränkt
Jul 20 16:16:39 localhost dnsmasq[4256]: Optionen bei Übersetzung: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 Lua TFTP conntrack ipset auth cryptohash DNSSEC loop-detect inotify dumpfile
Jul 20 16:16:39 localhost dnsmasq[4256]: DBus-Unterstützung eingeschaltet: mit Systembus verbunden
Jul 20 16:16:39 localhost dnsmasq[4256]: asynchrone Protokollierung eingeschaltet, Warteschlange fasst 5 Nachrichten
Jul 20 16:16:39 localhost dnsmasq[4256]: lese /etc/resolv.conf
Jul 20 16:16:39 localhost dnsmasq[4256]: Benutze Namensserver 8.8.8.8#53
Jul 20 16:16:39 localhost dnsmasq[4256]: /etc/hosts gelesen – 19 Adressen
Jul 20 16:16:45 localhost dnsmasq[4256]: Zeit 1689862605
Jul 20 16:16:45 localhost dnsmasq[4256]: Cache Größe 150, 0/0 Cache-Einfügungen verwendeten nicht abgelaufene Cache-Einträge wieder.
Jul 20 16:16:45 localhost dnsmasq[4256]: weitergeleitete Anfragen 0, lokal beantwortete Anfragen 0
Jul 20 16:16:45 localhost dnsmasq[4256]: Anfragen nach autoritativen Zonen 0
Jul 20 16:16:45 localhost dnsmasq[4256]: Speicherpool in Benutzung 48, Max 48, zugewiesen 2400
Jul 20 16:16:45 localhost dnsmasq[4256]: Server 8.8.8.8#53: Anfragen gesendet 0, erneut versucht oder fehlgeschlagen 0
Jul 20 16:20:45 localhost dnsmasq[4256]: Zeit 1689862845
Jul 20 16:20:45 localhost dnsmasq[4256]: Cache Größe 150, 0/0 Cache-Einfügungen verwendeten nicht abgelaufene Cache-Einträge wieder.
Jul 20 16:20:45 localhost dnsmasq[4256]: weitergeleitete Anfragen 0, lokal beantwortete Anfragen 0
Jul 20 16:20:45 localhost dnsmasq[4256]: Anfragen nach autoritativen Zonen 0
Jul 20 16:20:45 localhost dnsmasq[4256]: Speicherpool in Benutzung 48, Max 48, zugewiesen 2400
Jul 20 16:20:45 localhost dnsmasq[4256]: Server 8.8.8.8#53: Anfragen gesendet 0, erneut versucht oder fehlgeschlagen 0
Löschen des Cache:
service dnsmasq restart
Prüfen ob die Änderung angekommen ist:
sudo kill -USR1 $(pgrep dnsmasq)
cat /var/log/syslog | grep dnsmasq
oder:
journalctl -xeu dnsmasq
Windows
Prüfen des Status: Windows Eingabeaufforderung
ipconfig /displaydns
<Liste mit gecachten DNS Einträgen> Löschen des Cache:
ipconfig /flushdns
Prüfen ob die Änderung angekommen ist:
ipconfig /displaydns
<Liefert keine DNS Einträgen> Windows-IP-Konfiguration
MacOS

Prüfen des Status:

sudo killall -INFO mDNSResponder
<Statistik sollte ich im systemlog finden / hat jedoch mit Ventura 13.4.1 nicht geklappt> Löschen des Cache:
sudo killall -HUP mDNSResponder
Prüfen ob die Änderung angekommen ist:
sudo killall -INFO mDNSResponder
<Statistik sollte ich im systemlog finden / hat jedoch mit Ventura 13.4.1 nicht geklappt>