Comment le DNS est-il utilisé par les processus individuels?

Lors de la résolution de FQDN ou des noms de machine à des adresses IP sur mon réseau local (mycompany.internal), je peux utiliser creuser sur la ligne de commande (linux / mac) ou nslookup (windows) pour interroger le serveur configuré et obtenir une réponse. Mais essayer d'entrer dans le FQDN ou même simplement le nom de la machine dans une commande ping ou dans un navigateur Web entraîne des erreurs 'Inconnues' ou DNS. Voici un exemple, celui-ci du 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 

Je ne peux pas pour la vie de moi comprendre celui-ci. Le serveur DNS est une boîte SBS 2003 qui gère AD, certains fichiers / impression, etc. pour un réseau de petites entreprises. Ce problème m'arrive environ trois fois par semaine, et lorsque je suis connecté au réseau local directement, le même commutateur que le serveur même. Je peux faire toute connexion que je veux avec les adresses IP, je ne peux pas faire fonctionner DNS. De plus, dans le même temps, je l'ai connu, d'autres utilisateurs sont bien, ce qui me fait penser que c'est un problème sur mon Mac. Mais quel genre de problème? Comment peut-on envoyer une requête et obtenir une réponse, et ping dire «hôte inconnu»?

Je publie ici vs serverfault parce que je pense que c'est un problème local, pas un problème de serveur … mais si quelqu'un peut me pointer sur le serveur, je suppose que nous aborderons la rue dans un domaine ou deux.

Selon la version de Mac OS X que vous utilisez, la manière dont DNS est gérée par le système a changé.

Essentiellement, il existe deux mécanismes de résolution de DNS dans Mac OS X. L'approche UNIX standard ( /etc/resolv.conf ) utilisée par dig , puis l'approche utilisée par le reste du système.

Dans Mac OS X 10.4 et 10.5, les deux approches étaient beaucoup plus étroitement liées; Un rafraîchissement a tendance à les rafraîchir tous les deux. Cependant, en 10.6 et dans une moindre mesure 10.5, il est possible d'avoir dig vous donner la bonne valeur alors que le mécanisme de résolution du système a encore une mauvaise valeur.

Pour éliminer le cache DNS pour chacune des versions de Mac OS X:

  • 10.4: lookupd -flushcache
  • 10.5: dscacheutil -flushcache
  • 10.6: sudo dscacheutil -flushcache ou sudo killall -HUP mDNSResponder (La première commande devrait effectuer la deuxième commande pour vous maintenant, mais dans les versions antérieures de 10.6, il ne semblait pas)

ping si je me rappelle utilise la recherche du système – un mécanisme de résolution tellement différent. /etc/resolv.conf utilisera toujours les serveurs DNS dans l'ordre, tandis que mDNSResponder essaie d'être «intelligent» qui peut vous mordre en arrière selon votre configuration.

De plus, avez-vous plusieurs serveurs DNS spécifiés sur votre Mac et / ou via DHCP? Snow Leopard a introduit un comportement différent (bug?) Où l'ordre des serveurs DNS va changer. Cela joue de la gêne sur le DNS partagé (en interne, vous utilisez une seule adresse IP, mais à l'extérieur, celle-ci), car il est parfois impossible d'interroger le serveur DNS interne avant de demander au second serveur (externe cette fois) en ligne. Il s'agit d'une méthode pour contacter le serveur DNS le plus rapide pour éviter les retards liés au DNS. La solution la plus simple avant 10.6.3 est de ne servir que le serveur DNS interne via DHCP et assurez-vous que vos paramètres de transfert sur le serveur DNS sont définis en conséquence.

Maintenant, à partir du 10.6.3, il est possible de dire à mDNSResponder qu'il utilise toujours l'ordre approprié et ne pas essayer d'optimiser les délais de demande DNS. Vous pouvez le faire en ajoutant la clé StrictUnicastOrdering et en la définissant à vrai pour le démon de Daemon de lancement de mDNSResponder (et le recharger si nécessaire).

Dans Mac OS X v10.6, le comportement de recherche du serveur DNS par défaut est que lorsqu'un serveur ne renvoie pas un résultat (renvoyant SERV_FAIL pour une requête), et d'autres serveurs sont disponibles pour la requête, le serveur est temporairement désactivé dans l'ordre de recherche pour Environ trente secondes. S'il y a plus d'un serveur pour la requête et que tous ont renvoyé SERV_FAIL, les serveurs seront interrogés dans l'ordre où ils ont été désactivés (c'est-à-dire que le serveur qui a été désactivé le plus longtemps sera utilisé en premier).

(Source: support.apple.com et merci à Yar qui a mis cela avant que je ne le fasse.)

Vous pouvez automatiser cela (un peu plus vite et plus facilement que les commandes d'Apple) en exécutant les commandes suivantes:

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

Et l'inverser en exécutant:

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

Après l'un ou l'autre ou vous devrez recharger le travail dans launchd pour redémarrer mDNSResponder en exécutant:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
et alors
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist