Falha na resolução de DNS para ping e curl, mas não para escavação

11

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.iousar curlou ping. No entanto, digfaz 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 -AlwaysAppendSearchDomainscomo um argumento para /usr/sbin/mDNSResponderem /System/Library/LaunchDaemons/com.apple.mDNSResponder.pliste 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, nslookupe dignão faço com que nada seja registrado mDNSResponder, mas outras ferramentas ( ping, curl) fazem.

Portanto, parece que, por qualquer motivo, dnsmasqnão está funcionando (eu posso estabelecer uma conexão TCP 127.0.0.1:53) ou mDNSRespondernão está usando.


ATUALIZAÇÃO 3

etc/resolve.confdeixa 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 dnsmasqservidor local ?

EngineerBetter_DJ
fonte
Seu adaptador de rede está desativado por acaso? Se você for para 'Rede' nas Preferências do Sistema, existe um ponto verde próximo ao adaptador no qual o dnsmasq está configurado para uso?
mango
Bem, estou em um trem sem wi-fi, presumivelmente.
EngineerBetter_DJ
1
Especificamente, o adaptador wifi está desligado? Nesse caso, tente novamente com o adaptador wifi ativado (mesmo que ele não esteja realmente conectado à Internet). Para que a instalação funcione, o dnsmasq precisa ser um servidor DNS na interface de rede em uso .
mango
Obrigado por tentar rastrear isso. Também estou lutando com isso, não entendo por que "curl foo: 8989" não consegue encontrar o host, mas "dig foo" pode. Sim, "enrolar 172.20.0.17:8989" funciona bem. Como você, tenho o DNS da rede Wi-Fi definido como 127.0.0.1 (um dnsmasq em execução em um contêiner de docker). FWIW na minha situação atual, o problema é específico da rede wifi à qual me conecto - funciona bem no meu hotspot pessoal, o problema está em um wifi de coffeeshop.
jamshid
Não fiz a engenharia reversa dos programas em questão, mas minha expectativa é que eles estejam chamando bases de códigos de resolução de DNS totalmente diferentes e é por isso que você está vendo falhas - algumas estão apontando localmente, outras não. Eu provavelmente cavar curlou wgetou obtê-los em instrumentos / profiler / depurador e ver o que realmente está acontecendo para causar a não podia erro determinação.
bmike

Respostas:

12

Teve esse mesmo problema. Eu acho que o cache DNS local tinha dados ruins dos meus testes anteriores. Foi rapidamente corrigido por:

sudo killall -HUP mDNSResponder
cmcginty
fonte
1
Tenho notado que pinge digà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.
James
7

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:

Para fazer com que o mDNSResponder execute com esses argumentos opcionais quando for iniciado no OS X 10.11 (El Capitan) e posterior, defina as chaves booleanas AlwaysAppendSearchDomains ou NoMulticastAdvertisements como true em /Library/Preferences/com.apple.mDNSResponder.plist e reinicialize.

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:

  • Em Preferências do Sistema> Rede> Interface> servidor DNS, remova todos os servidores DNS, exceto 127.0.0.1, e aplique as alterações. Você também pode configurar um segundo local com uma configuração somente 127.0.0.1 e manter o servidor DNS atual na outra configuração.
  • adicione um arquivo /usr/local/etc/resolv.dnsmasq.conf com o conteúdo

    #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
    
  • adicione resolv-file=/usr/local/etc/resolv.dnsmasq.confna linha ~ 46 do /usr/local/etc/dnsmasq.conf
  • adicione ou mova address=/.local.pcfdev.io/192.168.11.11na linha ~ 80 do /usr/local/etc/dnsmasq.conf
  • reinicie o dnsmasq com:

    sudo launchctl stop homebrew.mxcl.dnsmasq
    sudo launchctl start homebrew.mxcl.dnsmasq
    
Klanomath
fonte
Obrigado por reservar um tempo para responder. Definitivamente, há algo ouvindo 192.168.11.11; a entrada real do DNS público *.local.pcfdev.iosempre aponta para o mesmo IP local, assim que eu me conectar ao inforwebs curldeve receber uma resposta desse servidor DNS e é capaz de descobrir qual endereço IP usar.
EngineerBetter_DJ
1
Parece que curl, pinge 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 o dnsmasqservidor no host local) nslookupe digestão usando outro meio. Acho que preciso aprender mais sobre o mDNSResponder!
EngineerBetter_DJ
@EngineerBetter Você tem outras entradas em Preferências do Sistema> Rede> Interface> DNS que 127.0.0.1? - Vou instalar a suíte inteira (VBox, PCF Dev etc.) e verificar isso ... Alguma configuração especial?
Klanomath 6/09/16
Obrigado novamente por dedicar um tempo para me ajudar com isso. A pergunta foi atualizada, ainda sem sorte.
EngineerBetter_DJ
0

Levei muito mais tempo para resolver isso do que deveria. Após reiniciar o mDNSResolver dezenas de vezes, conforme recomendado em outros threads:

sudo killall -HUP mDNSResponder

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:

  1. Menu Apple -> Preferências do sistema -> Wi-Fi (à esquerda)
  2. 'Desligue o Wi-Fi' e selecione 'Avançado'
  3. Exclua a conexão Wi-Fi com a qual está tendo problemas (ou todas, se desejar). Faça isso selecionando a rede Wi-Fi que deseja excluir e pressionando "-"
  4. Clique em 'Aplicar' e 'OK'
  5. Ligue o Wi-Fi novamente.
  6. Selecione sua rede Wi-Fi e efetue login novamente.

YMMV, mas é isso que finalmente funcionou para mim. Provavelmente deveria ter sido a primeira coisa que tentei.

Joel Griffiths
fonte