Infrastruktur

Sporadische SERVFAIL: der verwaiste DS-Eintrag, der 15 % der Auflösungen scheitern ließ

Eine CI, die sporadisch fehlschlägt, zwei verschiedene Fehlermeldungen, ein offensichtlicher Verdächtiger, der nichts damit zu tun hatte, und eine unsichtbare Ursache: ein DNSSEC-Eintrag, der beim Parent veröffentlicht blieb, obwohl die Zone nicht mehr signiert war. Obduktion einer tückischen DNS-Störung, mit der Methode, die am Ende Klarheit brachte.

DNSSEC-Vertrauenskette, in der ein gebrochenes Glied das Siegel fallen lässt, der Resolver erhält eine abgelehnte Antwort
Inhalt (4 Abschnitte)
  1. Der falsche Täter: Indizien immer datieren
  2. Die Methode, die Klarheit brachte
  3. Der Mechanismus: das gebrochene Versprechen
  4. Die Behebung, und die Prüfung, auf die es ankommt

Eindeutige Störungen sind ein Luxus: Alles ist kaputt, alle sehen es, man sucht, man findet. Diese hier war von anderer Art. Unsere Continuous-Integration-Kette scheiterte sporadisch (etwa bei jedem dritten Build) an der Auflösung unserer eigenen Domains. Gleicher Befehl, gleiche Server: mal klappt es, mal no such host. Und um die Spur zu verwischen, tauchte manchmal eine zweite Meldung auf: connect: network is unreachable für eine IPv6-Adresse. Obduktion einer der lehrreichsten Störungen des Jahres, denn bei ihrer Diagnose ist alles wiederverwendbar.

Der falsche Täter: Indizien immer datieren #

Die IPv6-Meldung deutete auf einen offensichtlichen Verdächtigen hin: einen AAAA-Eintrag, der auf eine Adresse zeigte, die unsere Build-Maschinen mit reinem IPv4 nicht erreichen konnten. Fall erledigt? Hier kommt der Reflex ins Spiel, der die Diagnose gerettet hat: das Indiz datieren. Dieser AAAA-Eintrag existierte seit zweieinhalb Monaten, und die CI war in dieser ganzen Zeit ohne Probleme gelaufen. Ein Element, das lange vor den Symptomen vorhanden war, kann nicht ihre Ursache sein; es variierte nur die Fehlermeldungen (Auflösung von A scheitert → „no such host“; nur der AAAA-Eintrag antwortet → IPv6-Versuch → „unreachable“). Erste, allgemeine Lehre: Bei einem sporadischen Symptom zuerst die Chronologie klären (Datum des letzten Erfolgs, Datum jeder Änderung), erst dann Hypothesen bilden.

Die Methode, die Klarheit brachte #

  1. Fehlschläge pro Domain zählen in den Logs des internen Resolvers: Die SERVFAIL betrafen nur zwei unserer Zonen (Hunderte von Vorkommen) und null externe Domains von zehn getesteten. Die Störung hatte also einen klar umrissenen Bereich, und ein solcher Bereich ist bereits eine Signatur.
  2. Öffentliche Resolver vergleichen: Dieselbe Anfrage gelang bei dem einen 12 von 12 Mal… und bei einem anderen, bekannt für strikte DNSSEC-Validierung, 3 von 12 Mal. Eine Domain, die nur bei validierenden Resolvern scheitert, ist ein Neonpfeil, der auf die Vertrauenskette zeigt.
  3. Den DS prüfen: dig DS <zone> beim Parent. Treffer: ein DS-Eintrag, veröffentlicht für Zonen, die ihrerseits unsignierte Antworten lieferten.

Der Mechanismus: das gebrochene Versprechen #

DNSSEC funktioniert über eine Vertrauenskette: Die übergeordnete Zone (.com) veröffentlicht einen DS-Eintrag (den Fingerabdruck des Schlüssels Ihrer Zone), der den Resolvern verspricht: „Die Antworten dieser Zone sind signiert, und so prüfen Sie sie.“ Ein validierender Resolver, der diesen DS findet, verlangt dann signierte Antworten. Erhält er Unsigniertes (unser Fall, während eines Migrationsfensters der DNS-Server, in dem der alte und der neue Datensatz in den Caches nebeneinander existierten), liefert er die Antwort nicht „trotzdem“ aus: Er antwortet mit SERVFAIL, so ist es vorgesehen. Das ist eine Verweigerung aus Sicherheitsgründen, kein Bug. Daher das perfekt sporadische Muster: Unsere internen Resolver fragten abwechselnd einen nachsichtigen und einen strikt validierenden Resolver ab: Etwa jede siebte Auflösung scheiterte, gerade genug, um ab und zu einen Build zu Fall zu bringen, ohne jemals etwas eindeutig kaputt zu machen.

Goldene Regel für DNSSEC: Aktivieren = Zone signieren, prüfen, dann den DS veröffentlichen. Deaktivieren = DS entfernen, seine TTL abwarten, erst dann die Signierung aufheben. Nie in umgekehrter Reihenfolge, und nie ein DS, der einen Wechsel der autoritativen Server überlebt.

Die Behebung, und die Prüfung, auf die es ankommt #

Die Korrektur bestand aus einem einzigen Schritt: die beim Registrar veröffentlichten DS-Einträge für die betroffenen Zonen entfernen und dann für jede Zone des Portfolios prüfen, dass dig DS nichts mehr zurückgibt und der validierende Resolver 12/12 antwortet. Letzte Falle nebenbei: Die Oberfläche oder die API Ihres Registrars kann einen DNSSEC-Status („deaktiviert“) anzeigen, der nichts beweist über das, was der Parent tatsächlich veröffentlicht. Maßgeblich ist allein eine DS-Anfrage an das DNS. Die CI-Fehlschläge hörten noch am selben Tag auf.

Diese Störung erfüllt alle Kriterien unserer Definition von Zuverlässigkeit: unsichtbar in den Dashboards, sporadisch und durch Methode statt durch Glück gelöst. Das ist der Detailgrad, mit dem eine ernsthaft betreute Infrastruktur geführt werden muss, das DNS eingeschlossen, dieses Stiefkind, auf das man erst schaut, wenn alles brennt. Ein mysteriöses Auflösungsproblem bei Ihnen? Solche Rätsel mögen wir.

Über uns
01/Als Nächstes lesenDrei Artikel

Verwandte Artikel

Infrastruktur

Die Exploit-Fabriken: Ihre Firewall ist zur Frontlinie geworden

Zwei Bachelorstudenten in Changsha betrieben eine automatisierte Kette, die eine Firmware entschlüsselt, sie mit Tausenden Aufrufen dekompiliert, Hypothesen über Lücken aufstellt, den Exploit schreibt und ihn im Labor testet, in einer Schleife, Tag und Nacht. Mehr als ein Dutzend unbekannte Schwachstellen in einem Monat in Netzwerkgeräten, rund fünfzig Organisationen im Visier, dreizehn zeitgesteuerte Sammel-Agenten. Was das für das Inventar eines KMU bedeutet.

cybersicherheitschwachstelle
Infrastruktur

36 Server patchen ohne unattended-upgrades

Es gibt drei Grundhaltungen: nichts tun, alles blind automatisieren oder erst hinsehen und dann entscheiden. Wir haben unattended-upgrades von der gesamten Serverflotte entfernt und auch unser eigenes automatisches Patching mit Ansible abgebaut, zugunsten des Grundsatzes „Sichtbarkeit zuerst“, umgesetzt mit PatchMon. Warum, wie, und das Ritual, das dazugehört.

patch managementpatchmon
Infrastruktur

Analyse eines NVMe-Ausfalls: die toten Kondensatoren, die alles verlangsamten

Zweieinhalb Monate lang sammelte ein Hypervisor Replikations-Timeouts an, ohne dass ein Datenträger „tot“ gewesen wäre. Der Schuldige: die Power-Loss-Protection-Kondensatoren einer NVMe, die still ausgefallen waren. Vollständige Analyse: vom Symptom bis zu smartctl, vom Austausch bei OVH bis zum Resilver, der 20.000 latente Fehler ans Licht brachte.

nvmeplp

Und jetzt

Eine Infrastruktur, betreut und überwacht rund um die Uhr?

Bastion, SIEM, bewusst eingespielte Updates, getestete Backups: was wir bei unseren Kunden umsetzen. Erstgespräch kostenlos.

Ihr Projekt besprechen

Antwort binnen 24 Stunden an Werktagen, von einem der beiden Gründer. Oder telefonisch: +33 7 59 96 14 99.