# Lokaler DNS-Zonenvergleich

Voraussetzungen: Python 3.10+ und BIND (named, dig, named-checkconf, named-checkzone) im PATH.
Geprüft am 28. September 2026 mit BIND und DiG 9.20.29 auf macOS. Andere Versionen und
Betriebssysteme sind damit nicht automatisch geprüft. Der Runner installiert nichts.

run.py speichern, dann ausführen:

    python3 run.py > results.json

Der Runner startet nacheinander drei eigene autoritative BIND-Prozesse für agency.test
auf zufällig gewählten hohen Ports an 127.0.0.1. IPv6-Listener, Rekursion, DNSSEC-Validierung,
Notify und Steuerkanal sind ausgeschaltet. Abfragen erfolgen ausschließlich per TCP direkt
an diese lokalen Prozesse. Es werden weder öffentliche Resolver noch Registrar-APIs oder
Mailserver angesprochen. Temporäre Konfiguration und Prozesse werden anschließend entfernt.
Ein harter Abbruch kann die Bereinigung verhindern; keine fremden BIND-Prozesse beenden.
Eine belegte Portauswahl führt zu einem Fehler, nicht zum Beenden des belegenden Dienstes.

Die zehn Mail-Record-Sets enthalten MX, Mailserver-A/AAAA, SPF, einen DKIM-CNAME, DMARC,
Autodiscover, MTA-STS-Ankündigung und Webadresse sowie den TXT-Eintrag für TLS-Berichte.
Die fehlerhafte Kopie lässt den DKIM-CNAME weg und ändert MX auf einen falschen Host.
Die korrigierte Kopie erhält alle zehn Sets; Website-A und NS ändern sich absichtlich.

24 Assertions: zehn bekannte Ausgangswerte, zehn erhaltene Record-Sets, zwei erkannte
Fehler und zwei erlaubte Änderungen. Jede DNS-Antwort muss zusätzlich autoritativ sein.
Die Bereitschaft wird am Startsignal des eigenen Servers beobachtet, nicht durch eine
angenommene Wartezeit. Die Zeitgrenze verhindert lediglich einen hängenden Start.

## Grenzen

Kein öffentlicher Nameserverwechsel, keine Resolver-Cache- oder TTL-Messung, kein DNSSEC,
keine SMTP-Verbindung und keine Prüfung von SPF, DKIM, DMARC, MTA-STS oder TLS-Berichten
als Protokoll. Die Records werden als DNS-Inhalte verglichen. Auch die externen CNAME-Ziele
sind synthetisch und werden nicht aufgelöst. Es wird kein Mailausfall oder dessen Abwesenheit
gemessen. Das ist ein reproduzierbares Beispiel für einen Zonenvergleich, kein Migrationswerkzeug.

results-2026-09-28.json enthält die Antworten, Versionen und den SHA-256 des ausgeführten
Runners. Die MIT-Lizenz steht in LICENSE.txt. Artikel und obhut-Marke behalten ihre Lizenz.
