Comment rendre une machine accessible depuis le réseau local en utilisant son nom d'hôte

120

Voici les détails de la machine à laquelle je veux accéder en utilisant son nom d'hôte:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

Il s’agit d’une installation par défaut de Debian 6 (Squeeze). Je ne me suis donc jamais occupé de rien.

C'est ce que je reçois d'une machine (exécutant Debian Unstable) essayant d'accéder à la machine ci-dessus:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local
Tshepang
la source
Vous devez faire quelque chose sur le client (la machine sur laquelle vous exécutez ping) ou sur une machine que le client consulte. Quel est le système d'exploitation sur le client? Quelle est sa configuration DNS?
Gilles le
Qu'est-ce qu'une configuration DNS? Voir aussi le post mis à jour.
Tshepang
1
Est-ce que ma réponse est le genre de choses que vous recherchiez? Si tel est le cas, la question doit être simplifiée: qui de toute façon connaît pinget /etc/hostsne connaît pas le DNS?
Gilles
Merci beaucoup. Va jeter un oeil. Oh, et c'est plus un article qu'une réponse :)
tshepang
3
La réponse est "installer et configurer Dnsmasq". Terminé. :)
Warren Young

Réponses:

145

Sur Internet, y compris les réseaux locaux, les machines s’appellent par adresses IP . Pour accéder à la machine B à partir de la machine A à l'aide du nom de la machine B, la machine A doit disposer d'un moyen de mapper le nom de B sur son adresse IP. Il existe trois façons de déclarer les noms de machine sur A:

  • un fichier hosts . C'est un simple fichier texte qui mappe les noms en adresses.
  • le système de nom de domaine (DNS) . C'est la méthode utilisée sur l'Internet global. Par exemple, lorsque vous chargez cette page dans un navigateur, la première chose que votre ordinateur fait est de faire une requête DNS pour connaître l'adresse de unix.stackexchange.com.
  • autres bases de données de noms telles que NIS , LDAP ou Active Directory . Celles-ci sont utilisées dans certains réseaux d'entreprise, mais pas très souvent (de nombreux réseaux qui utilisent NIS, LDAP ou AD pour les bases de données utilisateur utilisent DNS pour les noms d'ordinateur). Si votre réseau en utilise un, vous avez un administrateur réseau professionnel et devriez lui demander quoi faire.

Celles-ci peuvent fonctionner de nombreuses façons. il est impossible de tous les couvrir. Dans cette réponse, je vais décrire quelques situations courantes.

Fichier d'hôtes

La méthode du fichier hosts présente l'avantage de ne nécessiter aucune méthode spéciale. Cela peut être fastidieux si vous avez plusieurs machines, car vous devez mettre à jour chaque machine lorsque le nom d'une machine change. Cela ne convient pas si l'adresse IP de B est attribuée de manière dynamique (afin que vous obteniez une adresse différente chaque fois que vous vous connectez au réseau).

Un fichier d'hôtes est une simple liste de lignes mappant des noms sur des adresses IP. Cela ressemble à ceci:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

Sur les systèmes Unix, le fichier hosts est /etc/hosts. Sous Windows, c'est c:\windows\system32\drivers\etc\hosts. À peu près tous les systèmes d'exploitation que vous pouvez connecter à Internet possèdent un fichier similaire; Wikipedia a une liste .

Pour ajouter une entrée pour B dans le fichier hosts de A:

  1. Déterminez l'adresse IP de B. Sur B, exécutez la commande ifconfig(si la commande est introuvable, essayez /sbin/ifconfig). La sortie contiendra des lignes comme celle-ci:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    Dans cet exemple, l'adresse IP de B est 10.3.1.42. S'il y a plusieurs inet addr:lignes, choisissez celle qui correspond à votre carte réseau, jamais l' loentrée, ni un tunnel, ni une entrée virtuelle.

  2. Modifiez le fichier hosts sur A. Si A exécute un système Unix, vous devez le modifier en /etc/hoststant que super utilisateur. voir Comment exécuter une commande en tant qu'administrateur système (racine) .

DHCP + DNS sur les réseaux domestiques ou de petite entreprise

Cette méthode est de loin la plus simple si vous disposez du matériel requis. Il vous suffit de configurer un seul périphérique, et tous vos ordinateurs connaîtront le nom de chacun. Cette méthode suppose que vos ordinateurs obtiennent leurs adresses IP via DHCP , ce qui permet aux ordinateurs de récupérer automatiquement une adresse IP lorsqu'ils se connectent au réseau. Si vous ne savez pas ce que DHCP est, ils le font probablement.

Si votre réseau dispose d'un routeur domestique , c'est le meilleur endroit pour configurer les noms des machines connectées à ce routeur. Tout d'abord, vous devez déterminer l' adresse MAC de B. Chaque périphérique réseau a une adresse MAC unique. Sur B, exécutez la commande ifconfig -a(si la commande est introuvable, essayez /sbin/ifconfig -a). La sortie contiendra des lignes comme celle-ci:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

Dans cet exemple, l'adresse MAC est 01:23:45:67:89:ab. Vous devez choisir la ligne HWaddr qui correspond au port réseau connecté au routeur via un câble (ou la carte wifi si vous êtes connecté via wifi). Si vous avez plusieurs entrées et que vous ne savez pas laquelle est laquelle, branchez le câble et voyez quel périphérique réseau reçoit une adresse IP ( inet addrligne juste en dessous).

A présent, sur l'interface Web de votre routeur, recherchez un paramètre tel que «DHCP». Le nom et l'emplacement du paramètre dépendent entièrement du modèle de routeur, mais la plupart ont un ensemble similaire de paramètres de base. Voici à quoi cela ressemble sur un micrologiciel Tomato :

capture d'écran de la tomate

Entrez l'adresse MAC, une adresse IP et le nom souhaité. Vous pouvez choisir n'importe quelle adresse IP dans la plage d'adresses de votre réseau local. La plupart des routeurs domestiques sont préconfigurés pour une plage d'adresses de la forme 192.168. x . y ou 10. x . y . z . Par exemple, sur le routeur Tomato illustré ci-dessus, dans l'onglet «Réseau», un paramètre «adresse IP du routeur» avec la valeur 10.3.0.1 et un paramètre «masque de sous-réseau» avec la valeur 255.255.255.0, ce qui signifie que les ordinateurs sous tension le réseau local doit avoir une adresse de la forme 10.3.0. z . Il existe également une plage d'adresses pour les adresses DHCP attribuées automatiquement (10.3.0.129–10.3.0.254); pour votre adresse DHCP attribuée manuellement, choisissez-en une qui ne se trouve pas dans cette plage.

Maintenant, connectez B au réseau, et il devrait obtenir l'adresse IP que vous avez spécifiée et il sera accessible par le nom spécifié à partir de n'importe quel ordinateur du réseau.

Faites votre propre serveur DNS avec Dnsmasq

Si vous ne disposez pas d'un routeur domestique capable, vous pouvez configurer la même fonctionnalité sur n'importe quel ordinateur Linux. Je vais vous expliquer comment utiliser Dnsmasq pour configurer DNS . Il existe de nombreux autres programmes similaires. J'ai choisi Dnsmasq car il est facile à configurer et léger (c'est ce que le routeur Tomato illustré ci-dessus utilise, par exemple). Dnsmasq est disponible sur la plupart des distributions Linux et BSD pour les PC, les serveurs et les équipements réseau.

Choisissez un ordinateur toujours allumé, qui a une adresse IP statique et qui exécute une sorte de Linux ou BSD; appelons-le S (pour le serveur). Sur S, installez le dnsmasqpaquet (s'il n'est pas déjà là). Ci-dessous, je supposerai que le fichier de configuration est /etc/dnsmasq.conf; l'emplacement peut varier d'une distribution à l'autre. Maintenant, vous devez faire plusieurs choses.

  • Dites à Dnsmasq de servir vos noms d'hôtes en plus de ceux fournis par Internet. Le moyen le plus simple consiste à entrer les noms et les adresses IP dans /etc/hosts(voir la section «Fichier des hôtes» ci-dessus), et assurez-vous que /etc/dnsmasq.confla no-hostsdirective ne soit pas décommentée. (Les lignes commençant par un #sont commentées.) Vous pouvez mettre les noms dans un fichier différent; si vous le faites, mettez une ligne addn-hosts=/path/to/hosts/filededans /etc/dnsmasq.conf.
  • Indiquez à Dnsmasq comment obtenir des adresses IP pour les noms de machines sur Internet.

    • Si vous utilisez Debian, Ubuntu ou un dérivé, installez le resolvconfpaquet. Dans la plupart des cas courants, tout fonctionnera hors de la boîte.
    • Si votre administrateur réseau ou votre fournisseur de services Internet vous a fourni les adresses de serveurs DNS, entrez-les /etc/dnsmasq.conf, par exemple:

      server=8.8.8.8
      server=8.8.4.4
      
    • Si vous ne connaissez pas vos paramètres DNS actuels, consultez le fichier /etc/resolv.conf. Si vous voyez une ligne comme nameserver 8.8.8.8, mettre une ligne server=8.8.8.8à /etc/dnsmasq.conf. Une fois que vous avez changé /etc/dnsmasq.conf, redémarrez Dnsmasq. La commande à faire dépend de la distribution; les possibilités typiques incluent restart dnsmasqou /etc/init.d/dnsmasq restart.

  • Dites à S d'utiliser le service Dnsmasq pour toutes les demandes de nom d'hôte. Editez le fichier /etc/resolv.conf(en tant que root), supprimez toutes les nameserverlignes et mettez-les à la nameserver 127.0.0.1place.
    • Si vous utilisez resolvconf sur Debian ou Ubuntu, la valeur /etc/resolv.confpeut ne pas être optimale si vous avez installé le resolvconfpaquet avec le réseau en marche. Assurez - vous que les fichiers base, headet taildans le /etc/resolvconf/resolv.conf.d/répertoire ne contiennent pas d' nameserverentrées, puis exécutez resolvconf -u( en tant que root).
  • Dites aux autres machines d'utiliser S comme serveur DNS. Modifiez /etc/resolv.confet remplacez toutes les nameserverlignes par une seule nameserver 10.3.0.2où 10.3.0.2 est l'adresse IP de S (voir ci-dessus pour savoir comment trouver l'adresse IP de S).

Vous pouvez également utiliser Dnsmasq en tant que serveur DHCP afin que les ordinateurs puissent obtenir automatiquement l'adresse correspondant à leur nom. Cela dépasse le cadre de cette réponse. consultez la documentation Dnsmasq (ce n'est pas difficile). Notez qu'il ne peut y avoir qu'un seul serveur DHCP sur un réseau local donné (la définition exacte du réseau local dépasse le cadre de cette réponse).

Noms sur l'Internet mondial

Jusqu'ici, j'ai assumé un réseau local. Et si vous voulez donner un nom à une machine située dans un coin différent du monde? Vous pouvez toujours utiliser l'une des techniques ci-dessus, à l'exception du fait que les parties impliquant DHCP ne s'appliquent que sur un réseau local. Sinon, si vos machines ont des adresses IP publiques, vous pouvez enregistrer votre propre nom public pour elles. (Vous pouvez également attribuer une adresse IP privée à un nom public; elle est moins commune et moins utile, mais il n'y a pas de difficulté technique.)

Obtenir votre propre nom de domaine

Vous pouvez obtenir votre propre nom de domaine et attribuer des adresses IP aux noms d’hôte de ce domaine. Vous devez enregistrer le nom de domaine auprès d'un fournisseur de nom de domaine. cela coûte généralement entre 10 et 15 dollars par an (pour les domaines les moins chers). Utilisez l'interface Web de votre fournisseur de nom de domaine pour attribuer des adresses à des noms d'hôte.

DNS dynamique

Si vos ordinateurs ont une adresse IP dynamique, vous pouvez utiliser le protocole DNS dynamique pour mettre à jour l'adresse IP associée au nom de l'ordinateur lorsque l'adresse change. Tous les fournisseurs de noms de domaine ne prennent pas en charge le DNS dynamique. Achetez donc avant d'acheter. Pour un usage personnel, No-IP fournit un service DNS dynamique gratuit si vous utilisez leurs propres domaines (par exemple example.ddns.net).

Gilles
la source
Créez votre propre serveur DNS avec Dnsmasq: comment puis-je demander à une autre machine d'utiliser S, alors que Windows est installé sur l'autre machine
Radu Rădeanu
@Radu Vous pouvez modifier les serveurs DNS associés à une connexion via le panneau de commande quelque part. Je pense que vous devez extraire les propriétés de connexion de l'interface réseau.
Gilles
J'ai ajouté c: \ windows \ system32 \ drivers \ etc \ hosts et cela fonctionne. Merci!
Radu Rădeanu
Je tirais mes cheveux à la recherche de cela et l'ai trouvé dans le routeur, comme vous l'avez suggéré. Merci pour les informations détaillées!
Jason Turan
S'il s'agit d'un réseau d'entreprise, je dois dire au service des infrastructures. ajouter mon mac Linux à la liste de serveurs DNS, non?
WesternGun
24

Utilisez DNS multidiffusion (mDNS). Il s'agit d'un protocole à configuration zéro qui fonctionne sur les sous-réseaux LAN. Aucun serveur requis. Utilise le .localTLD (qui est ce que vous utilisez déjà).

Parce que vous demandez, tout le reste semble exagéré. Si ce n'était pas le cas, vous ne poseriez probablement pas la question.

le
la source
1
mDNS ne semble pas être pris en charge sous Windows sans installer quelque chose sur toutes les fenêtres.
Zitrax
1
@Zitrax Bon point (il s'agit cependant d'un site * nix). Les informations pertinentes pour l'installation de Windows peuvent être trouvées ici - relativement simple.
Le
3
Aka Zeroconf ou Bonjour. Fourni par avahipaquet (s). Vous pouvez interroger votre réseau via avahi-browse -alrpar exemple.
DanMan
4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

et

/etc/init.d/networking restart
LanceBaynes
la source
Dois-je l'exécuter sur le client ou l'hôte?
Tshepang
Le premier bit serait fait sur le serveur DHCP (et vous voudriez courir service restart dhcpd). La deuxième partie serait faite sur le client, et sur la plupart des distributions devrait maintenant être exécutée comme service networking restart.
Caleb
Si je me souviens bien, je n’ai besoin que d’exécuter ceci côté client.
LanceBaynes le
3

Les ordinateurs ne savent pas comme par magie quels noms d’hôtes appartiennent à quels destinataires IP. Même sur localhost, il y a une sorte de recherche impliquée.

Vous devrez configurer vos autres systèmes pour utiliser un type de service de recherche de nom. Cela peut être /etc/hostssur le client, ldap, nsswitch ou serveurs DNS normaux. J'utilise bindet saisis toutes les machines locales dans un domaine local, puis je le fais servir le DNS pour ce site.

Caleb
la source