Como o DNS é usado por processos individuais?

6

Ao resolver FQDNs ou nomes de máquinas para endereços IP em minha rede local (mycompany.internal), posso usar o dig na linha de comando (linux / mac) ou nslookup (windows) para consultar o servidor configurado e obter uma resposta. Mas tentar inserir o FQDN ou mesmo apenas o nome da máquina em um comando ping ou em um navegador da Web resulta em erros de 'Host Desconhecido' ou DNS. Aqui está uma amostra, esta do Mac:

mac:~ atroon$ dig server.mycompany.internal


; <<>> DiG 9.6.0-APPLE-P2 <<>>
server.mycompany.internal ;; global
options: +cmd ;; Got answer: ;;
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5219 ;; flags: qr aa rd
ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0,
ADDITIONAL: 0

;; QUESTION SECTION:
;server.mycompany.internal.  IN A

;; ANSWER SECTION:
server.mycompany.internal. 1200 IN A 172.16.254.36

;; Query time: 0 msec ;; SERVER:
172.16.254.8#53(172.16.254.8) ;; WHEN: Wed Dec 16 11:39:15 2009 ;; MSG SIZE 
rcvd: 55

mac:~ atroon$ ping server.mycompany.internal<br>
ping: cannot resolve server.mycompany.internal: Unknown host

Eu não posso, para a vida de mim, descobrir isso. O servidor DNS é uma caixa do SBS 2003 que lida com o AD, algum arquivo / impressão, etc., para uma rede de pequena empresa. Este problema acontece comigo cerca de três vezes por semana, e quando estou conectado à rede local diretamente, o mesmo switch que o servidor mesmo. Eu posso fazer qualquer conexão que eu quiser com endereços IP, eu simplesmente não posso fazer o DNS funcionar. Além disso, ao mesmo tempo que estou passando por isso, outros usuários estão bem, o que me faz pensar que é um problema no meu Mac. Mas que tipo de problema? Como pode cavar enviar uma consulta e obter uma resposta, e ping dizer "host desconhecido"?

Estou postando aqui vs. serverfault porque acho que isso é um problema local, não um problema no servidor ... mas se alguém puder me apontar para o servidor, acho que nós vamos descer a rua um domínio ou dois.

atroon
fonte
Qual versão do Mac OS X? Diferentes versões tiveram métodos diferentes para limpar o cache DNS. (por exemplo, 10,4 tinha lookupd, 10.5 DNS foi armazenado com informações de serviços de diretório, enquanto 10.6 é gerenciado através de mDNSResponder para a maioria dos itens.
Chealion

Respostas:

12

Dependendo de qual versão do Mac OS X você está usando, a forma como o DNS é tratado pelo sistema mudou.

Essencialmente, existem dois mecanismos de resolução de DNS no Mac OS X. A abordagem padrão do UNIX ( /etc/resolv.conf ) que é usado por dig e então a abordagem usada pelo resto do sistema.

No Mac OS X 10.4 e 10.5, as duas abordagens estavam muito mais ligadas; Um refrescante tendia a refrescar os dois. No entanto, em 10.6 e em muito menor grau 10.5 é possível ter dig lhe dá o valor correto enquanto o mecanismo de resolução do sistema ainda tem um valor ruim.

Para limpar o cache DNS de cada uma das versões do Mac OS X:

  • 10.4: lookupd -flushcache
  • 10,5: dscacheutil -flushcache
  • 10,6: sudo dscacheutil -flushcache ou sudo killall -HUP mDNSResponder (O primeiro comando deve executar o segundo comando para você agora, mas nas versões anteriores do 10.6 ele não aparecia)

ping se bem me lembro usa a pesquisa do sistema - tão diferente mecanismo de resolução. /etc/resolv.conf sempre usará os servidores DNS em ordem, enquanto mDNSResponder tenta ser "inteligente", que pode mordê-lo na parte traseira, dependendo da sua configuração.

Além disso, você tem vários servidores DNS especificados no seu Mac e / ou via DHCP? O Snow Leopard introduziu um comportamento diferente (bug?) Onde a ordem dos servidores DNS será alterada. Isso atrapalha o DNS dividido (internamente, você usa um IP, mas externamente um DNS diferente), pois às vezes ele pára de perguntar primeiro ao servidor DNS interno antes de solicitar o segundo servidor (externo desta vez) na fila. É supostamente um método para contatar o servidor DNS mais rápido para evitar atrasos relacionados ao DNS. A correção mais fácil anterior a 10.6.3 é servir apenas o servidor DNS interno via DHCP e verificar se as configurações de encaminhamento no servidor DNS estão definidas de acordo.

Agora, a partir de 10.6.3, é possível dizer ao mDNSResponder para sempre usar a ordem correta e não tentar otimizar os tempos de solicitação de DNS. Você pode fazer isso adicionando a chave StrictUnicastOrdering e configurando-o como true para o daemon de Launch do mDNSResponder (e recarregue-o conforme necessário).

No Mac OS X 10.6, o comportamento de pesquisa do servidor DNS padrão é que quando um servidor não retorna um resultado (retornando SERV_FAIL para uma consulta) e outros servidores estão disponíveis para consulta, o servidor é temporariamente desativado na ordem de pesquisa para cerca de trinta segundos. Se houver mais de um servidor para a consulta e todos eles retornarem SERV_FAIL, os servidores serão consultados na ordem em que foram desativados (ou seja, o servidor que foi desativado por mais tempo será usado primeiro).

(Fonte: support.apple.com e obrigado a Yar, que colocou isso antes de mim.)

Você pode automatizar isso (um pouco mais rápido e mais fácil que os comandos da Apple) executando os seguintes comandos:

sudo /usr/libexec/PlistBuddy -c "Add :StrictUnicastOrdering bool true" /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

e inverta-o executando:

sudo /usr/libexec/PlistBuddy -c "Delete :StrictUnicastOrdering" com.apple.mDNSResponder.plist

Depois disso, você precisará recarregar a tarefa no launchd para reiniciar o mDNSResponder executando:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
e depois
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Chealion
fonte
Atualização do Stupid Snow Leopard .... Eu juro que isso quebrou mais coisas. O encaminhamento é realmente configurado corretamente, mas havia outra string de servidor DNS proveniente do servidor DHCP adicionado há muito tempo com um servidor DNS do ISP. Quando o DHCP foi renovado, ele apareceu em /etc/resolv.conf e o problema voltou. Excluir isso no servidor corrigiu o problema. Então, foi um problema do cliente com uma solução de servidor graças ao Snow Leopard. Muito bom pegar, obrigado.
atroon
@atroon - Demorei 2 ou 3 dias para descobrir por que meu computador de teste Snow Leopard ocasionalmente enlouquecia quando chegava ao DNS. É uma excelente mudança para usuários domésticos, mas não funciona bem com o DNS dividido. Queria que fosse mais amplamente documentado.
Chealion
Então, quando sua situação de DNS der errado, você apenas reinicia o nDNSResponder, ou isso não ajuda?
Dan Rosenstark
@ Yar: Às vezes isso ajuda, mas não corrige a raiz do problema: se você precisar de DNS interno, não deverá ter um servidor DNS externo nas configurações (via DHCP ou manualmente).
Chealion
confira minha nova resposta abaixo. Embora eu tenha certeza que você já sabe disso.
Dan Rosenstark
3

Finalmente, uma correção graças a 10.6.3 e um pouco brincando . Basicamente você modifica o com.apple.mDNSResponder.plist e reinicie o dnsresponder.

Eu posso estar errado, mas acho que as instruções estão fora, e devo dizer sudo cp onde eles dizem sudo mv no inicio.

Dan Rosenstark
fonte
1

Olhe o que está em /etc/resolv.conf para ver quais servidores de nomes seu Mac está usando. Você também pode adicionar servidores de nomes nas preferências de rede - escolha o adaptador que você está usando, clique no botão "Avançado ..." e, em seguida, clique na guia "DNS".

Em um mac, a ferramenta de linha de comando para liberar o cache do DNS é:

dscacheutil -flushcache

Atualizar :

Eu encontrei muitas coisas boas em esta discussão em discussions.apple.com . Por exemplo:

dig (1) (e host (1) e nslookup (1))   todos usam diretamente o resolvedor DNS e   como tal, o servidor DNS ordenando como   presente em /etc/resolv.conf.

No entanto, ping (8) usa o Mac interno   Sistema de resolução de nomes do OS X que usa   um "super DNS search client" que usa   os resultados que podem ser listados via   scutil --dns para ordenar consultas.

Você pode ver o que foi armazenado em cache executando sudo killall -INFO mDNSResponder e depois olhando /var/log/system.log

Doug Harris
fonte
Eu tentei isso no outro dia (muitas vezes) sem sucesso. Meu resolv.conf tem o aviso padrão sobre gerado automaticamente e corresponde às configurações de rede nas Preferências do Sistema. Tem o servidor de nomes 172.16.254.8.
atroon
0

A maioria dos aplicativos dependerá do serviço de cliente DNS (bem, eles contam com o sistema operacional que usa o serviço ...) - Eu iria verificar que ainda está em execução. Talvez até reinicie o serviço quando você tiver os problemas.

Você também pode tentar liberar seu cache de DNS, mas esteja ciente de que alguns aplicativos (navegadores da web em particular) armazenarão em cache as entradas de DNS internamente, portanto, talvez seja necessário reiniciá-los também.

ipconfig /flushdns

Por fim, há uma chance de malware fazer com que as coisas fiquem descontroladas. Muitos malwares sequestram DNS ou determinados hosts. Provavelmente vale a pena verificar isso também.

Goyuix
fonte