Comment la recherche DNS est-elle configurée pour OSX Mountain Lion?

33

Si je chat mon resolv.conf, je vois ce message:

#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#

J'essaie d'ajouter une entrée DNS. J'ai édité mon fichier hosts et vidé le cache DNS, mais le nom n'est pas résolu si je l'utilise host servername. Je pensais que peut-être que ce hostn'était pas configuré pour regarder le hostsfichier. Comment résoudre le problème de ma nouvelle entrée et comment OSX utilise-t-il sinon resolv.conf?

Ben Flynn
la source

Réponses:

17

L'outil hôte ne résout pas simplement les noms (comme dans, en utilisant le résolveur de noms de système) mais interroge en fait les serveurs DNS (comme dans l'envoi de paquets à udp / 53 et éventuellement tcp / 53): il ne sait ni n'utilise le hostsfichier local . .

Si vous voulez tester le résolveur du système d'exploitation (comme dans gethostbyname () et des fonctions similaires de la libc), vous pouvez essayer de faire un ping du nom que vous avez ajouté /etc/hostset il honorera ce que vous avez mis dans ce fichier.

En outre, comme vous l'avez déjà constaté, la recherche DNS sur Mac OSX n'est pas utilisée /etc/resolv.confet la méthode correcte pour configurer les serveurs DNS interrogés est l' networksetupoutil de configuration réseau et / ou l' outil de ligne de commande. Honnêtement, je ne sais pas si vous pouvez configurer l'ordre dans lequel les sources sont essayées, mais le comportement standard consiste à essayer d' /etc/hostsabord, puis les serveurs DNS.

Luke404
la source
1
J'ai trouvé un wrapper Perl pour getaddrinfo: search.cpan.org/~pevans/Socket-GetAddrInfo-0.22
Ben Flynn
26

Les résolveurs DNS peuvent être ajoutés à OS X via la networksetupcommande:

sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4

Insérez le nom de la connexion réseau, le cas échéant. Ces résolveurs apparaîtront dans le fichier resolv.conf lors de sa génération automatique, mais les modifications directes apportées à resolv.conf n'entraîneront pas l'utilisation de ces résolveurs. Je suppose que les résolveurs sont stockés dans un plist quelque part; Je vais chercher et faire rapport.

Modifié pour ajouter: il semble que le fichier XML plist stockant les serveurs DNS soit /Library/Preferences/SystemConfiguration/preferences.plist.

Le fichier hôte de / private / etc / hosts devrait forcer la résolution de noms particuliers (/ etc est un lien symbolique vers / private / etc). Pouvez-vous vérifier votre syntaxe et savoir que vous éditez le bon fichier?

Phoebus
la source
Donc, je pourrais utiliser cette commande pour ajouter le fichier hosts?
Ben Flynn
vous ne pouvez pas, et vous n'avez pas besoin de
Luke404
Non, si vous souhaitez ajouter des noms au fichier hosts, ajoutez-les directement. Le fichier hôtes est d'abord vérifié lors de la résolution des noms, suivi du cache de résolution local, puis de vos serveurs DNS configurés. L'utilisation de la commande "host" pour le tester ne vérifiera cependant pas le fichier hosts local. Un moyen simple de tester consiste à utiliser un utilitaire réseau tel que ping.
Phoebus
1
Parfois, l’interface reçoit des noms maladroits, pour obtenir le nom exact dont vous avez besoin, vous pouvez le faire. networksetup -listallnetworkservices De plus, si cela contient des espaces, vous devez simplement citer le nom complet, c’est-à-dire:sudo networksetup -setdnsservers 'white space' 8.8.8.8 8.8.4.4
Marcin
2
Est-il possible de configurer le résolveur pour utiliser un port différent de 53?
Rune FS