La resolución DNS falla para hacer ping y curl, pero no para cavar

11

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

Un par de días después, después de algunos reinicios de mi MacBook, sin conexión ya no puedo resolver cosas como api.local.pcfdev.iousar curlo ping. Sin embargo, dighace 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 -AlwaysAppendSearchDomainscomo argumento para /usr/sbin/mDNSResponderen /System/Library/LaunchDaemons/com.apple.mDNSResponder.plisty se reinicia el mDNSResponder con launchctl, pero fue 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 siguiente sugerencia de eliminar todos los servidores DNS de las Preferencias de red 127.0.0.1, excepto , no puedo resolver nada. Logré sacar algunos registros 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 observé eso como se explica en la respuesta propuesta, nslookupy digno hago que se registre nada mDNSResponder, pero otras herramientas ( ping, curl) lo hacen.

Por lo tanto, parece que, por cualquier motivo, dnsmasqno funciona (puedo establecer una conexión TCP 127.0.0.1:53) o mDNSResponderno lo está utilizando.


ACTUALIZACIÓN 3

etc/resolve.confdeja de existir cuando mi adaptador wifi está activo, pero no estoy conectado a una red. ¿Podría ser esta la razón por la cual las herramientas CLI no usan el dnsmasqservidor local ?

EngineerBetter_DJ
fuente
¿Su adaptador de red no funciona por casualidad? Si va a 'Red' en Preferencias del sistema, ¿hay un punto verde al lado del adaptador en el que está configurado dnsmasq para su uso?
mango
Bueno, estoy en un tren sin wi-fi, así que presumiblemente.
EngineerBetter_DJ
1
Específicamente, ¿está apagado el adaptador wifi? Si es así, intente nuevamente con el adaptador wifi encendido (aunque en realidad no esté conectado a Internet). Para que la configuración funcione, dnsmasq debe ser un servidor DNS en la interfaz de red en uso .
mango
Gracias por intentar rastrear esto. También estoy luchando con esto, no entiendo por qué "curl foo: 8989" no puede encontrar el host, pero "dig foo" sí. Sí, "curl 172.20.0.17:8989" funciona bien. Como usted, tengo el DNS de la red Wi-Fi configurado en 127.0.0.1 (un dnsmasq que se ejecuta en un contenedor acoplable). FWIW en mi situación actual, el problema es específico de la red wifi a la que me conecto, funciona bien en mi punto de acceso personal, el problema está en un wifi de cafetería.
jamshid
No he realizado ingeniería inversa de los programas en cuestión, pero mi expectativa es que están llamando a bases de códigos de resolución de DNS completamente diferentes y es por eso que está viendo la rotura: algunos apuntan localmente, otros no. Probablemente me cavar en curlo wgeto recibirlos en los instrumentos / perfilador / depurador y ver lo que está sucediendo realmente a hacer que el error no podía resolver.
bmike

Respuestas:

12

Tuve este mismo problema. Creo que el caché de DNS local tenía datos incorrectos de mis pruebas anteriores. Fue arreglado rápidamente por:

sudo killall -HUP mDNSResponder
cmcginty
fuente
1
Me di cuenta de eso pingy, a digveces, devuelvo diferentes direcciones IP (generalmente con DNS de horizonte dividido) y este comando lo soluciona. Cuál es la causa raíz, no estoy seguro, desafortunadamente.
James
7

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

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

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

Ahora, o la entrada DNS es incorrecta (api.local.pcfdev.io tiene una IP diferente a 192.168.11.11) o la entrada DNS es correcta pero el host 192.168.11.11 no se está ejecutando.


No se recomienda agregar -AlwaysAppendSearchDomains como argumento para / usr / sbin / mDNSResponder en /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist . En su lugar, debe agregarlo 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 su caso, no es necesario establecer esta clave, porque no es la causa de su problema.


Después de excavar en VirtualBox, PCF Dev (fallando repetidamente con algunas "credenciales incorrectas" tratando de iniciar sesión en la VM) y dnsmasq recomiendo transferir las consultas DNS solo 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 una segunda ubicación con una configuración de 127.0.0.1 solamente y mantener su servidor DNS actual en la otra configuración.
  • agregue 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
    
  • agregar resolv-file=/usr/local/etc/resolv.dnsmasq.confen la línea ~ 46 de /usr/local/etc/dnsmasq.conf
  • agregar o mover address=/.local.pcfdev.io/192.168.11.11a / 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
    
klanomath
fuente
Gracias por tomarte el tiempo de responder. Definitivamente hay algo escuchando 192.168.11.11; la entrada real de DNS público para *.local.pcfdev.iosiempre apunta a la misma IP local, por lo que tan pronto como me conecte a las web informativas, curldebo obtener una respuesta de ese servidor DNS y poder averiguar qué dirección IP usar.
EngineerBetter_DJ
1
Parece que curl, pingy los otros binarios que quiero usar están usando un medio para buscar entradas DNS (que no está usando el dnsmasqservidor en localhost), nslookupy digestán usando otros medios. ¡Creo que necesito aprender más sobre mDNSResponder!
EngineerBetter_DJ
@EngineerBetter ¿Tiene alguna otra entrada en Preferencias del sistema> Red> Interfaz> DNS que 127.0.0.1? - Voy a instalar toda la suite (VBox, PCF Dev, etc.) y verificar esto ... ¿Alguna configuración especial?
klanomath
Gracias de nuevo por tomarse el tiempo para ayudarme con esto. La pregunta ha sido actualizada, todavía no tiene suerte.
EngineerBetter_DJ
0

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

sudo killall -HUP mDNSResponder

Finalmente intenté algo más. Inhabilité Wi-Fi y eliminé todas mis redes preferidas. Luego restablecí la conexión Wi-Fi y todo funcionó bien:

  1. Menú Apple -> Preferencias del sistema -> Wi-Fi (a la izquierda)
  2. 'Desactivar Wi-Fi' y luego selecciona 'Avanzado'
  3. Elimine la conexión Wi-Fi con la que tiene problemas (o todos ellos si lo desea). Para ello, seleccione la red Wi-Fi que desea eliminar y presione "-"
  4. Haga clic en 'Aplicar' y 'Aceptar'
  5. Vuelva a encender el Wi-Fi.
  6. Seleccione su red Wi-Fi e inicie sesión nuevamente.

YMMV, pero esto es lo que finalmente funcionó para mí. Probablemente debería haber sido lo primero que intenté.

Joel Griffiths
fuente