DNS-Auflösung schlägt für Ping und Curl fehl, aber nicht für Dig

11

Ich verwende DNSMasq als lokalen DNS-Server, damit ich das Problem beheben kann *.local.pcfdev.io(wie hier beschrieben. Verwenden von PCF Dev Offline mit Mac OS X ). Alles hat funktioniert, als ich die Dinge zum ersten Mal eingerichtet habe.

Ein paar Tage später, nach einigen Neustarts meines MacBook, kann ich im Offline-Modus Dinge wie die api.local.pcfdev.ioVerwendung von curloder nicht mehr lösen ping. Tut digjedoch das Richtige.

$ 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

Ich habe versucht, -AlwaysAppendSearchDomainsals Argument zu /usr/sbin/mDNSResponderin hinzuzufügen /System/Library/LaunchDaemons/com.apple.mDNSResponder.plistund den mDNSResponder mit neu zu starten launchctl, aber ohne Erfolg.


UPDATE 1

Auf der richtigen lokalen IP ist definitiv etwas zu hören:

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

UPDATE 2

Nachdem 127.0.0.1ich den folgenden Vorschlag ausprobiert habe, alle DNS-Server aus den Netzwerkeinstellungen zu entfernen , kann ich nichts auflösen. Ich habe es geschafft, eine Debug-Abmeldung zu erhalten 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)

Ich habe dies auch beobachtet, wie in der vorgeschlagenen Antwort erläutert, nslookupund dignicht dazu geführt, dass etwas protokolliert wird mDNSResponder, sondern andere Tools ( ping, curl).

Aus irgendeinem Grund dnsmasqfunktioniert es entweder nicht (ich kann eine TCP-Verbindung herstellen 127.0.0.1:53) oder es mDNSResponderwird nicht verwendet.


UPDATE 3

etc/resolve.confhört auf zu existieren, wenn mein WLAN-Adapter aktiv ist, aber ich bin nicht mit einem Netzwerk verbunden. Könnte dies der Grund sein, warum CLI-Tools den lokalen dnsmasqServer nicht verwenden ?

EngineerBetter_DJ
quelle
Ist Ihr Netzwerkadapter zufällig ausgefallen? Wenn Sie in den Systemeinstellungen zu "Netzwerk" gehen, wird neben dem Adapter, für den dnsmasq konfiguriert ist, ein grüner Punkt angezeigt?
Mango
Nun, ich bin in einem Zug ohne Wi-Fi, also vermutlich.
EngineerBetter_DJ
1
Ist der WLAN-Adapter speziell ausgeschaltet? Wenn ja, versuchen Sie es bitte erneut mit eingeschaltetem WLAN-Adapter (auch wenn dieser möglicherweise nicht mit dem Internet verbunden ist). Für den Aufbau zu arbeiten, muß dnsmasq ein DNS - Server auf der Netzwerk - Schnittstelle sein im Einsatz .
Mango
Vielen Dank, dass Sie versucht haben, dies aufzuspüren. Ich kämpfe auch damit, verstehe nicht, warum "curl foo: 8989" keinen Host finden kann, aber "dig foo" kann. Ja, "Curl 172.20.0.17:8989" funktioniert einwandfrei. Wie Sie habe ich Wi-Fi-Netzwerk-DNS auf 127.0.0.1 eingestellt (ein DNSMASQ, der in einem Docker-Container ausgeführt wird). FWIW In meiner aktuellen Situation ist das Problem spezifisch für das WLAN-Netzwerk, mit dem ich eine Verbindung herstelle. Funktioniert einwandfrei auf meinem persönlichen Hotspot. Das Problem liegt in einem Coffeeshop-WLAN.
Jamshid
Ich habe die fraglichen Programme nicht rückentwickelt, aber ich gehe davon aus, dass sie völlig andere DNS-Auflösungscodebasen aufrufen, und deshalb sehen Sie einen Bruch - einige zeigen lokal, andere nicht. Ich würde graben wahrscheinlich in curloder wgetoder sie in Instrumente erhalten / Profiler / Debugger und sehen , was wirklich passiert das könnte verursachen keine Fehler beheben.
bmike

Antworten:

12

Hatte das gleiche Problem. Ich denke, der lokale DNS-Cache hatte schlechte Daten aus meinen vorherigen Tests. Es wurde schnell behoben durch:

sudo killall -HUP mDNSResponder
cmcginty
quelle
1
Ich habe das bemerkt pingund digmanchmal unterschiedliche IP-Adressen zurückgegeben (normalerweise mit Split-Horizon-DNS), und dieser Befehl behebt das Problem. Was die Grundursache ist, bin ich mir leider nicht sicher.
James
7

dig einerseits und curl / ping andererseits rufen Daten von verschiedenen Hosts ab:

dig fragt einen DNS-Server - in Ihrem Fall Ihren localhost (127.0.0.1) - nach einem Datenbankeintrag ab: Die IP-Adresse des FQDN api.local.pcfdev.io. Der Host selbst muss nicht ausgeführt werden oder überhaupt nicht existieren.

Curl / Ping versuchen, eine IP-Adresse mit mDNSResponder oder auf andere Weise aufzulösen und schließlich mit dem Remote-Host zu arbeiten / zu interagieren. Wenn der Host 192.168.11.11 nicht ausgeführt wird oder überhaupt nicht vorhanden ist, schlagen beide fehl.

Jetzt ist entweder der DNS-Eintrag falsch (api.local.pcfdev.io hat eine andere IP als 192.168.11.11) oder der DNS-Eintrag ist korrekt, aber der Host 192.168.11.11 wird nicht ausgeführt.


Das Hinzufügen von -AlwaysAppendSearchDomains als Argument zu / usr / sbin / mDNSResponder in /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist wird nicht empfohlen. Stattdessen sollten Sie es zu /Library/Preferences/com.apple.mDNSResponder.plist hinzufügen (Quelle :) man mDNSResponder:

Um zu veranlassen, dass mDNSResponder beim Start unter OS X 10.11 (El Capitan) und höher mit diesen optionalen Argumenten ausgeführt wird, setzen Sie die booleschen Schlüssel AlwaysAppendSearchDomains oder NoMulticastAdvertisements in /Library/Preferences/com.apple.mDNSResponder.plist auf true und starten Sie den Computer neu.

In Ihrem Fall ist es überhaupt nicht erforderlich, diesen Schlüssel festzulegen, da dies nicht die Ursache für Ihr Problem ist.


Nach dem Einstieg in VirtualBox, PCF Dev (wiederholt fehlgeschlagen mit einigen "falschen Anmeldeinformationen" beim Versuch, sich bei der VM anzumelden) und dnsmasq empfehle ich, DNS-Abfragen nur an dnsmasq zu übertragen:

  • Entfernen Sie in den Systemeinstellungen> Netzwerk> Schnittstelle> DNS-Server alle DNS-Server mit Ausnahme von 127.0.0.1 und übernehmen Sie die Änderungen. Sie können auch einen zweiten Standort mit einem Setup nur für 127.0.0.1 konfigurieren und Ihren aktuellen DNS-Server in der anderen Konfiguration belassen.
  • Fügen Sie eine Datei /usr/local/etc/resolv.dnsmasq.conf mit dem Inhalt hinzu

    #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
    
  • resolv-file=/usr/local/etc/resolv.dnsmasq.confFügen Sie in Zeile ~ 46 von /usr/local/etc/dnsmasq.conf hinzu
  • Hinzufügen oder Verschieben address=/.local.pcfdev.io/192.168.11.11in / zu Zeile ~ 80 von /usr/local/etc/dnsmasq.conf
  • Starten Sie dnsmasq neu mit:

    sudo launchctl stop homebrew.mxcl.dnsmasq
    sudo launchctl start homebrew.mxcl.dnsmasq
    
Klanomath
quelle
Vielen Dank, dass Sie sich die Zeit genommen haben, um zu antworten. Es hört definitiv etwas zu 192.168.11.11; Der tatsächliche öffentliche DNS-Eintrag für *.local.pcfdev.ioverweist immer auf dieselbe lokale IP-Adresse. Sobald ich eine Verbindung zu den Inforwebs herstelle, curlmuss dieser DNS-Server eine Antwort erhalten und kann herausfinden, welche IP-Adresse verwendet werden soll.
EngineerBetter_DJ
1
Es scheint so curl, pingund die anderen Binärdateien, die ich auf dieses Ding treffen möchte, verwenden eine Methode zum Nachschlagen von DNS-Einträgen (die den dnsmasqServer auf localhost nicht verwendet) nslookupund digverwenden eine andere Methode. Ich muss wohl mehr über mDNSResponder erfahren!
EngineerBetter_DJ
@EngineerBetter Haben Sie andere Einträge in den Systemeinstellungen> Netzwerk> Schnittstelle> DNS als 127.0.0.1? - Ich werde die gesamte Suite (VBox, PCF Dev usw.) installieren und dies überprüfen ... Irgendeine spezielle Konfiguration?
Klanomath
Nochmals vielen Dank, dass Sie sich die Zeit genommen haben, mir dabei zu helfen. Die Frage wurde aktualisiert und hat immer noch kein Glück.
EngineerBetter_DJ
0

Ich habe viel länger gebraucht, um das zu lösen, als es hätte sein sollen. Nach dem dutzende Male Neustart von mDNSResolver, wie in anderen Threads empfohlen:

sudo killall -HUP mDNSResponder

Ich habe endlich etwas anderes ausprobiert. Ich habe Wi-Fi deaktiviert und alle meine bevorzugten Netzwerke gelöscht. Dann habe ich die Wi-Fi-Verbindung wiederhergestellt und alles hat gut funktioniert:

  1. Apple-Menü -> Systemeinstellungen -> Wi-Fi (links)
  2. 'Wi-Fi ausschalten' und dann 'Erweitert' auswählen
  3. Löschen Sie die Wi-Fi-Verbindung, mit der Sie Probleme haben (oder alle, wenn Sie möchten). Wählen Sie dazu das zu löschende Wi-Fi-Netzwerk aus und drücken Sie "-"
  4. Klicken Sie auf "Übernehmen" und "OK".
  5. Schalten Sie Wi-Fi wieder ein.
  6. Wählen Sie Ihr Wi-Fi-Netzwerk aus und melden Sie sich erneut an.

YMMV, aber das hat endlich für mich funktioniert. Es hätte wahrscheinlich das erste sein sollen, was ich versucht habe.

Joel Griffiths
quelle