¿Qué determina el nombre de host de Linux?

13

En los pocos años que he estado usando Linux como mi sistema principal, específicamente Fedora, siempre he visto mi nombre de host configurado como "localhost", con la excepción de cuando me conecto a algunas redes y se convierte en mi IP. Hoy experimenté el siguiente comportamiento que tengo problemas para entender.

Configuré una instalación de Ubuntu en otra partición de mi computadora portátil, configurando un nombre de computadora / nombre de host durante la instalación de Ubuntu. Sin embargo, cuando reinicié de nuevo en Fedora, Fedora había actualizado mi nombre de host al nombre que configuré en la instalación de Ubuntu.

Siempre pensé que el nombre de host estaba configurado y almacenado en la partición de la instalación de distribución, y de hecho el contenido de / etc / hostname en Fedora todavía decía "localhost.localdomain", pero al ejecutar el hostnamecomando se muestra el nuevo nombre de host. Ambas instalaciones comparten una partición de arranque efi, pero por lo demás son discretas. Me pregunto desde dónde y por qué la instalación de Fedora está leyendo el nuevo nombre de host.

fedora
fuente
¿Cuál es su entrada hosts:en /etc/nsswitch.conf?
cutrightjm
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Duplicado entre sitios: security.stackexchange.com/questions/158517/…
Dmitry Grigoryev

Respuestas:

12

El hostnameprograma realiza una llamada al sistema uname, como se puede ver al ejecutar:

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

Desde la página de manual de uname syscall , dice que syscall recupera la siguiente estructura del núcleo:

  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
           };

Entonces, el nombre de dominio proviene del sistema NIS / YP, si creemos el comentario. Por lo tanto, lo más probable es que haya un servicio NIS / YP en su red que le devuelva el nombre establecido por el sistema operativo ubuntu.

einonm
fuente
55
Esto no es cierto, consulte la hostname(1)página del manual que explica cómo se establece y se devuelve el nombre de host. A pesar de la similitud en el nombre, el nombre de dominio NIS / YP no tiene nada que ver con el nombre de dominio FQDN / DNS que devuelve el resolutor. Si no ha configurado NIS / YP, el nombre de dominio NIS / YP se deshabilitará.
bodgit
¿Es "nodename" el campo que le interesa? Estaría en línea con UNIX nostalgia considerar aún las redes IP una cosa definida opcional e implementación :)
rackandboneman
5

Hay dos conceptos independientes (!) De un nombre de host en un sistema Linux.

Hay lo que sea que el kernel considere el nombre de host local (como lo manejan las llamadas al sistema gethostname / uname y sethostname) independientemente de cualquier conectividad de red: estas mecánicas aún existirían si construyera un kernel sin capacidad para la red TCP / IP.

Hay uno o más nombres de host que están realmente conectados a TCP / IP (u otra pila de red, ¡no todas las redes en el mundo son IP!) Direcciones que tiene el host, y estas son manejadas en el espacio de usuario por las funciones de la biblioteca de resolución (parte de libc), que determinará dicho nombre interpretando las fuentes (archivo local / etc / hosts, DNS, NIS ...) de acuerdo con las reglas que les dé en los archivos de configuración apropiados (/etc/nsswitch.conf, / etc /host.conf, etc ...).

rackandboneman
fuente
3

Probablemente Ubuntu se conectó a internet a través de su enrutador doméstico durante la instalación. Para hacer esto, informó su nombre de host al enrutador y obtuvo una IP local temporal.

Cuando ahora reinicia en Fedora, se conectará al mismo enrutador para obtener su dirección IP, pero la antigua concesión creada para Ubuntu sigue siendo válida. Como es la misma máquina con la misma tarjeta de red y la misma dirección MAC de hardware, reutilizará el mismo contrato de arrendamiento.

Supongo que el enrutador envía el nombre de host en el que se registró el arrendamiento de IP y Fedora lo recoge.

Desafortunadamente no tengo evidencia o cita para apoyar mi respuesta, solo puedo hablar con la experiencia personal de instalar Ubuntu en arranque dual con Windows. En aquel entonces, Ubuntu se negó a establecer el mismo nombre de host durante la instalación que el que usé en Windows, porque afirmaba que el nombre ya estaba presente en la red. Probablemente tenemos algo similar sucediendo aquí.

Para verificar si lo que supongo también se aplica a su situación, intente revocar su contrato de arrendamiento de IP en la interfaz de configuración de su enrutador y luego reinicie Fedora. Si ya no toma el nombre de host de Ubuntu, entonces debería estar en lo cierto.

Byte Commander
fuente
De hecho, es posible que un cliente DHCP envíe un nombre de host al servidor o lea un nombre de host del servidor. Casi todo hace lo primero (aunque cuando el nombre de host está configurado como "localhost" es poco probable que tenga mucho efecto :). La lectura de un nombre de host del servidor DHCP es posible con los clientes DHCP Linux, pero mi entendimiento era este apoyo no siempre fue habilitado ( por ejemplo ). Es interesante escuchar que un Fedora más reciente parece hacer esto.
sourcejedi