Come impostare il nome host completo su CentOS 7.0?


19

Come posso impostare il nome host completo su CentOS 7.0?

Ho visto alcuni post online ad esempio usando:

$ sudo hostnamectl set-hostname nodename.domainname

Tuttavia, l'esecuzione di domainname non restituisce nulla:

$ domainname
(none)

Anche:

$ hostname
nodename.domainname

Tuttavia,

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

Alcuni output di debug:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns

Risposte:


30

Per impostare il nome host do uso hostnamectl, ma solo con il nome host, in questo modo:

hostnamectl set-hostname nodename


Per impostare il file di modifica del nome di dominio (DNS)/etc/hosts e assicurarsi che:

  1. C'è una linea <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
  2. Non ci sono altre righe con <some IP> <hostname>e questo include le righe con 127.0.0.1e ::1(IPv6) indirizzi.

Si noti che, a meno che non si utilizzi NIS, (none)è l'output corretto quando si esegue il domainnamecomando.

Per verificare se il tuo nome di dominio DNS è impostato correttamente, usa il dnsdomainnamecomando e controlla l'output di hostnamevs hostname -f(FQDN).


Dominio NIS vs. DNS

Questo problema mi ha confuso quando l'ho incontrato per la prima volta. Sembra che il domainnamecomando preceda la popolarità di Internet. Invece del nome di dominio DNS, mostra o imposta il NIS (Network Information Service) del sistema alias YP (Pagine Gialle) (un gruppo di computer che hanno servizi forniti da un server NIS master). Questo comando visualizza semplicemente il nome restituito dalla getdomainname(2)funzione di libreria standard. ( nisdomainnamee ypdomainnamesono nomi alternativi per questo comando.)

Visualizza il nome di dominio FQDN o DNS

Per controllare il nome di dominio DNS (Internet), è necessario eseguire il dnsdomainnamecomando o hostnamecon-d, --domain opzioni. (Si noti che il dnsdomainnamecomando non può essere utilizzato per impostare il nome di dominio DNS: viene utilizzato solo per visualizzarlo.)

Per visualizzare il nome di dominio completo (nome di dominio completo) del sistema, eseguirehostname con le -f, --fqdn, --longopzioni (allo stesso modo, questo comando non può essere utilizzato per impostare la parte del nome di dominio).

I comandi precedenti utilizzano il resolver del sistema (implementato da gethostbyname(3) funzione dalla libreria standard, come specificato da POSIX) per determinare il nome di dominio DNS e il nome FQDN.

Risoluzione del nome

Nei moderni sistemi operativi come RHEL 7, la hostsvoce in /etc/nsswitch.confviene utilizzata per risolvere i nomi host. Nella tua macchina CentOS 7, questa linea è configurata come (impostazione predefinita per CentOS 7):

hosts:      files dns

Ciò significa che quando le funzioni del resolver cercano nomi host o indirizzi IP, per prima cosa controllano la presenza di una voce nel /etc/hosts file e quindi provano i server DNS elencati in /etc/resolv.conf.

Durante l'esecuzione hostname -fper ottenere l'FQDN di un host, le funzioni del resolver tentano di ottenere l'FQDN per il nome host del sistema. Se l'host non è elencato nel /etc/hostsfile o dal relativo server DNS, il tentativo fallisce e lo hostnamesegnala Name or service not known.

Quando hostname -dviene eseguito per ottenere il nome di dominio, vengono eseguite le stesse operazioni e la parte del nome di dominio viene determinata rimuovendo la parte del nome host e il primo punto dal nome di dominio completo.

Configura il nome di dominio

1. Aggiornare il server dei nomi DNS pertinente

Nel mio caso, avevo già aggiunto una voce per la mia nuova macchina CentOS 7 nel server DNS per la mia LAN locale, quindi quando il FQDN non è stato trovato nel /etc/hostsfile quando ho eseguito hostnamecon -do-f opzione , i servizi DNS locali sono stati in grado di risolvere completamente il nome di dominio completo per il mio nuovo nome host.

2. Utilizzare il /etc/hosts file

Se il server DNS non è stato configurato, è possibile specificare il nome di dominio completo nel /etc/hostsfile. Il modo più comune per farlo è specificare l'indirizzo IP primario del sistema seguito dal suo FQDN e dal suo nome host breve. Per esempio,

172.22.0.9  nodename.domainname nodename

Estratto dalla hostnamepagina man

Non è possibile modificare il nome FQDN con hostnameodnsdomainname .

Il metodo consigliato per impostare il nome FQDN è di rendere il nome host un alias per il nome completo utilizzando /etc/hosts,DNS o NIS. Ad esempio, se il nome host fosse "ursula", si potrebbe avere una riga in /etc/hostscui si legge:

27.0.1.1    ursula.example.com ursula

Tecnicamente: il nome FQDN è il nome getaddrinfo (3) restituito per il nome host restituito da gethostname (2). Il nome di dominio DNS è la parte dopo il primo punto.

Pertanto dipende dalla configurazione del resolver (di solito in /etc/host.conf) come modificarlo. Di solito il file hosts viene analizzato prima di DNS o NIS, quindi è più comune cambiare l'FQDN in /etc/hosts.


Grazie per la tua risposta. Ho aggiornato la domanda - purtroppo il hostname -fcomando non funziona sul mio CentOS vm.
Chris Snow,

@SHC Puoi modificare la tua domanda per includere anche il contenuto /etc/hostnamee l'output di grep ^hosts: /etc/nsswitch.conf? Non so molto di Network Manager, ma ho anche notato che il mio /etc/NetworkManager/NetworkManager.confcontiene una riga nella [keyfile]sezione: hostname=<nodename>.
Anthony G - giustizia per Monica,

1
@SHC Da allora ho fatto ricerche sul problema e ho radicalmente rivisto la mia risposta; ora dovrebbe rispondere alla tua domanda in modo più completo.
Anthony G - giustizia per Monica,

Il lede a questa risposta è incompatibile con il corpo. hostnamectl set-hostname nodename.domainnamenon non impostare il nome di dominio DNS (e non è che si imposta il nome di dominio NIS o).
sourcejedi,

@sourcejedi Al momento non ho tempo ma cercherò di chiarire la mia risposta quando ne avrò la possibilità.
Anthony G - giustizia per Monica

1

Su Centos7 l'utilizzo di nmtui per impostare il nome host e fornire il formato nodename.domainname / FQDN fornisce risultati coerenti. hostname [d / f / s] forniscono tutti i risultati previsti corretti. Non è memorizzato in /etc/resolv.conf OR / etc / hosts. Ma il nome di dominio completo è scritto in / etc / hostname come voce a riga singola.


0

Per me, il file / etc / hostname conteneva il nome di dominio completo anziché il nome host (ad esempio, nome host invece di nomehost.esempio.com). Una volta rimosso il dominio dal nome host in / etc / hostname il comando 'hostname -f' funzionava normalmente.

Penso che questo sia stato introdotto durante l'installazione della VM CentOS 7. Avrei dovuto inserire solo il nome host, non il nome di dominio completo.

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.