Ich verwende DNSMasq als lokalen DNS-Server, damit ich auflösen kann *.local.pcfdev.io
(wie hier besprochen Using PCF Dev Offline with Mac OS X ). Alles hat funktioniert, als ich die Dinge zum ersten Mal eingerichtet habe.
Ein paar Tage später, nach ein paar Neustarts meines MacBooks, kann ich offline Dinge wie api.local.pcfdev.io
die Verwendung von curl
oder nicht mehr lösen ping
. Tut dig
jedoch 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, -AlwaysAppendSearchDomains
als Argument zu /usr/sbin/mDNSResponder
in hinzuzufügen /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
und den mDNSResponder mit neu zu starten launchctl
, aber ohne Erfolg.
AKTUALISIERUNG 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.
AKTUALISIERUNG 2
Nachdem ich den unten stehenden Vorschlag ausprobiert habe, alle DNS-Server aus den Netzwerkeinstellungen zu entfernen, außer 127.0.0.1
, kann ich nichts lösen. Ich habe es geschafft, einige Debug-Abmeldungen 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 das auch beobachtet, wie in der vorgeschlagenen Antwort erläutert, nslookup
und es wird dig
nichts von protokolliert mDNSResponder
, aber andere Tools ( ping
, curl
) tun es.
Es scheint also, als ob es aus irgendeinem Grund entweder dnsmasq
nicht funktioniert (ich kann eine TCP-Verbindung zu herstellen 127.0.0.1:53
) oder mDNSResponder
es nicht verwendet.
AKTUALISIERUNG 3
etc/resolve.conf
verschwindet, wenn mein WLAN-Adapter aktiv ist, ich aber nicht mit einem Netzwerk verbunden bin. Könnte dies der Grund sein, warum CLI-Tools den lokalen dnsmasq
Server nicht verwenden?
Hatte das gleiche Problem. Ich denke, der lokale DNS-Cache hatte schlechte Daten von meinen vorherigen Tests. Es wurde schnell behoben von:
sudo killall -HUP mDNSResponder
ping
und dig
manchmal unterschiedliche IP-Adressen zurückgegeben (normalerweise mit Split-Horizon-DNS), und dieser Befehl behebt das Problem. Was die eigentliche Ursache ist, bin ich mir leider nicht sicher.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 bezogen auf den FQDN api.local.pcfdev.io. Der Host selbst muss nicht ausgeführt werden oder überhaupt existieren.
curl/ping versuchen, eine IP-Adresse mit mDNSResponder oder auf andere Weise aufzulösen und schließlich auf dem Remote-Host zu arbeiten/mit ihm zu interagieren. Wenn der Host 192.168.11.11 nicht läuft oder gar nicht existiert, schlagen beide fehl.
Nun ist entweder der DNS-Eintrag falsch (api.local.pcfdev.io hat eine andere IP als 192.168.11.11) oder der DNS-Eintrag ist richtig, aber der Host 192.168.11.11 läuft nicht.
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
):
Damit 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 neu.
In Ihrem Fall ist es überhaupt nicht erforderlich, diesen Schlüssel zu setzen, da dies nicht die Ursache Ihres Problems ist.
Nachdem ich mich mit VirtualBox, PCF Dev (das wiederholt mit einigen "falschen Anmeldeinformationen" beim Versuch, sich bei der VM anzumelden, fehlgeschlagen sind) und dnsmasq beschäftigt habe, empfehle ich, DNS-Abfragen nur auf dnsmasq zu übertragen:
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.conf
in Zeile ~46 von /usr/local/etc/dnsmasq.conf hinzuaddress=/.local.pcfdev.io/192.168.11.11
Fügen Sie Zeile ~80 von /usr/local/etc/dnsmasq.conf hinzu oder verschieben Sie sieNeustart von dnsmasq mit:
sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq
192.168.11.11
; Der eigentliche öffentliche DNS-Eintrag *.local.pcfdev.io
verweist immer auf dieselbe lokale IP. Sobald ich mich also mit den Infowebs verbinde, curl
muss ich eine Antwort von diesem DNS-Server erhalten und herausfinden, welche IP-Adresse verwendet werden soll.curl
, ping
, und die anderen Binärdateien, die ich auf dieses Ding treffen möchte, ein Mittel zum Nachschlagen von DNS-Einträgen verwenden (das nicht den dnsmasq
Server auf localhost verwendet), und nslookup
ein dig
anderes Mittel verwenden. Ich denke, ich muss mehr über mDNSResponder erfahren!Ich habe viel länger gebraucht, um das zu lösen, als es hätte tun sollen. Nach dem Neustart von mDNSResolver dutzende Male, wie in anderen Threads empfohlen:
sudo killall -HUP mDNSResponder
Ich habe endlich mal was anderes probiert. Ich habe Wi-Fi deaktiviert und alle meine bevorzugten Netzwerke gelöscht. Dann habe ich die Wi-Fi-Verbindung wiederhergestellt und alles funktionierte gut:
YMMV, aber das hat endlich für mich funktioniert. Es hätte wahrscheinlich das erste sein sollen, was ich probiert habe.
Mango
EngineerBetter_DJ
Mango
jamshid
Fahrrad
curl
oderwget
sie abrufen und sehen, was wirklich passiert, um den Fehler zu verursachen, der nicht behoben werden konnte.