Estou executando o DNSMasq como um servidor DNS local, para que eu possa resolver *.local.pcfdev.io
(conforme discutido aqui Usando o PCF Dev Offline no Mac OS X ). Tudo funcionou quando eu configurei as coisas.
Alguns dias depois, após algumas reinicializações do meu MacBook, enquanto estava offline, não consigo mais resolver coisas como api.local.pcfdev.io
usar curl
ou ping
. No entanto, dig
faz a coisa certa.
$ 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
Eu tentei adicionar -AlwaysAppendSearchDomains
como um argumento para /usr/sbin/mDNSResponder
em /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
e reiniciado o mDNSResponder com launchctl
, mas sem sucesso.
ATUALIZAÇÃO 1
Definitivamente, há algo que escuta no IP local correto:
$ 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.
ATUALIZAÇÃO 2
Depois de tentar a sugestão abaixo de remover todos os servidores DNS das Preferências de rede 127.0.0.1
, exceto , não consigo resolver nada. Eu consegui obter algum log de depuração 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)
Também observei isso, conforme explicado na resposta proposta, nslookup
e dig
não faço com que nada seja registrado mDNSResponder
, mas outras ferramentas ( ping
, curl
) fazem.
Portanto, parece que, por qualquer motivo, dnsmasq
não está funcionando (eu posso estabelecer uma conexão TCP 127.0.0.1:53
) ou mDNSResponder
não está usando.
ATUALIZAÇÃO 3
etc/resolve.conf
deixa de existir quando meu adaptador wifi está ativo, mas não estou conectado a uma rede. Pode ser por isso que as ferramentas da CLI não usam o dnsmasq
servidor local ?
curl
ouwget
ou obtê-los em instrumentos / profiler / depurador e ver o que realmente está acontecendo para causar a não podia erro determinação.Respostas:
Teve esse mesmo problema. Eu acho que o cache DNS local tinha dados ruins dos meus testes anteriores. Foi rapidamente corrigido por:
fonte
ping
edig
às vezes retornar diferentes endereços IP (geralmente com DNS split horizon) e este comando resolve o problema. Qual é a causa raiz, não tenho certeza, infelizmente.dig, por um lado, e curl / ping, por outro lado, estão recuperando dados de diferentes hosts:
dig consulta um servidor DNS - no seu caso, seu host local (127.0.0.1) - para uma entrada no banco de dados: o endereço IP relacionado ao FQDN api.local.pcfdev.io. O host em si não precisa ser executado ou sequer existir.
curl / ping tenta resolver um endereço IP com o mDNSResponder ou por outros meios e finalmente opera / interage com o host remoto. Se o host 192.168.11.11 não for executado ou não existir, ambos falharão.
Agora, a entrada DNS está incorreta (api.local.pcfdev.io possui outro IP que não seja 192.168.11.11) ou a entrada DNS está correta, mas o host 192.168.11.11 não está sendo executado.
Não é recomendável adicionar -AlwaysAppendSearchDomains como argumento em / usr / sbin / mDNSResponder em /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist . Em vez disso, você deve adicioná-lo a /Library/Preferences/com.apple.mDNSResponder.plist (fonte:)
man mDNSResponder
:No seu caso, não é necessário definir essa chave, porque não é a causa do seu problema.
Depois de pesquisar no VirtualBox, o PCF Dev (falhando repetidamente com algumas "credenciais incorretas" tentando fazer login na VM) e o dnsmasq, recomendo que você devolva as consultas DNS apenas ao dnsmasq:
adicione um arquivo /usr/local/etc/resolv.dnsmasq.conf com o conteúdo
resolv-file=/usr/local/etc/resolv.dnsmasq.conf
na linha ~ 46 do /usr/local/etc/dnsmasq.confaddress=/.local.pcfdev.io/192.168.11.11
na linha ~ 80 do /usr/local/etc/dnsmasq.confreinicie o dnsmasq com:
fonte
192.168.11.11
; a entrada real do DNS público*.local.pcfdev.io
sempre aponta para o mesmo IP local, assim que eu me conectar ao inforwebscurl
deve receber uma resposta desse servidor DNS e é capaz de descobrir qual endereço IP usar.curl
,ping
e os outros binários em que quero chegar a esse ponto estão usando um meio de procurar entradas DNS (que não está usando odnsmasq
servidor no host local)nslookup
edig
estão usando outro meio. Acho que preciso aprender mais sobre o mDNSResponder!Levei muito mais tempo para resolver isso do que deveria. Após reiniciar o mDNSResolver dezenas de vezes, conforme recomendado em outros threads:
Finalmente tentei outra coisa. Desativei o Wi-Fi e excluí todas as minhas redes preferidas. Restabeleci a conexão Wi-Fi e tudo funcionou bem:
YMMV, mas é isso que finalmente funcionou para mim. Provavelmente deveria ter sido a primeira coisa que tentei.
fonte