Qu'est-ce qui détermine le nom d'hôte Linux?

13

Depuis quelques années, j'utilise Linux comme système principal, en particulier Fedora, j'ai toujours vu mon nom d'hôte défini sur "localhost", à l'exception de lorsque je me connecte à certains réseaux et qu'il devient mon IP. Aujourd'hui, j'ai connu le comportement suivant que j'ai du mal à comprendre.

J'ai configuré une installation Ubuntu sur une autre partition de mon ordinateur portable, en définissant un nom d'ordinateur / nom d'hôte lors de l'installation d'Ubuntu. Quand j'ai redémarré Fedora, Fedora avait mis à jour mon nom d'hôte avec le nom que j'ai défini dans l'installation d'Ubuntu.

J'ai toujours pensé que le nom d'hôte était configuré et stocké sur la partition de l'installation de distribution, et en effet le contenu de / etc / hostname sur Fedora lit toujours "localhost.localdomain", mais l'exécution de la hostnamecommande affiche le nouveau nom d'hôte. Les deux installations partagent une partition de démarrage efi, mais sont par ailleurs discrètes. Je me demande d'où et pourquoi l'installation de Fedora lit le nouveau nom d'hôte?

feutre
la source
À quoi sert votre entrée hosts:dans /etc/nsswitch.conf?
cutrightjm
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Duplicata intersite: security.stackexchange.com/questions/158517/…
Dmitry Grigoryev

Réponses:

12

Le hostnameprogramme effectue un appel système unique, comme on peut le voir en exécutant:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

À partir de la page de manuel uname syscall , il indique que syscall récupère la structure suivante du noyau:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Le nom de domaine provient donc du système NIS / YP, si l'on en croit le commentaire. Donc, plus que probablement, il peut y avoir un service NIS / YP sur votre réseau qui vous renvoie le nom défini par le système d'exploitation Ubuntu.

einonm
la source
5
Ce n'est pas vrai, consultez la hostname(1)page de manuel qui explique comment le nom d'hôte est défini et renvoyé. Malgré la similitude de nom, le nom de domaine NIS / YP n'a rien à voir avec le nom de domaine FQDN / DNS qui est renvoyé par le résolveur. Si vous n'avez pas configuré NIS / YP, le nom de domaine NIS / YP ne sera pas défini.
Bodgit
Est-ce que "nodename" est le domaine qui vous intéresse? Serait conforme à la nostalgie d'Unix de toujours considérer les réseaux IP comme une chose facultative et définie par l'implémentation :)
rackandboneman
5

Il existe deux concepts indépendants (!) D'un nom d'hôte sur un système Linux.

Il existe tout ce que le noyau considère comme le nom d'hôte local (tel que géré par les appels système gethostname / uname et sethostname) indépendamment de toute connectivité réseau - ces mécanismes existeraient toujours si vous construisiez un noyau sans capacité pour la mise en réseau TCP / IP.

Il y a un ou plusieurs noms d'hôte qui sont réellement connectés à TCP / IP (ou à une autre pile réseau - toutes les mises en réseau dans le monde ne sont pas des adresses IP!) Que l'hôte possède, et celles-ci sont gérées dans l'espace utilisateur par les fonctions de bibliothèque du résolveur (partie de libc), qui déterminera un tel nom en interprétant les sources (fichier local / etc / hosts, DNS, NIS ....) selon les règles que vous leur donnez dans les fichiers de configuration appropriés (/etc/nsswitch.conf, / etc /host.conf etc ...).

rackandboneman
la source
3

Probablement Ubuntu connecté à Internet via votre routeur domestique lors de l'installation. Pour ce faire, il a signalé son nom d'hôte au routeur et a obtenu une adresse IP locale temporaire.

Lorsque vous redémarrez maintenant dans Fedora, il se connectera au même routeur pour obtenir son adresse IP, mais l'ancien bail créé pour Ubuntu est toujours valide. Comme il s'agit de la même machine avec la même carte réseau et la même adresse MAC matérielle, elle réutilisera le même bail.

Je suppose que le routeur envoie le nom d'hôte sur lequel le bail IP a été enregistré et que Fedora le récupère.

Malheureusement, je n'ai aucune preuve ou citation à l'appui de ma réponse, je peux simplement parler de l'expérience personnelle de l'installation d'Ubuntu en double démarrage avec Windows. À l'époque, Ubuntu refusait de définir le même nom d'hôte lors de l'installation que celui que j'utilisais dans Windows, car il affirmait que le nom était déjà présent sur le réseau. Il est probable que quelque chose de similaire se passe ici.

Pour vérifier si ce que je suppose s'applique également à votre situation, essayez de révoquer votre bail IP dans l'interface de configuration de votre routeur, puis redémarrez Fedora. S'il ne prend plus le nom d'hôte d'Ubuntu, je devrais avoir raison.

Byte Commander
la source
Il est en effet possible pour un client DHCP d'envoyer un nom d'hôte au serveur, ou de lire un nom d'hôte depuis le serveur. Presque tout fait le premier (bien que lorsque le nom d'hôte est défini sur "localhost", il est peu probable qu'il ait beaucoup d'effet :). La lecture d'un nom d' hôte depuis le serveur DHCP est possible avec les clients DHCP Linux, mais je croyais que ce support n'était pas toujours activé ( par exemple ). Il est intéressant d'entendre qu'une Fedora plus récente semble faire cela.
sourcejedi