24 votos

La resolución de DNS falla para ping y curl, pero no para dig

Estoy ejecutando DNSMasq como servidor DNS local, por lo que puedo resolver *.local.pcfdev.io (tal y como se comenta aquí Uso de PCF Dev Offline con Mac OS X ). Todo funcionó cuando lo configuré por primera vez.

Un par de días más tarde, después de unos cuantos reinicios de mi MacBook, mientras que fuera de línea ya no puedo resolver cosas como api.local.pcfdev.io utilizando curl o ping . Sin embargo, dig hace lo correcto.

$ dig api.local.pcfdev.io

; <<>> DiG 9.8.3-P1 <<>> api.local.pcfdev.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;api.local.pcfdev.io.       IN      A

;; ANSWER SECTION:
api.local.pcfdev.io.    0       IN      A       192.168.11.11

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Sep  6 10:17:44 2016
;; MSG SIZE  rcvd: 53

$ curl api.local.pcfdev.io
curl: (6) Could not resolve host: api.local.pcfdev.io

He intentado añadir -AlwaysAppendSearchDomains como argumento para /usr/sbin/mDNSResponder en /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist y reiniciar el mDNSResponder con launchctl pero en vano.


ACTUALIZACIÓN 1

Definitivamente hay algo escuchando en la IP local correcta:

$ nslookup api.local.pcfdev.io
Server:     127.0.0.1
Address:        127.0.0.1#53

Name:   api.local.pcfdev.io
Address: 192.168.11.11

$ ping api.local.pcfdev.io
ping: cannot resolve api.local.pcfdev.io: Unknown host

$ telnet 192.168.11.11 80
Trying 192.168.11.11...
Connected to 192.168.11.11.
Escape character is '^]'.

HTTP/1.1 400 Bad Request

Connection closed by foreign host.

ACTUALIZACIÓN 2

Después de probar la sugerencia de eliminar todos los servidores DNS de las Preferencias de Red excepto 127.0.0.1 No puedo resolver nada. He conseguido sacar algún registro de depuración de mDNSResponder :

mDNSResponder[91]:  74: DNSServiceCreateConnection START PID[32612](ping)
mDNSResponder[91]:  74: Error socket 75 created 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(15000, 0, api.local.pcfdev.io., Addr) START PID[32612]()
mDNSResponder[91]:  74: Error socket 75 closed  00000000 00000001 (0)
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) ADD    0 api.local.pcfdev.io. Addr
mDNSResponder[91]:  74: Cancel 00000000 00000001
mDNSResponder[91]:  74: DNSServiceQueryRecord(api.local.pcfdev.io., Addr) STOP PID[32612]()
mDNSResponder[91]:  74: DNSServiceCreateConnection STOP PID[32612](ping)

También he observado que, como se explica en la respuesta propuesta, nslookup y dig no hacen que se registre nada por mDNSResponder pero otras herramientas ( ping , curl ).

Así que parece que por la razón que sea dnsmasq no funciona (puedo establecer una conexión TCP con 127.0.0.1:53 ) o mDNSResponder no lo está usando.


ACTUALIZACIÓN 3

etc/resolve.conf deja de existir cuando mi adaptador wifi está activo, pero no estoy conectado a una red. ¿Podría ser esto por lo que las herramientas CLI no utilizan el local dnsmasq ¿Servidor?

26voto

Abhi Puntos 111

Tenía este mismo problema. Creo que la caché de DNS local tenía datos erróneos de mis pruebas anteriores. Se arregló rápidamente por:

sudo killall -HUP mDNSResponder

8voto

klanomath Puntos 19587

cavar por un lado y curl/ping por otro lado, están recuperando datos de diferentes hosts:

cavar consulta un servidor DNS - en su caso su localhost (127.0.0.1) - para una entrada de la base de datos: la dirección IP relacionada con el FQDN api.local.pcfdev.io. El host en sí no tiene que ejecutarse o incluso existir en absoluto.

curl/ping intentar resolver una dirección IP con mDNSResponder o por otros medios y finalmente operar/interactuar con el host remoto. Si el host 192.168.11.11 no se ejecuta o no existe en absoluto, ambos fallarán.

Ahora, o bien la entrada DNS es incorrecta (api.local.pcfdev.io tiene otra IP que 192.168.11.11) o bien la entrada DNS es correcta pero el host 192.168.11.11 no está funcionando.


Añadiendo -AlwaysAppendSearchDomains como argumento de /usr/sbin/mDNSResponder en /Sistema/Librería/LaunchDaemons/com.apple.mDNSResponder.plist no es recomendable. En su lugar, debe añadirlo a /Library/Preferences/com.apple.mDNSResponder.plist (fuente: man mDNSResponder ):

Para hacer que mDNSResponder se ejecute con estos argumentos opcionales cuando se inicie en OS X 10.11 (El Capitan) y posteriores, establezca las claves booleanas AlwaysAppendSearchDomains o NoMulticastAdvertisements en true en /Library/Preferences/com.apple.mDNSResponder.plist y reinicie.

En tu caso no es necesario en absoluto poner esta clave, porque no es la causa de tu problema.


Después de indagar en VirtualBox, PCF Dev (fallando repetidamente con unas "credenciales erróneas" al intentar entrar en la VM) y dnsmasq recomiendo desviar las consultas DNS sólo a dnsmasq:

  • En Preferencias del Sistema > Red > Interfaz > Servidor DNS elimine todos los servidores DNS excepto 127.0.0.1 y aplique los cambios. También puede configurar un segundo Ubicación con una configuración de sólo 127.0.0.1 y mantener su actual servidor DNS en la otra configuración.

  • añadir un archivo /usr/local/etc/resolv.dnsmasq.conf con el contenido

    #use your preferred DNS servers here. In the example I use some Google name servers
    nameserver 8.8.8.8
    nameserver 8.8.4.4
  • añadir resolv-file=/usr/local/etc/resolv.dnsmasq.conf en la línea ~46 de /usr/local/etc/dnsmasq.conf

  • añadir o mover address=/.local.pcfdev.io/192.168.11.11 a la línea ~80 de /usr/local/etc/dnsmasq.conf

  • reiniciar dnsmasq con:

    sudo launchctl stop homebrew.mxcl.dnsmasq
    sudo launchctl start homebrew.mxcl.dnsmasq

0voto

user333027 Puntos 1

Me llevó mucho más tiempo de lo que debería resolver esto. Después de reiniciar mDNSResolver docenas de veces como se recomienda en otros hilos:

sudo killall -HUP mDNSResponder

Finalmente probé otra cosa. Desactivé el Wi-Fi y borré todas mis redes preferidas. Luego he restablecido la conexión Wi-Fi y todo ha funcionado bien:

  1. Menú Apple -> Preferencias del Sistema -> Wi-Fi (a la izquierda)
  2. "Desactivar Wi-Fi" y luego seleccionar "Avanzado".
  3. Borra la conexión Wi-Fi con la que tienes problemas (o todas todas ellas si lo desea). Para ello, selecciona la red Wi-Fi que quieras eliminar y pulsa "-".
  4. Haga clic en "Aplicar" y "Aceptar".
  5. Vuelve a encender el Wi-Fi.
  6. Seleccione su red Wi-Fi y vuelva a conectarse.

Según la opinión de cada uno, pero esto es lo que finalmente me ha funcionado. Probablemente debería haber sido lo primero que probé.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X