Forum Linux.général Fichier /etc/hosts non pris en compte par les logiciels

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
2
21
sept.
2014

Bonjour,

J'ai rempli mon fichier /etc/hosts avec quelques exceptions pour la résolution de quelques noms de domaines.

Si je fais un ping, je vois bien que mon fichier hosts est pris en compte.

Par contre, postfix, et d'autres logiciels continuent d'utiliser la résolution DNS en interrogeant le serveur DNS.

J'ai plusieurs serveurs virtuels, et je ne voudrais pas multiplier les config pour gérer les "vues", d'autant plus que si l'utilisation du fichier /etc/hosts était prioritaire ce serait très bien.

Si power-dns (en tant que résolveur reccursif) voulait bien aussi lire d'abord le fichier /etc/hosts lui aussi ce serait parfait. (il y a une option, je dois refaire des tests).

Comment rendre l'utilisation du /etc/hosts homogène pour l'ensemble du système?

  • # Record MX

    Posté par  . Évalué à 8.

    Le problème pour Postfix, c'est qu'il cherche des enregistrement MX qui ne sont pas disponibles dans un fichier hosts. Tu peux lui dire d'utiliser le système pour résoudre ses noms DNS mais du coup, il faut faire attention à ce qu'on met dans son fichier host.

    Pour les autres, logiciel, ben ça dépend, c'est un peu vague comme question.

    « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Demande aux développeurs

    Posté par  . Évalué à 3. Dernière modification le 21 septembre 2014 à 16:24.

    Si le concepteur du logiciel décide qu'il sait mieux que tout le monde, alors il va coder son propre résolveur DNS.

    En gros le type décide que 4 lignes de code pour appeler/vérifier/traiter un appel à libc ne convient pas. Il remplace ça par une montagne de code (ou une bibliothèque toute cuite). C'est son affaire.
    Pour Postfix, je ne sais pas (voir explication de Xavier Claude). Mais j'ai vu un logiciel de supervision avec codé en dur (en Perl) un résolveur DNS. Et bien entendu ça génère des bugs. Et bien entendu c'est à cause de l'utilisateur, surtout pas du développeur.

    Par contre pour un serveur DNS c'est plutôt normal qu'il ne gère pas obligatoirement /etc/hosts

    • [^] # Re: Demande aux développeurs

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 26 septembre 2014 à 15:00.

      Il faut peut-être être plus nuancé. Pour un soft qui a ponctuellement besoin de connaître l'ip d'une machine à un instant t, nss est tout à fait satisfaisant et ne pas l'utiliser tient du bug.

      Pour un logiciel qui traite massivement du DNS, comme un serveur smtp (plusieurs requêtes par mail), alors la libc n'est clairement pas satisfaisante.

      • NSS ne donne pas suffisamment d'information (MX, DKIM, TTL, interrogation d'un serveur spécifique pour les RBL …).

      • resolver(3) (qui au passage ne lit pas, me semble-t-il le fichier hosts - à confirmer) n'est pas réputé pour sa performance, comparé aux librairies venant de unbound par exmple

      • [^] # Re: Demande aux développeurs

        Posté par  . Évalué à 1.

        Tu veux dire que Thunderbird par exemple utilise un resolver qui lui est propre ?
        Car il a besoin du MX.

  • # nsswitch.conf

    Posté par  . Évalué à 1.

    En complément des réponses précédentes, regarde si la doc associée à nsswitch.conf peut t'aider.

  • # Le fichier hosts

    Posté par  (site web personnel) . Évalué à 5. Dernière modification le 26 septembre 2014 à 14:49.

    Le fichier hosts et la résolution DNS sont deux choses distinctes.
    La résolution DNS, comme son nom l'indique sert à chercher des informations sur les serveurs de nom renseignés dans /etc/resolv.conf.

    Le fichier hosts est l'un des fichiers de configuration de la base de données système hosts qui fait partie du sous système nss (au même titre que les bases de données passwd, group, services …)

    D'ailleurs en supposant que tu es mis toto.com dans ton fichier /etc/hosts tu peux observer que tu n'as pas le même résultat en faisant getent hosts toto.com et dig +short toto.com.

    La base de données hosts est souvent configuré de façon à ce que si une entrée n'est pas dans le fichier hosts, elle soit retrouvée par le resolver de la libc (res_query). Mais cela n'a rien d'obligatoire.

    Bref la base de données hosts n'est pas la résolution DNS et inversement.

    Il n'est pas rare que pour des raisons de performances des softs utilisent un resolver différent que celui de la libc. Notamment pour ce qui concerne les mails, très gourmands en requêtes dns. Dans certains cas, les appels à nss ne sont pas satisfaisants. Les programmes ont tout à fait le droit d'effectuer des requêtes plus complexes (MX, SPF, DKIM …). Ils peuvent également gérer leur propre cache et dans ce cas, ils ont besoin d'avoir toutes les infos.

    Par exemple, imagine que ton serveur de mail fasse juste un appel à nss pour résoudre son smarthost.

    • Il doit faire un appel à chaque mail car il ne connaît pas la durée de validité de l'enregistrement.
    • S'il ne le fait pas il est plus rapide mais il se prive d'un éventuel round robin DNS.

    Alors que si il fait une requête DNS, il a la totalité du résultat avec toutes les ips possibles et l'information du TTL qui lui permet de gérer sa mise en cache des informations.

    Ceci mis à part :

    1 - la resolution dns dans postfix se configure finement :
    smtp_host_lookup=native devrait t'aider par exemple
    2 - le fichier hosts ne sert pas à tricher mais à donner les IP d’hôtes qui n'ont pas de résolution DNS (nommer les liens locaux par exemple).
    3 - Si tu veux tricher, la bonne méthode est q'utiliser un resolver qui sait le faire tel que unbound.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.