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 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á um exemplo, este 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 consigo 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 esse é um problema local, não um problema no servidor ... mas, se alguém puder me apontar no servidor, acho que vamos descer um ou dois domínios.

    
por atroon 16.12.2009 / 17:52

4 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 é usada por dig e, em seguida, 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 menos 10.5 é possível ter dig dando a você 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 or 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 apareceu)

ping se bem me lembro usa a pesquisa do sistema - mecanismo de resolução tão diferente. /etc/resolv.conf sempre usará os servidores DNS em ordem, enquanto mDNSResponder tenta ser "inteligente", o que pode incomodar você na parte traseira, dependendo da 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 irá mudar. 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 definindo-a como true para o daemon de Launch do mDNSResponder (e recarregue-a conforme necessário).

In Mac OS X v10.6, the default DNS server searching behavior is that when a server does not return a result (returning SERV_FAIL for a query), and other servers are available to query, the server is temporarily disabled in the search order for about thirty seconds. If there is more than one server for the query and all of them have returned SERV_FAIL, the servers will be queried in the order that they were disabled (that is, the server that has been disabled the longest will be used first).

(Fonte: support.apple.com e obrigado ao Yar que colocou isso antes que eu o fizesse.)

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 de um dos dois ou você precisará recarregar o trabalho no launchd para reiniciar o mDNSResponder executando:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
e, em seguida, sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

    
por 16.12.2009 / 18:59
3

Por fim, uma correção graças a 10.6.3 e um pouco de mexer . Basicamente, você modifica o com.apple.mDNSResponder.plist e, em seguida, reinicia o dnsresponder.

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

    
por 30.03.2010 / 00:20
1

Veja o que há 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 depois clique na aba "DNS".

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

dscacheutil -flushcache

Atualizar :

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

dig(1) (and host(1) and nslookup(1)) all directly use the DNS resolver and as such the DNS server ordering as present in /etc/resolv.conf.

However, ping(8) uses the internal Mac OS X name resolution system which uses a "super DNS search client" which uses the results that are listable via scutil --dns to order queries.

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

    
por 16.12.2009 / 18:17
0

A maioria dos aplicativos dependerá do serviço de cliente DNS (bem, eles dependem do sistema operacional que usa o serviço ...) - Eu verificaria novamente se ele ainda está em execução. Talvez até reinicie o serviço quando você tiver problemas.

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

ipconfig /flushdns

Por último, 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.

    
por 16.12.2009 / 18:06