En macOS 26 no funcionan las configuraciones DNS personalizadas como `.internal`
(gist.github.com/adamamyl)- En macOS 26.3.1, las configuraciones DNS por dominio basadas en
/etc/resolver/quedan invalidadas para TLD no estándar, lo que interrumpe entornos locales de desarrollo ya existentes mDNSResponderprocesa las solicitudes de TLD personalizados solo como mDNS y no consulta en absoluto los servidores de nombres unicast especificados.internal,.test,.home.arpa,.lany, en general, los TLD que no están en la zona raíz de IANA fallan, mientras que los dominios estándar (google.com, etc.) funcionan normalmente- La única solución temporal es registrarlos manualmente en
/etc/hosts, pero en entornos dinámicos (Docker, Kubernetes, etc.) esto no es realista - Se interrumpe por completo todo el flujo de trabajo de DNS local que la comunidad de desarrolladores de macOS ha usado durante años, con un impacto amplio en herramientas de desarrollo e integraciones con VPN
Regresión de DNS en macOS 26
-
En macOS 26.3.1 (Darwin 25.3.0, Build 25D771280a), se rompe la función de configuración DNS por dominio mediante
/etc/resolver/- Era una función que trabajaba normalmente hasta macOS 25.x, pero dejó de hacerlo tras actualizar a la versión 26
- Aunque es una función documentada oficialmente por Apple (
man 5 resolver), ya no funciona con TLD no estándar
-
mDNSResponderintercepta todas las solicitudes para TLD personalizados como mDNS e ignora los servidores de nombres unicast configurados- Todas las aplicaciones que usan
getaddrinfo()(ping,curl,python3 socket) muestran el error “Unknown host” - Según
tcpdump, no se genera ningún tráfico hacia el DNS local (127.0.0.1:53) - En el comando
dns-sd -G v4aparece la respuesta “No Such Record” junto con un TTL anormalmente largo (aprox. 108,002 segundos)
- Todas las aplicaciones que usan
Pruebas y pasos para reproducir
-
Se configura
dnsmasqinstalado con Homebrew como resolvedor DNS local y se mapean dominios*.internalo*.example-privatea 127.0.0.1- En el archivo
/etc/resolver/example-privatese especificanameserver 127.0.0.1 - El comando
scutil --dnsmuestra que ese resolvedor está registrado correctamente - Sin embargo, al ejecutar
ping probe.example-privateaparece el error “Unknown host”
- En el archivo
-
dig @127.0.0.1y el comandohostdevuelven respuestas normales, pero todas las apps que usan el resolvedor del sistema fallan- Esto se debe a que
mDNSResponderbloquea internamente las consultas y no invoca el DNS unicast
- Esto se debe a que
Lista de TLD afectados
| TLD | Estado | Nota |
|---|---|---|
.internal |
Falla | TLD de uso especial en borrador del IETF; funcionaba en macOS 25 |
.test |
Falla | Reservado para pruebas locales según RFC 6761 §6.2 |
.home.arpa |
Falla | Reservado para redes domésticas según RFC 8375 |
.lan |
Falla | No oficial, pero ampliamente usado |
| Otros TLD no registrados | Falla | Cualquier TLD que no esté en la zona raíz de IANA |
- En el caso de
.test, aunque debería resolverse mediante DNS normal según lo especificado en la RFC 6761, macOS 26 lo trata como exclusivo de mDNS - En cambio, dominios registrados en IANA como
google.comybbc.co.uksiguen funcionando normalmente
Impacto en entornos y herramientas de desarrollo
-
Se rompe por completo todo el flujo de trabajo de DNS para desarrollo local
- Desarrolladores que usan la combinación
dnsmasq+/etc/resolver/con*.test,*.internal, etc. - La resolución de nombres de contenedores en Docker Desktop y herramientas similares
- Vagrant, Tailscale y clientes VPN que generan automáticamente archivos
/etc/resolver/ - Herramientas de desarrollo local para Kubernetes (minikube, kind, k3d, etc.) para resolver
*.cluster.local
- Desarrolladores que usan la combinación
-
Como el sistema muestra la configuración del resolvedor como correcta en
scutil --dns, para el usuario es difícil detectar el problema y no hay registros ni mensajes de error
Solución temporal y limitaciones
- La única forma que funciona es agregar manualmente el mapeo de dominios en
/etc/hosts- Este método evita por completo
mDNSResponder - Pero no es realista en Docker ni en entornos con DNS dinámico, y además requiere privilegios
sudocada vez que hay cambios
- Este método evita por completo
Especificaciones técnicas y entorno de validación
- macOS 26.3.1 (Build 25D771280a), Apple Silicon (arm64)
dnsmasqinstalado mediante Homebrew y escuchando en 127.0.0.1:53- Los comandos
digyhostresponden correctamente;ping,curlypython3 socket.getaddrinfofallan - Documentación y estándares relacionados:
man 5 resolver— documentación del mecanismo/etc/resolver/en macOS- RFC 6761 — define dominios de uso especial como
.test,.localhost,.invalidy.example - RFC 8375 — define el dominio
home.arpa - IETF draft-ietf-dnsop-interneti-mdn — borrador del dominio de uso especial
.internal
3 comentarios
Por esto no he podido usar Tailscale MagicDNS durante varios días..
Esperemos que tailscale ayude a sortear este problema.
Opiniones de Hacker News
Me fui de macOS por este tipo de molestias pequeñas (papercuts)
Usar un LLM para redactar reportes de bugs está bien si luego se revisan, pero si deja pasar errores obvios como “funcionaba en macOS 25”, eso le quita credibilidad
Si este tipo de reportes aumenta, creo que la gente va a empezar a descartar sin más los reportes escritos por IA por la carga que implica verificarlos
Poner a la IA a escribir en mi nombre es una falta de respeto que da la impresión de “mi tiempo vale más que el tuyo”
Si te pondría en una situación incómoda admitir públicamente que usaste IA, eso en sí mismo ya debería hacerte replantear para qué la estás usando
En Linux o Windows se pueden contar ejemplos igual de dolorosos. Al final es cuestión de “elegir qué veneno prefieres”
Microsoft era famosa por mantener la compatibilidad hacia atrás, mientras que Apple lo era por romper sin miedo funciones existentes
Hoy en día Microsoft ya no es tan conservadora como antes, y Apple incluso da la impresión de haberse vuelto más estable que en el pasado
En NixOS, por ejemplo, eliges una versión anterior desde el menú de arranque y todo el sistema vuelve atrás
En la laptop uso macOS, pero el trabajo real lo hago casi siempre dentro de contenedores Linux
macOS 26 es, hasta ahora, la versión que más rompe compatibilidad
Varias modificaciones intencionales han hecho que desarrollar apps sea muy difícil
Por ejemplo, la app Lunar ya no puede ajustar arbitrariamente los niveles de nits SDR, así que el control de brillo quedó bloqueado,
y la app YellowDot dejó de servir porque ya no puede ajustar el brillo del indicador del micrófono
Además, hay varios bugs como problemas con eventos del mouse en ventanas sin título, imposibilidad de aplicar tablas gamma,
y pérdida de la ruta del archivo original al arrastrar en apps como Clop
Ojalá macOS 27 también lo sea (fuente)
La filosofía de macOS se siente demasiado terca y unilateral, y eso frustra
No uso macOS directamente, pero en teoría parece posible
Parece que por ahora no queda más que resignarse
La idea es impedir que el malware oculte el acceso a la cámara o al micrófono
Además, el límite de brillo SDR podría estar pensado para prevenir con anticipación los problemas de batería de las pantallas OLED que saldrán pronto
Sigo esperando el día en que Apple separe hardware y software
Quiero Apple Silicon, pero no su sistema operativo
Si no puedo ejecutar mi propio kernel y mis propios módulos, entonces ese equipo no es mío
La laptop de al lado arranca con coreboot, y eso refleja mi filosofía
Para desarrollo web local uso
*.localhostTodos los navegadores modernos lo resuelven automáticamente a 127.0.0.1, así que no hace falta configurar DNS ni modificar hosts
Eso sí, no aplica a programas fuera del navegador (python, wget, etc.)
*.*.localhosttambién está soportado, así que ahora se puede replicar localmente la misma estructura de dominios de producciónArchiveBox usa esta función para aislar dominios por snapshot y así reducir riesgos de seguridad
.localhostse me hace un poco largoAntes usaba
.local, pero daba muchos conflictosdev.our-root-domain.commapeado a 127.0.0.1 en el DNS públicoEn una vieja máquina con Yosemite he usado una configuración que ofrece varios TLD locales
El método de
/etc/resolverya estaba marcado para deprecación desde alrededor de 2014, y parece que ahora por fin lo quitaron por completoEn su lugar, lo correcto es guardar la configuración usando directamente
scutilscutilsolo no alcanzaAlgunas consultas de macOS todavía pasan por mDNSResponder, que ignora o sobrescribe esa configuración
Por eso, al final usar unbound o dnsmasq termina siendo más simple
Yo también uso varios TLD con la combinación de
/etc/resolver/Xy dnsmasq, y no tengo problemasEn el archivo de configuración siempre incluyo la directiva
domainEn la práctica, casi siempre ha sido necesaria esa configuración
Quizás agregar la entrada
domainresuelva el problemaUso Linux principalmente, pero no entiendo muy bien por qué la gente dice que el diseño de macOS es malo
Si solo miras la UX, macOS siempre me pareció bastante pulido
Incluso muchos temas populares de Gnome imitan el estilo de macOS
Sobre todo en HN, eso me parece aún más cierto
Ajustar las esquinas de las ventanas es incómodo, pero en conjunto me deja satisfecho
Al final, todos los sistemas operativos tienen bugs
Un ejemplo claro son los cuadros de diálogo de notificaciones
Lo que sí extraño es la falta de personalización
Extrañar interfaces antiguas como Windows 98 quizá solo sea una cuestión generacional
La forma de pasar a pantalla completa es peculiar, pero cuando te acostumbras resulta cómoda
Lo que sí molesta es la falta de window tiling
Aun así sigo prefiriendo Linux, aunque suspend y la gestión de energía lleven 8 años siendo un problema
Hubo una época en que Apple bloqueó en iOS los certificados autofirmados, y eso volvió casi imposible el desarrollo local con HTTPS
Cuesta entender por qué tocaron algo así
A mí me gusta macOS
Trae zsh por defecto, y puedo hacer en una computadora personal casi todo lo que hacía en Linux
*.localhostfunciona por defectoIncluso sin dnsmasq se pueden apuntar varios nombres de host a 127.0.0.1
*.example-privatehacen falta para distinguir varios dispositivos mediante IP privadasSi solo vas a usar localhost, entonces basta con usar 127.0.0.1
En lo personal, uso *mDNS con .local para aprovechar la configuración automática basada en DHCP