DNS Cache
Basiswissen
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)
- Lokaler Rechner (Caching DNS)
- Lokaler Router (Caching DNS)
- DNS Server des Internet Providers (Caching DNS)
- Authorative Nameserver
- Top Level Domains (TLD) (z.B. Denic)
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
Top Level Domains
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
Nachfolgende Beispiele müssen daher nicht für jeden Fall und Konstelation richtig sein.
bind
Prüfen des Status:
service named statusLöschen des Cache:
rndc flush
Prüfen ob die Änderung angekommen ist:
systemd-resolve --statistics
rndc dumpdb -cache
cat /var/named/data/cache_dump.dbDie Liste an Einträgen sollte nach dem Erstellen des dumps leer sein.
systemd-resolve
systemd-resolve --statistics
DNSSEC supported by current servers: no TransactionsLöschen des Cache:
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
systemd-resolve --flush-cachesNeustart des Dienstes:
systemctl restart systemd-resolved.servicePrü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
resolvectl statisticsLöschen des Cache:
resolvectl flush-cachesPrüfen ob die Änderung angekommen ist:
systemd-resolve --statistics
nscd
nscd -g |grep "hosts cache" -A22
hosts cache: yes cache is enabledLöschen des Cache:
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
nscd --invalidate=hosts cachePrü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
sudo kill -USR1 $(pgrep dnsmasq)
cat /var/log/syslog | grep dnsmasqoder:
journalctl -xeu dnsmasq
Jul 20 16:16:39 localhost dnsmasq[4256]: gestartet, Version 2.86, Zwischenspeichergröße 150Löschen des Cache:
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
service dnsmasq restartPrüfen ob die Änderung angekommen ist:
sudo kill -USR1 $(pgrep dnsmasq)
cat /var/log/syslog | grep dnsmasqoder:
journalctl -xeu dnsmasq
Windows
ipconfig /displaydns<Liste mit gecachten DNS Einträgen> Löschen des Cache:
ipconfig /flushdnsPrü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 mDNSResponderPrü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>