Falha na resolução de DNS para ping e curl, mas não para escavação
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.
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.
Definitivamente, há algo que escuta no IP local correto:
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:
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.
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 ?
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?
Bem, estou em um trem sem wi-fi, presumivelmente.
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 .
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.
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.
Teve esse mesmo problema. Eu acho que o cache DNS local tinha dados ruins dos meus testes anteriores. Foi rapidamente corrigido por:
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.
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
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:
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.
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 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.
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:
Menu Apple -> Preferências do sistema -> Wi-Fi (à esquerda)
'Desligue o Wi-Fi' e selecione 'Avançado'
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 "-"
Clique em 'Aplicar' e 'OK'
Ligue o Wi-Fi novamente.
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.