Unter macOS 26 funktionieren benutzerdefinierte DNS-Einstellungen wie `.internal` nicht
(gist.github.com/adamamyl)- Unter macOS 26.3.1 werden domainbasierte DNS-Einstellungen über
/etc/resolver/für nicht standardisierte TLDs außer Kraft gesetzt, wodurch bestehende lokale Entwicklungsumgebungen ausfallen mDNSResponderverarbeitet Anfragen für benutzerdefinierte TLDs nur noch per mDNS und greift überhaupt nicht auf den angegebenen Unicast-Nameserver zu.internal,.test,.home.arpa,.lanund praktisch alle TLDs, die nicht in der IANA-Root-Zone stehen, schlagen fehl, während Standarddomains (google.comusw.) normal funktionieren- Die einzige vorläufige Umgehungslösung ist ein manueller Eintrag in
/etc/hosts, doch das ist in dynamischen Umgebungen (Docker, Kubernetes usw.) unrealistisch - Dadurch wird der von der macOS-Entwickler-Community seit langem genutzte gesamte lokale DNS-Workflow unterbrochen, mit weitreichenden Auswirkungen auf Entwicklertools und VPN-Integrationen
DNS-Regression in macOS 26
-
In macOS 26.3.1 (Darwin 25.3.0, Build 25D771280a) ist die Funktion für domainspezifische DNS-Konfiguration über
/etc/resolver/beschädigt- Eine Funktion, die bis macOS 25.x normal arbeitete, ist nach dem Update auf Version 26 ausgefallen
- Obwohl sie in Apples offizieller Dokumentation (
man 5 resolver) beschrieben ist, funktioniert sie bei nicht standardisierten TLDs nicht mehr
-
mDNSResponderfängt sämtliche Anfragen an benutzerdefinierte TLDs per mDNS ab und ignoriert den angegebenen Unicast-Nameserver- In allen Anwendungen, die
getaddrinfo()verwenden (ping,curl,python3 socket), tritt der Fehler „Unknown host“ auf - Laut
tcpdumpwird überhaupt kein Traffic an den lokalen DNS-Resolver (127.0.0.1:53) gesendet - Beim Befehl
dns-sd -G v4erscheint die Antwort „No Such Record“ zusammen mit einer ungewöhnlich langen TTL (ca. 108.002 Sekunden)
- In allen Anwendungen, die
Tests und Reproduktionsschritte
-
Mit Homebrew installiertes
dnsmasqals lokalen DNS-Resolver konfigurieren und*.internal- oder*.example-private-Domains auf 127.0.0.1 abbilden- In der Datei
/etc/resolver/example-privatewirdnameserver 127.0.0.1gesetzt - Im Befehl
scutil --dnswird der Resolver als korrekt registriert angezeigt - Beim Ausführen von
ping probe.example-privateerscheint jedoch der Fehler „Unknown host“
- In der Datei
-
dig @127.0.0.1und derhost-Befehl liefern normale Antworten, aber alle Apps, die den System-Resolver nutzen, schlagen fehl- Das liegt daran, dass
mDNSResponderdie Anfragen intern blockiert und kein Unicast-DNS aufruft
- Das liegt daran, dass
Liste der betroffenen TLDs
| TLD | Status | Anmerkung |
|---|---|---|
.internal |
Fehler | TLD für spezielle Nutzung aus einem IETF-Entwurf, funktionierte unter macOS 25 normal |
.test |
Fehler | Gemäß RFC 6761 §6.2 für lokale Tests reserviert |
.home.arpa |
Fehler | Gemäß RFC 8375 für Heimnetzwerke reserviert |
.lan |
Fehler | Inoffiziell, aber weit verbreitet |
| Sonstige nicht registrierte TLDs | Fehler | Alle TLDs, die nicht in der IANA-Root-Zone stehen |
- Bei
.testsollte die Domain gemäß RFC 6761 eigentlich normal per DNS aufgelöst werden, doch macOS 26 behandelt sie ausschließlich über mDNS - Dagegen funktionieren bei der IANA registrierte Domains wie
google.comoderbbc.co.ukweiterhin normal
Auswirkungen auf Entwicklungsumgebungen und Tools
-
Der gesamte DNS-Workflow für lokale Entwicklung wird unterbrochen
- Entwickler, die die Kombination aus
dnsmasq+/etc/resolver/mit*.test,*.internalusw. nutzen - Die Container-Namensauflösung von Docker Desktop und ähnlichen Tools
- Vagrant, Tailscale und VPN-Clients, die
/etc/resolver/-Dateien automatisch erzeugen - Lokale Kubernetes-Entwicklungstools (minikube, kind, k3d usw.) für die Auflösung von
*.cluster.local
- Entwickler, die die Kombination aus
-
Da das System in
scutil --dnsdie Resolver-Konfiguration als korrekt anzeigt, ist das Problem für Nutzer schwer zu erkennen; zudem fehlen Logs oder Fehlermeldungen
Vorläufige Umgehungslösung und Grenzen
- Die einzige funktionierende Methode ist das manuelle Hinzufügen von Domain-Mappings in
/etc/hosts- Dadurch wird
mDNSRespondervollständig umgangen - In Docker- oder dynamischen DNS-Umgebungen ist das jedoch unrealistisch, und bei jeder Änderung sind
sudo-Rechte erforderlich
- Dadurch wird
Technische Daten und Testumgebung
- macOS 26.3.1 (Build 25D771280a), Apple Silicon (arm64)
dnsmasqwurde per Homebrew installiert und lauscht auf 127.0.0.1:53- Die Befehle
digundhostliefern normale Antworten;ping,curlundpython3 socket.getaddrinfoschlagen fehl - Relevante Dokumentation und Standards:
man 5 resolver— Dokumentation des/etc/resolver/-Mechanismus unter macOS- RFC 6761 — Definition spezieller Domains wie
.test,.localhost,.invalid,.example - RFC 8375 — Definition der Domain
home.arpa - IETF draft-ietf-dnsop-interneti-mdn — Entwurf zur speziellen Domain
.internal
3 Kommentare
Deshalb kann ich Tailscale MagicDNS schon seit mehreren Tagen nicht nutzen..
Ich hoffe, dass tailscale dieses Problem umgeht.
Hacker-News-Kommentare
Wegen solcher kleinen Reibungen (papercuts) habe ich macOS verlassen
Einen Bugreport mit einem LLM zu schreiben, ist in Ordnung, wenn er anschließend geprüft wird; wenn aber offensichtliche Fehler wie „funktionierte unter macOS 25“ einfach stehen bleiben, leidet die Glaubwürdigkeit
Wenn solche Reports zunehmen, werden Leute wegen des Prüfaufwands von KI geschriebene Reports wohl einfach wegwerfen
KI unter meinem Namen schreiben zu lassen, wirkt wie die unhöfliche Botschaft, dass „meine Zeit wertvoller ist als deine“
Wenn es unangenehm wäre, den KI-Einsatz öffentlich zuzugeben, sollte man allein deshalb den Zweck dieses Einsatzes noch einmal überdenken
Über Linux oder Windows ließen sich genauso schmerzhafte Beispiele schreiben. Am Ende ist es eine Frage davon, „welches Gift man wählt“
Microsoft war bekannt dafür, Abwärtskompatibilität zu bewahren, Apple dagegen dafür, bestehende Funktionen ohne Zögern zu brechen
Inzwischen ist Microsoft nicht mehr so konservativ wie früher, und Apple wirkt im Vergleich zu früher sogar stabiler
Bei NixOS kann man im Boot-Menü einfach eine frühere Version wählen und das ganze System springt zurück
Auf dem Laptop nutze ich macOS, aber die eigentliche Arbeit läuft meist in Linux-Containern
macOS 26 ist bisher die Version mit den meisten Kompatibilitätsbrüchen
Mehrere absichtliche Änderungen haben die App-Entwicklung sehr erschwert
Zum Beispiel kann die App Lunar den SDR-Nit-Wert nicht mehr frei setzen und dadurch ist die Helligkeitssteuerung blockiert,
und die App YellowDot kann die Helligkeit der Mikrofonanzeige nicht mehr anpassen und ist dadurch unbrauchbar geworden
Dazu kommen mehrere Bugs, etwa Maus-Event-Probleme bei fensterlosen Titelleisten, nicht anwendbare Gamma-Tabellen
oder dass Apps wie Clop beim Ziehen den Pfad der Originaldatei verlieren
Hoffentlich gilt das auch für macOS 27 (Quelle)
Die Philosophie von macOS wirkt zu stur und einseitig, das ist frustrierend
Ich nutze macOS selbst nicht, aber theoretisch scheint das möglich
Ich werde es wohl erst einmal einfach aufgeben müssen
Malware soll den Zugriff auf Kamera und Mikrofon nicht verbergen können
Außerdem könnte die Begrenzung der SDR-Helligkeit auch dazu dienen, Akkuprobleme kommender OLED-Displays schon im Voraus zu vermeiden
Ich warte immer noch auf den Tag, an dem Apple in Hardware und Software getrennt wird
Apple Silicon will ich, ihr OS aber nicht
Wenn ich meinen eigenen Kernel und meine eigenen Module nicht ausführen kann, dann ist das nicht meine Hardware
Der Laptop daneben bootet mit coreboot, das zeigt meine Haltung ziemlich gut
Für lokale Webentwicklung nutze ich
*.localhostAlle modernen Browser lösen das automatisch zu 127.0.0.1 auf, daher braucht man weder DNS-Einstellungen noch Änderungen an der hosts-Datei
Für Programme außerhalb des Browsers (python, wget usw.) gilt das allerdings nicht
*.*.localhostwird unterstützt, sodass sich die Produktions-Domainstruktur lokal 1:1 nachbilden lässtArchiveBox nutzt das, um pro Snapshot eine Domain-Isolation umzusetzen und so Sicherheitsrisiken zu verringern
.localhostleider etwas langFrüher habe ich
.localverwendet, aber das führte oft zu Konfliktendev.our-root-domain.com, das im öffentlichen DNS auf 127.0.0.1 gemappt wirdAuf einer alten Yosemite-Maschine habe ich lange eine Konfiguration genutzt, die mehrere lokale TLDs bereitstellt
Die
/etc/resolver-Methode war schon um 2014 herum zur Abschaffung vorgesehen, jetzt scheint sie endgültig entfernt worden zu seinStattdessen ist es der richtige Weg, die Konfiguration direkt mit
scutilzu speichernscutilallein reicht nicht ausEinige macOS-Lookups laufen weiterhin über mDNSResponder und ignorieren oder überschreiben diese Einstellungen
Deshalb ist es am Ende einfacher, gleich unbound oder dnsmasq zu verwenden
Ich nutze ebenfalls mehrere TLDs mit der Kombination aus
/etc/resolver/Xund dnsmasq und habe keine ProblemeIn der Konfigurationsdatei steht immer die Direktive
domainTatsächlich war diese Einstellung fast immer nötig
Vielleicht lässt sich das Problem lösen, wenn man den
domain-Eintrag ergänztIch nutze hauptsächlich Linux, verstehe aber nicht ganz, warum Leute sagen, das Design von macOS sei schlecht
Rein vom UX her wirkte macOS auf mich ziemlich ausgereift und fein abgestimmt
Viele beliebte Gnome-Themes ahmen schließlich den Stil von macOS nach
Besonders auf HN ist das meiner Meinung nach so
Die Größenänderung an den Fensterecken ist zwar umständlich, aber insgesamt bin ich zufrieden
Letztlich hat jedes OS Bugs
Die Benachrichtigungsdialoge sind dafür ein typisches Beispiel
Was mir fehlt, ist nur mehr Anpassbarkeit
Dass man alten UIs wie Windows 98 nachtrauert, ist vielleicht einfach eine Generationenfrage
Die Art, wie in den Vollbildmodus gewechselt wird, ist eigen, aber wenn man sich daran gewöhnt hat, ist sie angenehm
Nur das Fehlen von Window-Tiling stört mich
Trotzdem bevorzuge ich weiterhin Linux, auch wenn Suspend und Energieverwaltung dort seit acht Jahren problematisch sind
Früher hatte Apple unter iOS einmal selbst signierte Zertifikate blockiert, wodurch lokale HTTPS-Entwicklung fast unmöglich wurde
Schwer nachvollziehbar, warum sie an so etwas herumgedreht haben
Ich mag macOS
Es bringt zsh standardmäßig mit, und fast alles, was ich unter Linux gemacht habe, kann ich auch auf einem persönlichen Computer damit tun
*.localhostfunktioniert standardmäßigAuch ohne dnsmasq lassen sich mehrere Hostnamen auf 127.0.0.1 legen
*.example-privatesind nötig, um mehrere Geräte über private IPs zu unterscheidenWenn man nur localhost braucht, kann man einfach 127.0.0.1 verwenden
Ich persönlich nutze *mDNS mit .local, um die automatische DHCP-basierte Konfiguration auszuschöpfen