DNS-Namensauflösungs-Architektur & Layer 1–7 Bottom-Up Troubleshooting unter Linux
Erstellt: 08.11.2026 · Zuletzt aktualisiert: 08.11.2026 · Nejat Hakan
Management Summary: Wenn eine Anwendung mit
Connection timed outoderTemporary failure in name resolutionabbricht, neigen unerfahrene Administratoren dazu, planlos Firewallregeln anzupassen oder Konfigurationsdateien zu verändern. Professionelles Systems Engineering verlangt eine deterministische Methodik: Das exakte Verständnis, wie die GNU C Library (glibc) Domänennamen über/etc/nsswitch.confverarbeitet, wie Caching-Dienste wiesystemd-resolvedarbeiten, wie DNS-Hierarchien mitdig +traceauditiert werden und wie ein strenger Bottom-Up-Diagnosepfad von Schicht 1 bis Schicht 7 die wahre Fehlerursache in Minuten isoliert.
-
Das Linux-DNS-Subsystem
Der vollständige Auflösungspfad:
getaddrinfo()-Aufrufe, NSS-Reihenfolge in/etc/nsswitch.conf,/etc/hosts-Priorität und/etc/resolv.conf. -
systemd-resolvedbeherrschen
Den lokalen Stub-Resolver
127.0.0.53verstehen, schnittstellenspezifische Suchdomänen prüfen, Caches leeren und Abfragen mitresolvectlsteuern. -
DNS-Hierarchietracing mit
dig
Vollständige Wurzelzonen-Traversierung (
+trace), EDNS0-Puffergrößen, Reverse-DNS (PTR) und maschinenlesbare DNS-Ausgaben analysieren. -
Layer 1–7 Runbook
Deterministische Bottom-Up-Diagnosematrix: Vom physischen Link und ARP/NDP über Routing und Firewall-Drops bis hin zu fehlerhaften TLS-Handshakes.
1. Die Linux-DNS-Auflösungskette: Vom Funktionsaufruf zum Netzwerkpaket
Wenn ein Anwendungsprozess getaddrinfo("api.internal.corp") aufruft, ist der Linux-Kernel zunächst überhaupt nicht an der DNS-Auflösung beteiligt. Die Namensauflösung ist eine Funktion des User-Spaces, die von der GNU C Library (glibc) über den Name Service Switch (NSS) gesteuert wird:
%%{init: {'flowchart': {'wrappingWidth': 350}}}%%
flowchart TB
APP["User-Space App<br/>getaddrinfo()"] --> NSS["1. /etc/nsswitch.conf<br/>files, resolve, dns"]
NSS -->|"Zuerst: files"| HOSTS["2. /etc/hosts<br/>Statische Einträge"]
HOSTS -->|"Gefunden"| SUCCESS["IP an App liefern"]
HOSTS -->|"Nicht gefunden"| RESOLV["3. /etc/resolv.conf<br/>Stub oder Upstream-IP"]
RESOLV --> RES["4. Lokaler Resolver<br/>systemd-resolved"]
RES -->|"Cache Miss"| UPSTREAM["5. Upstream DNS<br/>Rekursiver Resolver"]
UPSTREAM --> SUCCESS
Konfiguration von NSS: /etc/nsswitch.conf
Die Direktive hosts: bestimmt die Reihenfolge der Informationsquellen:
# Datei: /etc/nsswitch.conf (Typisches Debian mit systemd-resolved)
hosts: files resolve [!UNAVAIL=return] dns myhostname
files: Überprüft zuerst statische Einträge in/etc/hosts. Wird hier ein Treffer erzielt, erfolgt keine DNS-Netzwerkabfrage.resolve: Leitet die Anfrage an die D-Bus-Schnittstelle vonsystemd-resolvedweiter.[!UNAVAIL=return]: Wennsystemd-resolvedaktiv ist und meldet, dass die Domäne nicht existiert, wird die Suche sofort beendet.dns: Klassischer Fallback auf direkte DNS-Abfragen über die Nameserver aus/etc/resolv.conf.myhostname: Löst den lokalen Hostnamen und Loopback-Adressen automatisch auf.
Auflösungsreihenfolge mit getent verifizieren
Verwende zur Diagnose niemals bloß ping oder nslookup. Nutze stattdessen getent, da dieser Befehl exakt dieselbe glibc-NSS-Logik verwendet wie echte Anwendungen:
2. DNS-Verwaltung mit systemd-resolved auf Debian
Moderne Debian-Installationen nutzen systemd-resolved für lokales Caching, DNSSEC-Validierung und interfacespezifisches Routing.
Der lokale Stub-Resolver 127.0.0.53
Verweist /etc/resolv.conf auf die IP 127.0.0.53, wickelt systemd-resolved alle Anfragen lokal über eine Loopback-Schnittstelle ab:
# Symlink-Konfiguration überprüfen
ls -la /etc/resolv.conf
# Ausgabe: /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf
Diagnose-Befehle mit resolvectl
# Globale und schnittstellenspezifische DNS-Server und DNSSEC-Status anzeigen
resolvectl status
# DNS-Abfrage über den resolved-Dienst ausführen (inkl. Latenz & DNSSEC-Prüfung)
resolvectl query nejat-hakan.de
# Lokalen DNS-Cache sofort leeren
sudo resolvectl flush-caches
# Cache-Statistiken abfragen (Hit-/Miss-Quote)
resolvectl statistics
3. Autoritative DNS-Diagnose mit dig
Das Werkzeug dig (Domain Information Groper) ist das wichtigste Werkzeug für die DNS-Fehleranalyse.
1. Präzise Abfragen & saubere Skriptausgaben
# Kompakte Abfrage für IPv4- (A) und IPv6-Adressen (AAAA)
dig +noall +answer nejat-hakan.de A nejat-hakan.de AAAA
# Bestimmte Record-Typen abfragen (MX, TXT, CNAME, SOA)
dig +short nejat-hakan.de MX
dig +short nejat-hakan.de TXT
# Reverse-DNS-Lookup (PTR) für eine IP-Adresse
dig +short -x 93.184.216.34
2. DNS-Hierarchietracing: dig +trace
Um DNS-Fehler oder Verzögerungen bei der weltweiten Zonen-Verteilung zu analysieren, umgehe lokale Zwischenspeicher und frage direkt von den Root-Servern an abwärts:
Ablauf des Tracing-Pfads:
1. Fragt einen der 13 Root-Server-Cluster ([a-m].root-servers.net) nach der TLD .de.
2. Erhält die autoritativen DENIC-Nameserver ([a-z].denic.de).
3. Fragt DENIC nach den zuständigen Nameservern für nejat-hakan.de.
4. Ruft die endgültigen A- / AAAA-Records direkt von den autoritativen Servern der Domäne ab.
4. Das Layer 1 bis Layer 7 Bottom-Up Troubleshooting Runbook
Wenn ein Dienst nicht erreichbar ist, führt die Fehlersuche von oben nach unten (z. B. das Anpassen von Anwendungsconfigs) oft in die Irre. Diagnostiziere stets strikt Bottom-Up von Schicht 1 bis Schicht 7.
%%{init: {'flowchart': {'wrappingWidth': 350}}}%%
flowchart TB
L1["Schicht 1: Link<br/>ethtool: Link erkannt?"] -->|OK| L2["Schicht 2: Nachbarn<br/>ip neigh: MAC aufgelöst?"]
L2 -->|OK| L3["Schicht 3: IP-Routing<br/>ip route & ping Gateway"]
L3 -->|OK| L4["Schicht 4: Transport<br/>nc -zv Port & ss -tulpn"]
L4 -->|OK| L5["Schicht 5/6: TLS<br/>openssl s_client Zertifikat"]
L5 -->|OK| L7["Schicht 7: App & DNS<br/>curl HTTP 200 & dig"]
5. Umfassende Diagnose- und Behebungsmatrix
| Schicht | Prüfschritt | Diagnosebefehl | Fehlersymptom | Ursache & Behebung |
|---|---|---|---|---|
| Layer 1 | Physischer Link | sudo ethtool eth0 |
Link detected: no oder Speed: Unknown! |
Kabel nicht eingesteckt, defektes Patchkabel, Switchport deaktiviert oder Transceiver defekt. |
| Layer 2 | Link-Status & Fehler | ip -s link show dev eth0 |
state DOWN oder viele RX/TX errors / dropped |
Interface administrativ deaktiviert (sudo ip link set eth0 up) oder Duplex-Fehlkonfiguration am Switch. |
| Layer 2 | Nachbar-ARP/NDP | ip neigh show |
192.168.1.1 dev eth0 FAILED oder INCOMPLETE |
Falsches VLAN am Switchport getaggt, falsche Subnetzmaske konfiguriert oder Gateway offline. |
| Layer 3 | Standard-Gateway | ip route show & ping -c 2 192.168.1.1 |
Network is unreachable oder Destination Host Unreachable |
Fehlende Default-Route (sudo ip route add default via 192.168.1.1) oder IP-Adresskonflikt im LAN. |
| Layer 3 | WAN-Routing | traceroute -n 1.1.1.1 oder mtr -n 1.1.1.1 |
Hops brechen beim Upstream-Provider ab (* * *) |
Störung beim Provider, BGP-Ausfall oder fehlendes NAT-Masquerading am WAN-Ausgang. |
| Layer 4 | Lokale Port-Bindung | sudo ss -tulpn \| grep :5432 |
Prozess taucht in der Ausgabe nicht auf | Dienst ist abgestürzt, deaktiviert oder lauscht fälschlicherweise nur auf 127.0.0.1 statt auf 0.0.0.0. |
| Layer 4 | Remote-Port / Firewall | nc -zv 10.10.20.11 5432 |
Fall A: Connection timed outFall B: Connection refused |
Timed out: Paket wird von nftables/ufw lautlos verworfen.Refused: Port wird erreicht, aber kein Dienst lauscht darauf. |
| Layer 6 | TLS-Handshake | openssl s_client -connect api.example.com:443 -servername api.example.com |
verify error:num=10:certificate has expired |
Abgelaufenes Zertifikat, fehlendes Intermediate-Zertifikat oder falscher SNI-Servername. |
| Layer 7 | DNS-Namensauflösung | dig +short api.example.com |
Temporary failure in name resolution |
Falscher nameserver in /etc/resolv.conf, Firewall blockiert UDP-Port 53 oder DNS-Ausfall. |
| Layer 7 | HTTP-Anwendung | curl -Iv https://api.example.com |
HTTP/1.1 502 Bad Gateway oder 504 Gateway Time-out |
Reverse-Proxy (Nginx/HAProxy) läuft, aber der Backend-Anwendungsdienst antwortet nicht. |
6. Nächste Schritte: Wechsel zu Cluster 2
Herzlichen Glückwunsch! Du hast Cluster 1: Grundlagen & Kernprotokolle vollständig abgeschlossen. Im nächsten Schritt geht es an die Absicherung von Netzwerkperimetern, verschlüsselte Bastion-Hosts und moderne Firewalls:
-
Cluster 2: Kryptografische OpenSSH-Architektur & Bastions
ED25519-Schlüsselmanagement, SSH-Härtung, Jump-Hosts (
ProxyJump) und verschlüsseltes Port-Forwarding.