Che cos'è /etc/hosts e perché viene utilizzato?
Per inviare il traffico di rete a un host, è necessario conoscere l'indirizzo IP (Internet Protocol) numerico di tale host. L'indirizzo IP è tradizionalmente scritto come xxx.xxx.xxx.xxx dove ogni xxx rappresenta un valore da 0 a 255, per un indirizzo di rete IPv4. I computer richiedono questi indirizzi, ma gli esseri umani trovano difficile ricordare i valori numerici. Il Domain Name Service (DNS) fornisce un meccanismo per associare uno o più nomi alfanumerici a un indirizzo IP numerico. Su un sistema Linux, questi nomi leggibili vengono convertiti nei loro IP numerici equivalenti dalla Libreria Resolver, contenuta nei file libresolve.so forniti come parte del pacchetto RPM di glibc. I programmi che devono cercare l'indirizzo IP numerico per un problema di nome chiamano questa libreria.
I nomi host e i relativi indirizzi IP possono essere trovati in una varietà di luoghi:file locali, server DNS remoti o server NIS+, solo per citarne alcuni. L'ordine di ricerca di queste risorse dipende dagli host:voce in /etc/nsswitch.conf file. Questa riga in genere è simile a questa:
# vi /etc/nsswitch.conf hosts: files dns
Questo fa sì che la libreria del risolutore consulti prima il file /etc/hosts locale; se il nome host non si trova lì, consulta i server dei nomi DNS remoti identificati da /etc/resolv.conf file.
Linux fornisce il vincolo Pacchetto RPM per consentire a un dominio amministrativo di configurare e mantenere il proprio servizio DNS, ma spesso la dimensione della rete locale è di pochi host e rende ingiustificato giustificare lo sforzo di mantenere un servizio DNS.
Formato del file /etc/hosts
Il file /etc/hosts è un normale file di testo. Sono consentiti due tipi di linee:
- Righe vuote
- Definizioni dei nomi host
Le righe possono essere mescolate secondo necessità. I commenti iniziano con un cancelletto (# ) e continua fino alla fine della riga.
Associazione di nomi host e indirizzi IP
Per ogni host dovrebbe essere presente una singola riga con le seguenti informazioni:
IP_address canonical_hostname [aliases ...]
I campi della voce sono separati da eventuali spazi bianchi (spazi o tabulazioni). Il primo campo è l'indirizzo IP numerico da utilizzare per tutti i nomi host su questa voce. È possibile utilizzare un indirizzo IPv4 (10.1.2.3), un indirizzo IPv6 (2001:0db8:0000:0000:0000:0000:1428:57ab) o un'abbreviazione IPv6 (::1), a seconda dei requisiti.
Dopo l'indirizzo IP, i token rimanenti specificano i nomi host conosciuti localmente associati a quell'indirizzo IP. Per convenzione, il nome dopo l'indirizzo IP è il nome di dominio canonico o completo. Un esempio di nome canonico sarebbe server.example.com; questo è il nome ufficiale dell'host.
Eventuali nomi rimanenti definiti per l'indirizzo IP sono alias o nomi alternativi per il nome host ufficiale. Ad esempio, supponiamo che uno dei compiti assegnati a server.example.com sia il sito FTP aziendale. Un alias adatto potrebbe quindi essere myftp.example.com e questo nome potrebbe essere aggiunto alla voce /etc/hosts dopo il nome canonico. Molte volte, un alias è semplicemente il nome host, senza alcun suffisso di dominio. Ad esempio:
192.168.10.12 server.example.com myftp.example.com myhost myftp
Il vantaggio di elencare il nome host canonico come prima definizione sulla riga è che la conversione da IP a nome host (simile alle ricerche DNS inverse) di solito visualizza solo il nome trovato; convenzione usa il nome canonico per questo. Nel nostro esempio, il comando:
$ ping myftp PING myhost.example.com (192.168.10.12) 56(84) bytes of data. 64 bytes from myhost.example.com (192.168.10.12): icmp_seq=1 ttl=64 time=0.023 ms 64 bytes from myhost.example.com (192.168.10.12): icmp_seq=2 ttl=64 time=0.028 ms 64 bytes from myhost.example.com (192.168.10.12): icmp_seq=3 ttl=64 time=0.028 ms
Nota che abbiamo eseguito il ping di myftp ma i risultati provengono da host myhost:questo è un indizio affidabile che stai indirizzando un alias, non l'host reale.