Il comando hostname in Linux. Visualizzare e modificare il nome host di un server.
Un hostname identifica un dispositivo collegato ad una rete. In poche parole, è un nome assegnato ad una macchina: un server web, un server di posta....
Assegnando ad un server un nome host, possiamo raggiungerlo, nella rete in cui è inserito, utilizzando il suo nome invece che il suo indirizzo IP.
In questo articolo vediamo innanzitutto la differenza tra hostname, nome dominio, e fully-qualified domain name ("FQDN"), vista la confusione che ogni tanto accomuna queste voci.
Quando installiamo una distribuzione linux (nel nostro esempio una CentOS), di default il sistema generalmente assegna come nome della macchina, cioè come hostname, il nome "localhost" oppure come "localhost.localdomain", ovviamente modificabili e vedremo come. Possiamo chiamare la macchina "pippo", "pluto", "www", ....
Il nome host, detto anche "unqualified" cioè "non qualificato", è un nome di fantasia lungo al massino 63 caratteri che può contenere il carattere ".", come in "localhost.localdomain".
Vedremo nel paragrafo successivo le peculiarità di un nome host. Per adesso vi basti sapere che più macchine all'interno di una rete locale possono avere lo stesso nome host, anche se è una scelta sconsigliabile per evitare di far confusione.
Facciamo un esempio:
- Abbiamo una rete locale (LAN) chiamata "Paperopoli", con IP della classe 192.168.1.x, collegata alla rete pubblica tramite l'IP pubblico 5.252.127.97
- Al suo interno abbiamo 2 server, il primo con hostname "pippo" e IP locale 192.168.1.1, il secondo con hostname "paperino" e IP locale 192.168.1.2.
- Abbiamo inoltre configurato, per la rete locale, un dominio locale chiamato "paperopoli" (in lettere minuscole). Pensiamo ad un dominio locale come un elemento aggregante i tra vari computer di una rete lan.
All'interno della LAN potrò ora raggiungere i singoli server utilizzando gli indirizzi "pippo.paperopoli" e "paperino.paperopoli" anzichè i loro IP. - Facciamo un ulteriore passo in avanti: vogliamo raggiungere la nostra rete dall'esterno senza utilizzare l'IP Pubblico 5.252.127.97 ma attraverso un dominio. Ma un dominio locale non ci consente di farlo. Dobbiamo registrare, presso uno dei numerosi servizi online, ad esempio presso Aruba.it, un dominio pubblico, ad esempio "paperopoli.com". Il dominio pubblico ha una estensione chiamata TLD (ad esempio .com. .it, .org...). Associando al dominio pubblico, tramite i sistemi DNS, il nostro l'IP pubblico 5.252.127.97, possiamo raggiungere la nostra rete digitando "paperopoli.com" da qualunque parte del mondo.
Configurando opportunamente la rete "Paperopoli", con il nostro dominio pubblico potremo:
- raggiungere la macchina "pippo" digitando "pippo.paperopoli.com"
- raggiungere la macchina "paperino" digitando "paperino.paperopoli.com"
"pippo.paperopoli.com" e "paperino.paperopoli.com" sono chiamati FQDN e cioè fully-qualified domain name
Una coppia "nomehost.nomedominio" è considerata FQDN quando è possibile risalire alla specifica macchina "nomehost" tramite il sistema DNS, che potrà essere soltanto una. Ecco quindi che il FQDN identifica in modo univoco un server.
Ad esempio l'indirizzo web di un sito, www.corriere.it, è un FQDN. Il dominio è corriere.it, e il nome della macchina è www. Digitando quell'indirizzo web accedo alla macchina con hostname "www".
All'interno di una rete, come detto, nulla vita di avere (ma è preferibile evitarlo) server con lo stesso nome host (ad es. più server che si chiamano "pippo"), mentre ci potrà essere solo un FQDN cioè una sola macchina con la coppia "nomehost.nomedominio". In poche parole, nella nostra rete ci potrà essere un solo server identificato da "pippo.paperopoli.com".
L'esempio descritto è semplicistico, perchè dietro ad una rete c'è una architettura, DNS, ci sono regole, firewall, proxy, che instradano le chiamate ricevute dall'esterno alla rete locale, ma non è questo l'oggetto del nostro articolo. Ci basti sapere cos'è un hostname ("pippo"), un dominio locale ("paperopoli") o pubblico ("paperopoli.com") e un FQDN ("pippo.paperopoli.com").
Che hostnome assegnare ad un server?
Pur non esistendo una vera e propria regola, gli amministratori di sistema usano alcune convenzioni per scegliere un hostname.
Ad esempio, si può assegnare il nome in base alla funzione svolta dalla macchina. Se il server funge da server di posta potremmo usare il nome "mail", se ci sono più server di posta potrei indentificare ogni server con un numero "mail1", "mail2", "mail3", .... Se è un server web potremmo usare "www" o "www1". O ancora "pippo" o "pluto"... quello che vogliamo.
In generale la scelta di un nome dipende solo a voi e alla vostra esperienza e fantasia.
Ci sono tuttavia alcuni vincoli da seguire:
- può solo contenere lettere (dalla a alla z), numeri (da 0 a 9), il carattere trattino "-" il carattere punto "."
- può contenere da 2 a 63 caratteri
- deve iniziare e terminare con una lettera o un numero
- le lettere degli host sono case-insensitive
- per evitare confusione, all'interno di una rete, il nome scelto dovrebbe essere univoco (ma non siamo obbligati a farlo)
Come visualizzare l'hostname di un server
Per conosere il nome host e il dominio assegnato ad un server, da terminale digitiamo il comando hostname
# hostname
pippo.paperopoli.com
Se avete da poco installato un server, senza indicare il nome host in fase di installazione, alla macchina sarà generalmente assegnato il nome "localhost" o "localhost.localdomain" che attenzione non è una coppia hostname e dominio, è solo un nome host utilizzato da alcune distribuzione di default, con un carattere "." in mezzo, che come abbiamo detto è lecito in un nome host.
# hostname
localhost.localdomain
Il nome host di un server è contenuto all'interno del file "/etc/hostname", come possiamo vedere ispezionando il file (utilizziamo il comando cat per leggere il file)
# cat /etc/hostname
localhost.localdomain
Come cambiare un hostname
Ultilizziamo il comando hostname seguito dal nome che abbiamo scelto, ad esempio "pluto"
# hostname pippo
Verifichiamo che la modifica abbia avuto effetto, usando, come sappiamo, il comando hostname
# hostname
pippo
Il nome host così assegnato, tuttavia, viene mantenuto solo fino al riavvio del server, ritornando poi al suo nome originario.
Se controlliamo all'interno del file "/etc/hostname" possiamo constatare che il nome non è stato modificato.
# cat /etc/hostname
localhost.localdomain
Per rendere definitiva la modifica dobbiamo operare come segue.
Innanzitutto modifichiamo il file "/etc/hostname" utilizzando, ad esempio, l'editor vi.
# vi /etc/hostname
pippo
Per chi non fosse pratico dell'editor "vi", dopo l'apertura del file, cliccare sul tasto "i" per poter modificare il file, e, dopo aver modificato il nome host, digitare ":wq" (write, quite) per salvare e uscire dall'editor.
Andiamo poi a modificare il file "/etc/hosts"
Se disponiamo del dominio, dobbiamo indicare l'ip della macchina, il FQDN e il nome host, divisi da uno spazio o da una tabulazione.
127.0.0.1 localhost localhost.localdomain
...............
5.252.127.97 pippo.paperopoli.com pippo
...............
Se non disponiamo di un dominio, configuriamolo ad esempio associato all'interfaccia di rete 192.168.1.1 (del nostro esempio)
127.0.0.1 localhost localhost.localdomain
192.168.1.1 pippo
Infine in una distribuzione CentOS editiamo il file "/etc/sysconfig/network" andando a modificare, o aggiungere se non presente, la riga HOSTNAME indicando il FQDN se ce l'abbiamo
HOSTNAME="pippo.paperopoli.com"
In mancanza indichiamo il nome host
HOSTNAME="pippo"
Salviamo il file e riavviamo il server per verificare che il nome host sia stato salvato in modo permanente.
# shutdown -r now
In alternativa al riavvio, sulla nostra Centos 7 usiamo il comando
# systemctl restart systemd-hostnamed
Altre opzioni del comando hostname
Il comando hostname può essere usato in combinazione con alcuni parametri, ed il risultato ottenuto si baserà sulle informazioni contenute nel file di configurazione "/etc/hosts" .
Vediamo assieme alcune di queste opzioni.
Se abbiamo un dominio pubblico, nel nostro esempio "paperopoli.com", ed il server è stato configurato con questo dominio, possiamo vedere il FQDN della macchina aggiungendo al comando hostname l'opzione "-f"
# hostname -f
pippo.paperopoli.com
Nel nostro esempio il FQDN è dato dal nome host "pippo" e dal dominio "paperopoli.com", separati da un punto.
Il comando hostname -f opera così:
- prima, tramite il file "/etc/hosts, tenta "risolvere" l'indirizzo "pippo", che è il nome host della macchina, ed ottiene come risposta "5.252.127.97"
- a questo punto viene fatta una ricerca DNS inversa ("reverse dns") per risalire al dominio dall'indirizzo IP. Ed ecco ottenuto il FQDN, cioè "pippo.paperopoli.com".
Se il dominio non è configurato, per cui non è presente il FQDN, l'operazione si interrompe al nome host
# hostname -f
pippo
Se vogliamo conoscere solo il nome di dominio della macchina usiamo il comando hostname con l'opzione "-d" (in alternativa potete anche usare il comando dnsdomainname, che ne è un alias)
# hostname -d
paperopoli.com
Se il dominio non è configurato non apparirà nulla.
Per conoscere il nome host breve ("short"), cioè quello che appare prima del carattere ".", usiamo l'opzione "-s"
# hostname -s
pippo
Con l'opzione "-i" visualizziamo l'indirizzo IP, della nostra macchina, con la quale verrà effettuata la risoluzione DNS (l'ip usato dall'opzione "-f" per ottenere il FQDN)
# hostname -i
5.252.127.97
L'opzione "-I" resituisce invece tutti gli ip della nostra macchina (tranne l'interfaccia loopback 127.0.0.1), quindi non riguarda la risoluzione DNS
# hostname -I
5.252.127.97 192.168.1.1