Le serveur Ubuntu ne résout pas les noms d'hôtes LAN


14

Un peu coincé ici.

J'ai 2 machines qui ne peuvent pas résoudre les noms d'hôtes LAN, sauf s'il y a des entrées spécifiques dans / etc / hosts

Mais d'autres machines sur le LAN peuvent résoudre les noms d'hôte.

Mon LAN:

  • 1 x routeur Cisco exécutant DD-WRT v24-sp2 avec DNSMasq activé. J'ai configuré ceci avec les noms d'hôtes et les IP sur mon LAN.
  • 1 x Kubuntu 12.10 (résout tous les noms d'hôtes correctement tant qu'ils sont entrés dans DNSMasq sur le routeur)
  • 2 x NAS (résolvez également tous les noms correctement)

  • 1 x Ubuntu Server 12.04 (cela ne résout PAS les noms d'hôtes locaux sauf s'ils sont entrés dans / etc / hosts)

  • 1 x XBMCLive (Dharma) (idem - ne résout pas sauf si les entrées sont dans / etc / hosts)

Comment puis-je obtenir les 2 derniers à utiliser les entrées DNSMasq sur le routeur? Chaque machine est configurée pour utiliser le routeur comme serveur de noms et toutes les unités résolvent correctement les adresses externes.

Merci.

quelques informations supplémentaires:

sur le serveur, si je cingle un autre PC (wstation)

$ ping wstation
PING wstation.local.domain (x.x.x.x) 

Si j'ajoute ensuite .local

$ ping wstation.local
PING wstation.local.local.domain (x.x.x.x)

et directement

$ ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.387 ms
64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.316 ms
64 bytes from 10.0.0.4: icmp_req=3 ttl=64 time=0.312 ms
64 bytes from 10.0.0.4: icmp_req=4 ttl=64 time=0.280 ms
64 bytes from 10.0.0.4: icmp_req=5 ttl=64 time=0.322 ms
^C
--- 10.0.0.4 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.280/0.323/0.387/0.038 ms                                                                       

Je ne connais pas la réponse, et je n'ai aucune idée si cela sera utile, mais au cas où vous ne le sauriez pas ... J'ai découvert que si j'ajoutais ".local" après un nom de machine, il serait en quelque sorte trouvé sans aucune configuration nécessaire. En fait, cela m'a aidé parce que je spécifiais des adresses, mais que je devais continuer à changer les entrées lorsque j'allais ajouter ou supprimer un système d'exploitation que j'avais utilisé pour les tests, etc. Mais, en spécifiant machinename.local, je n'avais plus besoin de m'inquiéter. Si vous savez d'où cela vient, n'hésitez pas à me le dire. :)
Marty Fried

1
Salut Marty, merci pour ta réponse. J'ai ajouté plus d'informations au problème pour montrer ce qui se passe avec .local
teracow

Réponses:


15

À propos de votre sortie actuelle

ping wstation
PING wstation.local.domain

Indique clairement que votre PC s’ajoute .local.domainaux requêtes non-FQDN. C'est quelque chose de mal configuré ou du moins incorrect dans votre configuration. (sauf si vous utilisez le .local.domainsuffixe à dessein)

Résolution de noms et périodes

Une chose importante que beaucoup de gens ne savent pas, c'est qu'un nom complet doit toujours se terminer par un point ( .). Si vous l'omettez, la machine essaiera de le résoudre dans le domaine de recherche local (par exemple mydomain.tld). Donc, dans ce cas, une requête pour mypc.localdeviendrait mypc.local.mydomain.tld. Pour éviter cela, interrogez avec le point.

Configuration du résolveur

La configuration du résolveur est ici d'une grande importance. Dans Ubuntu (et Debian), cela est configuré dans le fichier /etc/network/interfaces(en supposant que vous n'exécutez pas NetworkManager):

iface eth0 inet static
   address 192.168.3.3
   netmask 255.255.255.0
   gateway 192.168.3.1
   dns-nameservers 192.168.3.45 192.168.8.10
   dns-search foo.org bar.com                      # <-- these are the search domains

La résolution de noms sous Linux peut également être effectuée par d'autres moyens. Ce n'est pas seulement que le serveur DNS local est interrogé pour tout cela. Jetez un œil à votre /etc/nsswitch.conffichier pour la hostsconfiguration de la résolution:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Cela signifie que les fichiers sont essayés en premier (c'est le /etc/hostsfichier), puis mDNS et seulement plus tard, le vrai serveur DNS est interrogé. mDNS est implémenté à l'aide d'Avahi sous Linux et s'appelle Bonjour sur les appareils Apple. Il utilise le .localsuffixe par défaut et fonctionne via des messages de diffusion. Tout comme ARP fonctionne, mais pour DNS.

Tous ces systèmes peuvent être très déroutants et encore plus lorsqu'ils sont utilisés .localdans une configuration DNS régulière mélangée à des périphériques mDNS. Je suppose que c'est pourquoi vous ne savez plus pourquoi un appareil fonctionne et l'autre non: ils n'utilisent pas tous la même méthode de résolution.

Pour trier les choses

  • Évitez l'utilisation si, .localsauf si vous souhaitez vous fier complètement à mDNS. D'après votre question, je comprends que vous aimeriez garder les choses configurées vous-même dans un endroit central, donc mon approche ici est de l'éviter.
  • Configurez votre serveur DNS local (le périphérique DD-WRT dans votre cas) pour utiliser un nom de domaine spécial, par exemple my.home. Pour dnsmasq, il s'agit d'un paramètre unique, mais dans les configurations normales, il doit être configuré à la fois sur le serveur DNS et sur le serveur DHCP (car il est annoncé via DHCP).
  • Configurez tous les PC pour avoir un nom d'hôte simple et unique. Ils l'utilisent dans leur demande de DHCP et cela est utilisé dans le dnsmasq exécuté sur votre routeur pour les résoudre. Alternativement, configurez-les manuellement pour ne pas avoir à compter sur DHCP.
  • Supprimez toute configuration restante /etc/resolv.confau cas où vous l'auriez manipulé dans le passé.
  • Configurez les PC de votre réseau à utiliser my.homecomme domaine de recherche local. Cela peut être fait via DHCP automatiquement, ou si vous utilisez des adresses statiques via le /etc/network/interfacesfichier ou dans Network Manager:

    entrez la description de l'image ici

  • Désormais, la résolution de nom simple ( ping hostname) ainsi que le nom complet ( ping hostname.my.home) devraient fonctionner.

5
Hou la la! Réponse impressionnante gertvdijk! Très complet. À tel point que j'aurai besoin d'un peu de temps pour comprendre ce que vous avez dit. Je peux dire que j'ai testé un ping avec un point après le nom d'hôte et cela a fonctionné correctement. Je n'utilise pas DHCP sur ce LAN pour les machines permanentes. Je n'ai jamais configuré les paramètres .local sur aucune machine car je ne comprenais pas de quoi il s'agissait. J'examinerai cela plus en détail selon vos instructions et vous répondrai.
teracow

Merci pour cette réponse complète. J'ai changé mon /etc/nsswitch.conf pour que le DNS soit tenté avant mDNS files mdns4_minimal [NOTFOUND=return] dns mdns4. Maintenant, tout se comporte plus comme je l'attend avec mes machines adressées host.foo.local (mal nommées). Avant, ce changement ping hostnamefonctionnerait mais ping hostname.foo.localéchouait. J'étais vraiment confus quand dig hostnamej'échouais et dig hostname.foo.localretournais un résultat, l'opposé de ce que j'attendais. Maintenant je peux cingler des FQDN comme je m'y attendais. Y a-t-il un inconvénient à ce que la commande soit définie de cette façon?
TafT

1

Sur la base de la réponse de gertvdijk, je viens de commenter la ligne dans nsswitch.conf

sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns

0

J'ai eu des problèmes similaires avec un / etc / hosts contenant plusieurs espaces entre IP et nom d'hôte, à la place en utilisant un TAB. Après avoir changé en TAB, le nom d'hôte peut être résolu par ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

voir aussi sur /superuser//a/938366/467479


3
Je suis désolé, ce n'est PAS correct. Le fichier hosts fonctionnera avec des espaces ou des tabulations. De plus, 127.0.0.1 devrait d'abord avoir localhost, suivi de localhost.localdomain - et selon votre configuration, le nom d'hôte de votre machine. (Certaines configurations, Ubuntu / Debian vous ont mis votre nom d'hôte sur la ligne 127.0.1.1) Je ne recommanderais pas d'installer des adresses .local dans le fichier hosts, cependant, car elles sont en conflit avec mDNS / Avahi
The Dude

1
Si vous avez des machines Windows sur votre domaine, il utilise apparemment un DNS unicast, qui n'est pas compatible avec les implémentations Avahi ou Zeroconf mDNS. En outre, vérifiez votre /etc/nsswitch.conf pour voir s'il se met en panne après mdns4_minimal [NOTFOUND = return] ou fait une recherche mdns4 complète (déplacez-le en arrière). De plus, ne configurez aucun serveur DNS pour utiliser le domaine .local, car les résolveurs mDNS / sd-DNS masqueront les recherches sur ce domaine. Pour votre TLD DNS interne, utilisez .lan, .work, .home, etc. (mais PAS l'un des nouveaux TLD, comme .biz, .xyz, .web, etc ...). Bonne chance et bienvenue dans le monde amusant de la résolution DNS.
The Dude
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.