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
C'est une installation par défaut de Debian 6 (Squeeze), donc je n'ai encore rien manipulé.
Voici ce que j'obtiens 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
Sur Internet, y compris les réseaux locaux, les machines s'appellent les unes les autres par adresses IP . Pour accéder à la machine B à partir de la machine A en utilisant le nom de la machine B, la machine A doit avoir un moyen de mapper le nom de B à son adresse IP. Il existe trois façons de déclarer des noms de machine sur A:
unix.stackexchange.com
.Il existe de nombreuses manières de les mettre en pratique; il est impossible de les couvrir tous. Dans cette réponse, je décrirai quelques situations courantes.
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 dynamiquement (de sorte que vous en obteniez une 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 à 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
. Presque tous les systèmes d'exploitation que vous pouvez connecter à Internet ont un fichier similaire; Wikipedia a une liste .
Pour ajouter une entrée pour B dans le fichier hosts de A:
Déterminez l'adresse IP de B. Sur B, exécutez la commande ifconfig
(si la commande n'est pas trouvée, 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'entrée lo
ou un tunnel ou une entrée virtuelle.
/etc/hosts
en tant que super utilisateur; voir Comment exécuter une commande en tant qu'administrateur système (root) .Cette méthode est de loin la plus simple si vous disposez de l'équipement requis. Vous n'avez besoin de configurer qu'un seul appareil et tous vos ordinateurs connaîtront les noms des autres. Cette méthode suppose que vos ordinateurs obtiennent leurs adresses IP via DHCP , qui est une méthode permettant aux ordinateurs de récupérer automatiquement une adresse IP lorsqu'ils se connectent au réseau. Si vous ne savez pas ce qu'est DHCP, c'est probablement le cas.
Si votre réseau a 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 le 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 addr
ligne juste en dessous).
Maintenant, sur l'interface Web de votre routeur, recherchez un paramètre comme "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 firmware Tomato :
Saisissez l'adresse MAC, une adresse IP et le nom souhaité. Vous pouvez choisir n'importe quelle adresse IP sur 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", il y a 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 sur 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 fait pas partie de cette plage.
Connectez maintenant B au réseau, il devrait obtenir l'adresse IP que vous avez spécifiée et il sera accessible par le nom spécifié depuis n'importe quelle machine du réseau.
Si vous ne disposez pas d'un routeur domestique compatible, vous pouvez configurer les mêmes fonctionnalités sur n'importe quelle machine Linux. Je vais vous expliquer comment utiliser Dnsmasq pour configurer DNS . Il existe de nombreux autres programmes similaires; J'ai choisi Dnsmasq parce qu'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 PC, serveurs et équipements réseau.
Choisissez un ordinateur qui est 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 package dnsmasq
(s'il n'est pas déjà là). Ci-dessous, je suppose que le fichier de configuration est /etc/dnsmasq.conf
; l'emplacement peut varier sur certaines distributions. Maintenant, vous devez faire plusieurs choses.
/etc/hosts
(voir la section "Fichier Hosts" ci-dessus), et assurez-vous que /etc/dnsmasq.conf
n'a pas le no-hosts
directive sans commentaire. (Lignes commençant par #
sont commentés.) Vous pouvez mettre les noms dans un fichier différent; si vous le faites, mettez une ligne addn-hosts=/path/to/hosts/file
dans /etc/dnsmasq.conf
.Dites à Dnsmasq comment obtenir des adresses IP pour les noms de machines sur Internet.
resolvconf
. Dans la plupart des cas, tout fonctionnera hors de la boîte.Si votre administrateur réseau ou votre FAI vous a donné les adresses des serveurs DNS, entrez-les dans /etc/dnsmasq.conf
, par exemple:
server=8.8.8.8
server=8.8.4.4
Si vous ne savez pas quels sont vos paramètres DNS actuels, consultez le fichier /etc/resolv.conf
. Si vous voyez une ligne comme nameserver 8.8.8.8
, mettez une ligne server=8.8.8.8
dans /etc/dnsmasq.conf
. Après avoir changé /etc/dnsmasq.conf
, redémarrez Dnsmasq. La commande pour ce faire dépend de la distribution; les possibilités typiques incluent restart dnsmasq
ou /etc/init.d/dnsmasq restart
.
/etc/resolv.conf
(en tant que root), supprimez toutes les lignes nameserver
et mettez nameserver 127.0.0.1
au lieu./etc/resolv.conf
peut ne pas être optimal si vous avez installé le package resolvconf
avec le réseau opérationnel. Assurez-vous que les fichiers base
, head
et tail
dans le /etc/resolvconf/resolv.conf.d/
le répertoire ne contient aucune entrée nameserver
, puis exécutez resolvconf -u
(en tant que root)./etc/resolv.conf
et remplacez toutes les lignes nameserver
par une seule nameserver 10.3.0.2
où 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 comme serveur DHCP , afin que les machines 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).
Jusqu'à présent, j'ai supposé un réseau local. Et si vous voulez donner un nom à une machine qui se trouve dans un autre coin du monde? Vous pouvez toujours utiliser l'une des techniques ci-dessus, sauf que les parties impliquant DHCP ne sont applicables qu'au sein d'un réseau local. Alternativement, si vos machines ont des adresses IP publiques, vous pouvez leur enregistrer votre propre nom public. (Vous pouvez également attribuer une adresse IP privée à un nom public; c'est moins courant et moins utile, mais il n'y a aucune difficulté technique.)
Vous pouvez obtenir votre propre nom de domaine et attribuer des adresses IP aux noms d'hôte à l'intérieur de ce domaine. Vous devez enregistrer le nom de domaine auprès d'un fournisseur de noms de domaine; cela coûte généralement 10 à 15 $/an (pour les domaines les moins chers). Utilisez l'interface Web de votre fournisseur de nom de domaine pour attribuer des adresses aux noms d'hôte.
Si vos machines ont une adresse IP dynamique, vous pouvez utiliser le protocole DNS dynamique pour mettre à jour l'adresse IP associée au nom de la machine lorsque l'adresse change. Tous les fournisseurs de noms de domaine ne prennent pas en charge le DNS dynamique, alors achetez 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
).
Utilisez DNS multidiffusion (mDNS). Il s'agit d'un protocole à configuration nulle qui fonctionne sur les sous-réseaux LAN. Aucun serveur requis. Utilise le .local
TLD (c'est ce que vous utilisez déjà).
Parce que vous demandez, tout le reste semble exagéré. Si ce n'était pas le cas, alors vous ne le demanderiez probablement pas.
vi /etc/dhcp3/dhclient.conf
send Host-name "ubuntu-laptop";
et
/etc/init.d/networking restart
Les ordinateurs ne savent pas comme par magie quels noms d'hôtes appartiennent à quels destinataires IP. Même sur localhost, il existe une sorte de recherche impliquée.
Vous devrez configurer vos autres systèmes pour utiliser une sorte de service de recherche de nom. Cela peut être /etc/hosts
sur le client, ldap, nsswitch ou les serveurs DNS normaux. J'utilise bind
et saisis toutes les machines locales dans un domaine local, puis je lui fais servir le DNS pour ce site.
Si vous ne souhaitez pas vous mêler du fichier hôte et que vous possédez par hasard un nom de domaine Internet et un accès Internet, vous pouvez créer un sous-domaine de type A
qui pointe vers votre IP interne. Par exemple, configuration intranet-pc1.someperson.com
et pointe vers 10.0.1.13
.