Configure el servidor DNS en OS X incluso sin conexión a Internet

17

He instalado, configurado el servidor DNS (instancia local de Dnsmasq) que resuelve en localhost como quiero, todo bien.

Cuando me desconecto, deja de funcionar porque OS X vacía el contenido de resolv.conf e ignora el intento de reflejar los cambios en este archivo.

¿Alguna idea de cómo configurar DNS incluso sin conexión?

Problema similar (sin resolver): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

La motivación principal es el desarrollo sencillo de la aplicación RoR que utiliza subdominios como claves de cuenta. Y no puede usar 127.0.0.1 * .yourapp.local en / etc / hosts. Algunos individuos registraron el dominio smackaho.st y srt DNS para ello, como .smackaho.st en 127.0.0.1, pero aún así, no puede usarlo cuando está trabajando sin conexión.

EDITAR: intentó el comando scutil, pero parece que puede cambiar DNS si está desconectado

NOTA: cuando tiene todas las interfaces desactivadas, no puede configurar servidores DNS en Pref. panel.

daeltar
fuente
Relacionado: dnsmasq no funciona sin conexión a Internet en OS X Yosemite en Super User (sin una solución pero algunas referencias).
Arjan

Respuestas:

29

¡VEA LA ACTUALIZACIÓN A CONTINUACIÓN!

También disfruto usando Dnsmasq en mi máquina local, y también tuve este problema. Aquí está la solución:

De man 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/no está presente por defecto; debes crearlo tú mismo.

También desde la página del manual:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

Entonces, si desea que todas las consultas dns para el dominio de nivel superior devse enruten al servidor de nombres local, debería:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdno altera los archivos /etc/resolver/, por lo que esta configuración persistirá a través de cambios de red y reinicios.

ACTUALIZACIÓN 17 de julio de 2012

Desafortunadamente, a partir de OS X Lion, la resolución superior (como se muestra en scutil --dns) desaparece cuando no hay interfaces activas:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

Observe que el resolutor # 1 está vacío, pero que la entrada del servidor de nombres derivado / etc / resolver permanece.

Resulta que, dado que puede especificar el dominio de resolución directamente en el archivo / etc / resolver /, la especificación del dominio raíz especial de Internet . provoca la creación de una entrada de resolución global que se parece a:

resolver #8
  nameserver[0] : 127.0.0.1

Ahora todas las consultas DNS se enrutan a localhost, incluso cuando están fuera de línea.

Por supuesto, aún tendrá que resolver sus dominios elegidos como 127.0.0.1 usando algo como la opción --ddress de dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

En resumen:

  • Configure todos sus servidores dns de interfaz de red en 127.0.0.1:
    networksetup -setdnsservers Ethernet 127.0.0.1
    networksetup -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Cree un archivo / etc / resolver / lo que sea:
    servidor de nombres 127.0.0.1
    dominio
  • Configure un servidor DNS local y sea feliz.

cf. http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c

pistolas
fuente
Eso es exactamente lo que está usando pow ( pow.cx ).
daeltar
pero desafortunadamente no funciona - github.com/37signals/pow/issues/104
daeltar
3
@guns ¿esta solución todavía funciona en yosemite? dnsmasq funcionaba bien para mí sin conexión hasta que actualicé. Ahora todo lo que obtengo cuando corro scutil --dnscuando no estoy conectado a Internet todo lo que obtengo es No DNS configuration available que seguí tus instrucciones anteriores, pero no tuve suerte
MatthewLee
1
@MatthewLee, sí, tiene razón, parece que la única solución es agregar entradas en el archivo de hosts.
Lenciel
1
¿Alguien ha encontrado una solución para Yosemite todavía?
jmagnusson
2

¿Por qué no hacer las entradas en / etc / hosts en su lugar? Tengo problemas para pensar en una situación en la que realmente necesites ejecutar un servidor DNS completo. Uso entradas de archivos host todo el tiempo para lograr cosas como esta en mis Mac.

La resolución en OS X funciona de manera diferente a la de Linux u otros Unixes. Esto es probablemente parte de lo que te causa dolor. Por ejemplo, tiene preferencias sobre qué método de resolución usar primero y almacena en caché los resultados de todas las consultas durante un período de tiempo.

¿Ha agregado el servidor DNS a la interfaz en el panel de preferencias Red? Esto debería garantizar que el solucionador use ese servidor para sus consultas si decide buscar una entrada DNS.


fuente
Una razón para usar un reenviador de DNS en una máquina cliente es mantener una gran lista negra de dominios de publicidad / malware sin sufrir la penalización de rendimiento del demonio de resolución que aglomera el archivo de hosts ahora inflado en cada solicitud. A pesar de los méritos de este enfoque, dnsmasq carga / etc / hosts en la memoria donde el tiempo de búsqueda será minúsculo. Además, si realiza desarrollo web, le permite evitar la pequeña molestia de agregar dominios locales para cada sitio en el que está trabajando.
pistolas
1

(respondiendo b / c no puedo comentar todavía ...)

¿Cómo te vas fuera de línea?

(La mejor respuesta que tengo ahora)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

Por lo tanto, debe poder ingresar algo en la interfaz de usuario, y debe pegarse. Lo había hecho un par de veces cuando no me gustaba el servidor DNS que proporciona mi servidor DHCP local.

benc
fuente
Cambiar la configuración de DNS en NetworkPreferences cambia el archivo /etc/resolv.conf.
Fabian Zeindl
0

¿OSX tiene el archivo de configuración /etc/dhcp3/dhclient.conf que tienen las configuraciones normales de cliente Linux / UNIX DHCP?

Si es así, debe tener una línea que pueda descomentar

prepend domain-name-servers 127.0.0.1;

para que el cliente DHCP siempre agregue esa línea a su resolv.conf

Kevin Kuphal
fuente
Agregar a resolv.conf no está ayudando en OS X. El contenido de resolv.conf se genera y en sí mismo es enlace simbólico en /var/run/resolv.conf e incluso cuando cambio /var/run/resolv.conf no refleja cambios .
daeltar
0

Intente agregar un segundo servicio de Ethernet configurado con una dirección estática y 127.0.0.1 como su servidor DNS. O bien, agregue una ubicación de red que establezca su servidor DNS en 127.0.0.1. Ambos cambios se realizarían en "Preferencias del sistema" en el panel "Red".

Josh
fuente
-2

Podría ayudar simplemente poner

127.0.0.1       localhost

en / etc / hosts, por lo que no es necesario resolver para encontrar localhost.

Sven
fuente
1
Lo necesito para subdominios, así que esto no es no.
daeltar