Risoluzione DNS non riesce per il ping e l'arricciatura, ma non per scavare


11

Sto eseguendo DNSMasq come server DNS locale, quindi posso risolverlo *.local.pcfdev.io(come discusso qui Utilizzo di PCF Dev Offline con Mac OS X ). Tutto ha funzionato quando ho impostato le cose per la prima volta.

Un paio di giorni dopo, dopo alcuni riavvii del mio MacBook, mentre sono offline non riesco più a risolvere cose come api.local.pcfdev.iousare curlo ping. Tuttavia, digfa la cosa giusta.

$ 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

Ho provato ad aggiungere -AlwaysAppendSearchDomainscome argomento /usr/sbin/mDNSResponderin /System/Library/LaunchDaemons/com.apple.mDNSResponder.pliste ho riavviato mDNSResponder launchctl, ma senza risultati.


AGGIORNAMENTO 1

C'è sicuramente qualcosa che ascolta sull'IP locale giusto:

$ 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.

AGGIORNAMENTO 2

Dopo aver provato il suggerimento seguente di rimuovere tutti i server DNS dalle Preferenze di rete tranne 127.0.0.1, non riesco a risolvere nulla. Sono riuscito a ottenere qualche log di debug da 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)

Ho anche osservato che, come spiegato nella risposta proposta, nslookupe dignon faccio in modo che nulla venga registrato mDNSResponder, ma altri strumenti ( ping, curl) lo fanno.

Quindi sembra che per qualsiasi motivo o dnsmasqnon funzioni (posso stabilire una connessione TCP 127.0.0.1:53) o mDNSRespondernon la sta usando.


AGGIORNAMENTO 3

etc/resolve.confcessa di esistere quando la mia scheda wifi è attiva, ma non sono connesso a una rete. Potrebbe essere questo il motivo per cui gli strumenti della CLI non utilizzano il dnsmasqserver locale ?


La tua scheda di rete è caduta per caso? Se vai su "Rete" in Preferenze di Sistema, c'è un punto verde accanto all'adattatore in cui è configurato dnsmasq per l'uso?
mango,

Bene, sono su un treno senza wi-fi, quindi presumibilmente.
EngineerBetter_DJ,

1
In particolare, l'adattatore wifi è spento? In tal caso, riprovare con l'adattatore wifi attivato (anche se potrebbe non essere effettivamente connesso a Internet). Perché l'installazione funzioni, dnsmasq deve essere un server DNS sull'interfaccia di rete in uso .
mango,

Grazie per aver cercato di rintracciarlo. Sto anche lottando con questo, non capisco perché "curl foo: 8989" non riesce a trovare l'host ma "dig foo" può farlo. Sì, "curl 172.20.0.17:8989" funziona bene. Come te ho il DNS della rete Wi-Fi impostato su 127.0.0.1 (un dnsmasq in esecuzione in un contenitore docker). FWIW nella mia situazione attuale, il problema è specifico della rete wifi a cui mi connetto - funziona bene sul mio hotspot personale, il problema è su un wifi coffeeshop.
jamshid

Non ho invertito il funzionamento dei programmi in questione, ma la mia aspettativa è che stiano chiamando basi di codice di risoluzione DNS completamente diverse ed è per questo che stai vedendo rotture - alcune puntano localmente, altre no. Probabilmente li scaverei curlo wgetli prenderei in strumenti / profiler / debugger e vedrei cosa sta realmente accadendo per causare l'errore non risolto.
bmike

Risposte:


12

Ho avuto lo stesso problema. Penso che la cache DNS locale avesse dati errati dai miei precedenti test. È stato rapidamente risolto da:

sudo killall -HUP mDNSResponder

1
Ho notato che pinge digtalvolta tornare diversi indirizzi IP (di solito con Split DNS all'orizzonte) e questo comando lo ripara. Qual è la causa principale, non sono sicuro, sfortunatamente.
James,

7

scavare da un lato e curl / ping dall'altro stanno recuperando dati da host diversi:

dig richiede un server DNS - nel tuo caso il tuo host locale (127.0.0.1) - per una voce di database: l'indirizzo IP relativo al nome di dominio completo api.local.pcfdev.io. L'host stesso non deve essere eseguito o addirittura non esistere affatto.

curl / ping tenta di risolvere un indirizzo IP con mDNSResponder o con altri mezzi e infine opera / interagisce con l'host remoto. Se l'host 192.168.11.11 non viene eseguito o non esiste affatto, entrambi falliranno.

Ora, o la voce DNS è errata (api.local.pcfdev.io ha un IP diverso da 192.168.11.11) o la voce DNS è corretta ma l'host 192.168.11.11 non è in esecuzione.


L'aggiunta di -SempreAppendSearchDomains come argomento a / usr / sbin / mDNSResponder in /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist non è consigliata. Invece dovresti aggiungerlo a /Library/Preferences/com.apple.mDNSResponder.plist (fonte:) man mDNSResponder:

Per fare in modo che mDNSResponder venga eseguito con questi argomenti facoltativi all'avvio su OS X 10.11 (El Capitan) e versioni successive, impostare le chiavi booleane AlwaysAppendSearchDomains o NoMulticastAdvertisements su true in /Library/Preferences/com.apple.mDNSResponder.plist e riavviare.

Nel tuo caso non è necessario impostare questa chiave, perché non è la causa del tuo problema.


Dopo aver scavato in VirtualBox, PCF Dev (errore ripetuto con alcune "credenziali errate" che tentano di accedere alla VM) e dnsmasq, consiglio di deviare le query DNS solo su dnsmasq:

  • In Preferenze di Sistema> Rete> Interfaccia> Server DNS rimuovere tutti i server DNS tranne 127.0.0.1 e applicare le modifiche. È inoltre possibile configurare una seconda posizione con una sola configurazione 127.0.0.1 e mantenere il server DNS corrente nell'altra configurazione.
  • aggiungere un file /usr/local/etc/resolv.dnsmasq.conf con il contenuto

    #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
    
  • aggiungere resolv-file=/usr/local/etc/resolv.dnsmasq.confalla riga ~ 46 di /usr/local/etc/dnsmasq.conf
  • aggiungere o spostare address=/.local.pcfdev.io/192.168.11.11in / alla riga ~ 80 di /usr/local/etc/dnsmasq.conf
  • riavvia dnsmasq con:

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

Grazie per il tempo dedicato a rispondere. C'è sicuramente qualcosa da ascoltare 192.168.11.11; la voce DNS pubblica effettiva *.local.pcfdev.ioindica sempre lo stesso IP locale, quindi non appena mi collego alle reti Web curldeve ricevere una risposta da quel server DNS ed è in grado di capire quale indirizzo IP utilizzare.
EngineerBetter_DJ,

1
Sembra curl, pinge gli altri binari che vuole colpire questa cosa si utilizza un mezzo di guardare in alto voci DNS (che non utilizza il dnsmasqserver su localhost), ed nslookupe digstanno utilizzando un altro mezzo. Immagino di dover imparare di più su mDNSResponder!
EngineerBetter_DJ,

@EngineerBetter Hai altre voci in Preferenze di Sistema> Rete> Interfaccia> DNS oltre 127.0.0.1? - Installerò l'intera suite (VBox, PCF Dev ecc.) E controllerò questo ... Qualche configurazione speciale?
klanomath,

Grazie ancora per il tempo dedicato ad aiutarmi in questo. La domanda è stata aggiornata, non avendo ancora fortuna.
EngineerBetter_DJ

0

Mi ci è voluto molto più tempo per risolverlo di quanto avrebbe dovuto. Dopo aver riavviato mDNSResolver decine di volte come raccomandato su altri thread:

sudo killall -HUP mDNSResponder

Finalmente ho provato qualcos'altro. Ho disabilitato il Wi-Fi ed eliminato tutte le mie reti preferite. Quindi ho ristabilito la connessione Wi-Fi e tutto ha funzionato bene:

  1. Menu Apple -> Preferenze di Sistema -> Wi-Fi (a sinistra)
  2. "Disattiva Wi-Fi", quindi seleziona "Avanzate"
  3. Elimina la connessione Wi-Fi con cui stai riscontrando problemi (o tutti, se lo desideri). Fai questo selezionando la rete Wi-Fi che desideri eliminare e premendo "-"
  4. Fai clic su "Applica" e "OK"
  5. Riattiva il Wi-Fi.
  6. Seleziona la tua rete Wi-Fi ed esegui nuovamente l'accesso.

YMMV, ma questo è quello che alla fine ha funzionato per me. Probabilmente avrebbe dovuto essere la prima cosa che ho provato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.