Używam DNSMasq jako lokalnego serwera DNS, więc mogę to rozwiązać *.local.pcfdev.io
(jak omówiono tutaj Korzystanie z PCF Dev Offline w systemie Mac OS X ). Wszystko działało, kiedy pierwszy raz konfigurowałem.
Kilka dni później, po kilku restartach mojego MacBooka, w trybie offline nie mogę już rozwiązać takich problemów, jak api.local.pcfdev.io
używanie curl
lub ping
. Jednak dig
robi to dobrze.
$ 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
Próbowałem dodając -AlwaysAppendSearchDomains
jako argument /usr/sbin/mDNSResponder
w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
i ponownym uruchomieniu mDNSResponder z launchctl
, ale bez skutku.
AKTUALIZACJA 1
Z pewnością lokalny adres IP nasłuchuje:
$ 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.
AKTUALIZACJA 2
Po wypróbowaniu poniższej sugestii usunięcia wszystkich serwerów DNS z Preferencji sieciowych, z wyjątkiem tego 127.0.0.1
, że nic nie mogę rozwiązać. Udało mi się wylogować z 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)
Zauważyłem również, jak wyjaśniono w proponowanej odpowiedzi, nslookup
i dig
nie powodują rejestrowania niczego mDNSResponder
, ale robią to inne narzędzia ( ping
, curl
).
Wygląda więc na to, że z jakiegokolwiek powodu albo dnsmasq
nie działa (mogę nawiązać połączenie TCP 127.0.0.1:53
), albo go mDNSResponder
nie używa.
AKTUALIZACJA 3
etc/resolve.conf
przestaje istnieć, gdy mój adapter Wi-Fi jest aktywny, ale nie mam połączenia z siecią. Czy to może dlatego narzędzia CLI nie używają lokalnego dnsmasq
serwera?
curl
lubwget
lub uzyskać je w instrumenty / profiler / debugger i zobaczyć, co się naprawdę dzieje, aby spowodować błąd nie mógł rozwiązać.Odpowiedzi:
Miałem ten sam problem. Myślę, że lokalna pamięć podręczna DNS miała złe dane z moich poprzednich testów. Zostało to szybko naprawione przez:
źródło
ping
idig
czasami zwracam różne adresy IP (zwykle ze DNS z podziałem horyzontu) i to polecenie to naprawia. Co nie jest podstawową przyczyną, nie jestem pewien.kop z jednej strony, a curl / ping z drugiej strony pobierają dane z różnych hostów:
dig wysyła zapytanie do serwera DNS - w twoim przypadku localhost (127.0.0.1) - o wpis w bazie danych: adres IP związany z FQDN api.local.pcfdev.io. Sam host nie musi wcale działać ani nawet istnieć.
curl / ping spróbuj rozwiązać adres IP za pomocą mDNSResponder lub w inny sposób, a na końcu działać na / współpracować ze zdalnym hostem. Jeśli host 192.168.11.11 nie działa lub w ogóle nie istnieje, oba kończą się niepowodzeniem.
Teraz wpis DNS jest nieprawidłowy (api.local.pcfdev.io ma inny adres IP niż 192.168.11.11) lub wpis DNS jest poprawny, ale host 192.168.11.11 nie jest uruchomiony.
Dodanie -AlwaysAppendSearchDomains jako argumentu do / usr / sbin / mDNSResponder w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist nie jest zalecane. Zamiast tego powinieneś dodać go do /Library/Preferences/com.apple.mDNSResponder.plist (źródło:)
man mDNSResponder
:W twoim przypadku nie ma potrzeby ustawiania tego klucza, ponieważ nie jest to przyczyną twojego problemu.
Po wkopaniu się w VirtualBox, PCF Dev (powtarzające się błędy z kilkoma „błędnymi poświadczeniami” próbującymi zalogować się do maszyny wirtualnej) i dnsmasq Polecam przekazanie zapytań DNS tylko do dnsmasq:
dodaj plik /usr/local/etc/resolv.dnsmasq.conf z zawartością
resolv-file=/usr/local/etc/resolv.dnsmasq.conf
w linii ~ 46 pliku /usr/local/etc/dnsmasq.confaddress=/.local.pcfdev.io/192.168.11.11
w / do linii ~ 80 pliku /usr/local/etc/dnsmasq.confuruchom ponownie dnsmasq za pomocą:
źródło
192.168.11.11
; rzeczywisty publiczny wpis DNS dla*.local.pcfdev.io
zawsze wskazuje na ten sam lokalny adres IP, więc gdy tylko połączę się z informacjami,curl
musi uzyskać odpowiedź z tego serwera DNS i być w stanie dowiedzieć się, jakiego adresu IP użyć.curl
, żeping
i inne pliki binarne, na które chcę trafić, używają jednego sposobu wyszukiwania wpisów DNS (który nie używadnsmasq
serwera na localhost)nslookup
idig
używają innych środków. Chyba muszę dowiedzieć się więcej o mDNSResponder!Rozwiązanie tego zajęło mi znacznie więcej czasu, niż powinno. Po kilkakrotnym ponownym uruchomieniu mDNSResolver zgodnie z zaleceniami dla innych wątków:
W końcu spróbowałem czegoś innego. Wyłączyłem Wi-Fi i usunąłem wszystkie preferowane sieci. Następnie przywróciłem połączenie Wi-Fi i wszystko działało dobrze:
YMMV, ale to w końcu dla mnie zadziałało. Prawdopodobnie powinna to być pierwsza rzecz, której spróbowałem.
źródło