41 votes

Les recherches DNS échouent avec, par exemple, `ping`, mais fonctionnent avec `host`.

J'utilise pfSense 2.0rc3, et je l'ai configuré comme un transitaire DNS et activé "Register DHCP leases in DNS forwarder" et ce que je comprends sont tous les paramètres appropriés pour obtenir le serveur DNS pour les recherches locales.

Il fonctionne comme prévu avec Linux et en particulier je peux exécuter host abc y ping abc (et d'autres applications) et ils fonctionnent tous comme prévu.

Cependant, sous Mac OS X Lion 10.7, il ne fonctionne pas comme prévu. En particulier, seules les recherches avec l'option host semble fonctionner, c'est-à-dire que

$ ping abc
ping: cannot resolve abc: Unknown host

$ host abc
abc.local has address 192.168.1.128

$ ping abc.local
ping: cannot resolve abc.local: Unknown host

$ host abc.local
abc.local has address 192.168.1.128

Pourquoi la recherche de abc fonctionnent lorsque l'on utilise le host mais échouent avec ping (et autres applications) ?

Merci de votre lecture.

29voto

Sigsegv Points 716

Je ne sais pas pourquoi ils ont fait ce changement, mais cela m'a rendu fou pendant un certain temps.

Je ne sais pas. connaître pourquoi les choses fonctionnent pour l'hôte, mais pas le ping, mais je pensez à cela a à voir avec la nature de ces deux services publics. Ping est un utilitaire de diagnostic simple (bien que très utile) qui permet d'éliminer les paquets sur le fil qui devraient être renvoyés. La fonctionnalité de recherche de nom d'hôte n'est qu'un effet secondaire du travail et est transmise au résolveur récursif du système (je crois -- je n'ai pas vérifié en contrôlant les bibliothèques liées ou quoi que ce soit de ce genre). Le travail principal de Host est de faire la résolution de nom DNS, donc il implémente son propre résolveur récursif.

Le résolveur récursif d'Apple est mDNSResponder. Pour une raison quelconque, la version de mDNSResponder dans Lion a besoin de l'option de ligne de commande "-AlwaysAppendSearchDomains" pour se comporter comme elle le faisait dans Snow Leopard (au moins).

Voici un moyen rapide de le réparer :

sudo sed -i .orig '/ProgramArguments/,/<\/array>/ {
s/\(<string>-launchd<\/string>\)/\1\
                <string>-AlwaysAppendSearchDomains<\/string>/
}' /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

(Il devrait y avoir deux caractères de tabulation au début de l'avant-dernière ligne ci-dessus, mais je n'ai pas réussi à faire en sorte que ce petit éditeur insère des tabulations, alors j'ai ajouté 16 espaces. Les deux devraient fonctionner, mais les tabulations correspondent mieux à l'espacement du fichier original).

Cela ajoutera l'argument "-AlwaysAppendSearchDomains" au fichier plist de démarrage de mDNSResponder (et enregistrera une copie de sauvegarde), mais comme cela est contrôlé par launchd, il faut demander à ce système de redémarrer mDNSResponder.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Maintenant, si vous vérifiez votre processus mDNSResponder en cours d'exécution, vous devriez le voir fonctionner avec votre nouvel argument :

ps auxww | grep mDNSResponder

(Props à http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.html y http://kavassalis.com/2011/07/wtf-bug-in-os-x-10-7/ où j'ai trouvé mes réponses à ce problème).

9voto

Kiezpro Points 1243

De la page de manuel host(1) :

Avis sur Mac OS X

La commande host n'utilise pas les mécanismes de résolution de nom et d'adresse d'hôte ou de routage de requête DNS utilisés par d'autres processus s'exécutant sur Mac OS X. Les résultats des requêtes de nom ou d'adresse imprimés par host peuvent différer de ceux trouvés par d'autres processus qui utilisent les mécanismes de résolution de nom et d'adresse natifs de Mac OS X. Les résultats des requêtes DNS peuvent également différer de ceux des requêtes utilisant la bibliothèque de routage Mac OS X DNS de Mac OS X.

Malheureusement, il n'y a pas d'information sur la manière exacte dont la commande host résout les noms d'hôtes. Ce comportement la rend quelque peu inutile pour le débogage, à mon avis.

7voto

Lamont Peterson Points 61

Histoire de base ... nslookup était la commande, mais elle avait sa propre implémentation de toutes ses routines de résolution. Ce qui a commencé à se produire, c'est que les résolveurs de systèmes sur différentes plates-formes fonctionnaient différemment de nslookup. Parfois, cela produisait des résultats assez différents.

Les commandes host et dig ont été créées en tant que "réécriture" de nslookup. Elles lient statiquement les fonctions du résolveur du système. Le résolveur système est une collection de fonctions dans la bibliothèque C standard d'un système UNIX ou de type UNIX (sous Mac OS X, ces fonctions font partie de la bibliothèque netdb). De cette façon, les commandes host et dig fonctionnent toujours de la même manière que le résolveur système, quel que soit le système d'exploitation pour lequel elles sont construites, mais elles ne dépendent pas de lui. De cette façon, elles sont d'excellents outils de diagnostic dans les cas où le résolveur de système fonctionne mal.

REMARQUE : Host et dig lisent tous deux la liste des serveurs de noms dans /etc/resolv.conf, à moins qu'on ne leur donne un serveur de noms spécifique auquel parler. Seule la commande host utilise la liste de recherche dans le fichier /etc/resolv.conf ; dig ne le fait pas, c'est pourquoi il faut toujours donner à dig le FQDN pour résoudre quoi que ce soit. Les deux commandes sont par ailleurs totalement autonomes ; par exemple, le fichier /etc/resolv.conf est la seule chose qui ne se trouve pas dans le fichier binaire qu'elles utilisent.

mDNSresponder est Bonjour. Je n'ai pas creusé la question trop profondément, mais je soupçonne que ce paramètre de configuration ne règle pas le problème, ou du moins, pas directement. Je viens de rencontrer ce même problème sur Mac OS X 10.9.1 et le simple fait de redémarrer mDNSresponder l'a résolu. Je n'ai jamais vu ce problème avant sur 10.5 -> 10.8/10.9 sur aucun autre système. En outre, les applications graphiques n'ont pas été affectées par ce problème, seuls les outils en ligne de commande, comme ping et ssh, se sont effondrés.

Si je trouve le temps de fouiller un peu plus dans la bibliothèque, je verrai si je peux trouver une explication plus complète.

4voto

user45874 Points 21

J'ai mis en place un shell script pour automatiser la correction (et un désinstalleur si vous en avez besoin plus tard), ici :

https://github.com/michthom/AlwaysAppendSearchDomains

Il s'agissait de le distribuer aux utilisateurs moins techniques au travail qui pourraient hésiter à modifier manuellement les fichiers système.

4voto

Jim Points 41

.local est réservé à la multidiffusion. Les serveurs mDNS et DNS du même réseau utilisant .local peuvent poser problème.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X