Cosa determina il nome host Linux?


13

In pochi anni ho usato Linux come mio sistema principale, in particolare Fedora, ho sempre visto il mio nome host impostato su "localhost", ad eccezione di quando mi collego ad alcune reti e diventa il mio IP. Oggi ho sperimentato il seguente comportamento che però ho difficoltà a capire.

Ho impostato un'installazione Ubuntu su un'altra partizione del mio laptop, impostando un nome computer / nome host durante l'installazione di Ubuntu. Quando ho riavviato nuovamente Fedora, tuttavia, Fedora aveva aggiornato il mio nome host con il nome impostato nell'installazione di Ubuntu.

Ho sempre pensato che il nome host fosse configurato e archiviato sulla partizione dell'installazione distro, e in effetti il ​​contenuto di / etc / hostname su Fedora continuava a leggere "localhost.localdomain", ma eseguendo il hostnamecomando mostra il nuovo nome host. Entrambe le installazioni condividono una partizione di avvio efi, ma sono comunque discrete. Mi chiedo da dove e perché l'installazione Fedora sta leggendo il nuovo nome host?


Qual è la tua voce hosts:in /etc/nsswitch.conf?
cutrightjm,

@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora,

Risposte:


12

Il hostnameprogramma esegue un syscall uname, come si può vedere nell'esecuzione:

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

Dalla pagina man di syscall uname , dice che syscall recupera la seguente struttura dal kernel:

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

Quindi il nome di dominio deriva dal sistema NIS / YP, se crediamo nel commento. Quindi, molto probabilmente, potrebbe esserci un servizio NIS / YP sulla tua rete che sta tracciando il nome che è impostato dal sistema operativo Ubuntu.


5
Questo non è vero, vedi la hostname(1)pagina man che spiega come il nome host è impostato e restituito. Nonostante la somiglianza nel nome, il nome di dominio NIS / YP non ha nulla a che fare con il nome di dominio FQDN / DNS che viene restituito dal resolver. Se non hai configurato NIS / YP, il nome di dominio NIS / YP non sarà impostato.
bodgit,

"Nodename" è il campo che ti interessa? Sarebbe in linea con la nostalgia di Unix di considerare ancora le reti IP una cosa facoltativa e definita dall'implementazione :)
Rackandboneman,

5

Esistono due concetti indipendenti (!) Di un nome host su un sistema Linux.

Esiste qualunque cosa il kernel consideri il nome host locale (come gestito dalle chiamate di sistema gethostname / uname e sethostname) indipendente da qualsiasi connettività di rete - questi meccanismi esisterebbero comunque se si creasse un kernel senza funzionalità per la rete TCP / IP.

Esistono uno o più nomi host che sono effettivamente connessi a TCP / IP (o ad altri stack di rete - non tutta la rete al mondo è IP!) Indirizzi dell'host, e questi sono gestiti nello spazio utente dalle funzioni della libreria del resolver (parte di libc), che determinerà tale nome interpretando le fonti (file locale / etc / hosts, DNS, NIS ....) in base alle regole fornite negli appositi file di configurazione (/etc/nsswitch.conf, / etc /host.conf ecc ...).


3

Probabilmente Ubuntu si è connesso a Internet tramite il router di casa durante l'installazione. Per fare ciò, ha riferito il suo nome host al router e ha ottenuto un IP locale temporaneo.

Quando riavvierai ora Fedora, si connetterà allo stesso router per ottenere il suo indirizzo IP, ma il vecchio contratto di locazione creato per Ubuntu è ancora valido. Poiché è la stessa macchina con la stessa scheda di rete e lo stesso indirizzo MAC hardware, riutilizzerà lo stesso contratto di locazione.

La mia ipotesi è che il router invii il nome host su cui è stato registrato il contratto di locazione IP e che Fedora lo raccolga.

Sfortunatamente non ho prove o citazioni a supporto della mia risposta, posso solo parlare con l'esperienza personale di installare Ubuntu in dual-boot con Windows. Allora, Ubuntu ha rifiutato di impostare lo stesso nome host durante l'installazione come quello che ho usato in Windows, perché ha affermato che il nome era già presente nella rete. Probabilmente qui sta succedendo qualcosa di simile.

Per verificare se ciò che suppongo si applica anche alla tua situazione, prova a revocare il contratto di locazione IP nell'interfaccia di configurazione del router e quindi riavvia Fedora. Se non prende più il nome host di Ubuntu, allora dovrei avere ragione.


È infatti possibile per un client DHCP inviare un nome host al server o leggere un nome host dal server. Quasi tutto fa il primo (anche se quando il nome host è impostato su "localhost" è improbabile che abbia molto effetto :). La lettura di un nome host dal server DHCP è possibile con i client DHCP Linux, ma la mia comprensione è che questo supporto non è stato sempre abilitato ( ad es .). Interessante sapere che una Fedora più recente sembra farlo.
sourcejedi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.