Wie stelle ich den vollqualifizierten Hostnamen unter CentOS 7.0 ein?

19

Wie stelle ich den vollqualifizierten Hostnamen unter CentOS 7.0 ein?

Ich habe einige Beiträge online gesehen, zum Beispiel mit:

$ sudo hostnamectl set-hostname nodename.domainname

Das Ausführen von domainname gibt jedoch nichts zurück:

$ domainname
(none)

Ebenfalls:

$ hostname
nodename.domainname

Jedoch,

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

Einige Debug-Ausgaben:

$ cat /etc/hostname
nodename.domainname

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

Antworten:

30

So stellen Sie den Hostnamen do Verwendung hostnamectl, sondern nur mit dem Hostnamen, wie folgt aus :

hostnamectl set-hostname nodename


So legen Sie die Bearbeitungsdatei für den (DNS-) Domainnamen fest/etc/hosts und stellen Folgendes sicher:

  1. Es gibt eine Linie <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>dort
  2. Es gibt KEINE anderen Leitungen mit <some IP> <hostname>, und dies schließt Leitungen mit 127.0.0.1und ::1(IPv6) -Adressen ein.

Beachten Sie, dass es sich (none)bei der Ausführung des domainnameBefehls um die richtige Ausgabe handelt , es sei denn, Sie verwenden NIS .

Um zu überprüfen, ob Ihr DNS-Domänenname richtig eingestellt ist, verwenden Sie den dnsdomainnameBefehl und überprüfen Sie die Ausgabe von hostnamevs hostname -f(FQDN).


NIS vs. DNS Domain

Dieses Problem hat mich verwirrt, als ich darauf stieß. Es scheint, dass der domainnameBefehl älter ist als die Popularität des Internets. Anstelle des DNS-Domänennamens wird der NIS- Domänenname (Network Information Service) (Yellow Pages) des Systems angezeigt oder festgelegt (eine Gruppe von Computern, deren Dienste von einem Master-NIS-Server bereitgestellt werden). Dieser Befehl zeigt einfach den von der getdomainname(2)Standardbibliotheksfunktion zurückgegebenen Namen an . ( nisdomainnameund ypdomainnamesind alternative Namen für diesen Befehl.)

Zeigen Sie den FQDN- oder DNS-Domänennamen an

Um den DNS (Internet) -Domänennamen zu überprüfen , sollten Sie den dnsdomainnameBefehl oder hostnamemit den -d, --domainOptionen ausführen . (Beachten Sie, dass der dnsdomainnameBefehl nicht zum Festlegen des DNS-Domänennamens verwendet werden kann - er wird nur zum Anzeigen verwendet.)

Führen Sie zum Anzeigen des vollqualifizierten Domänennamens (FQDN) des Systems hostnamedie -f, --fqdn, --longOptionen aus (ebenfalls kann dieser Befehl nicht zum Festlegen des Domänennamens verwendet werden).

Die obigen Befehle verwenden den Resolver des Systems (implementiert durch die gethostbyname(3)Funktion aus der Standardbibliothek, wie von POSIX angegeben), um den DNS-Domänennamen und den vollqualifizierten Domänennamen zu bestimmen.

Namensauflösung

In modernen Betriebssystemen wie RHEL 7 wird der hostsEintrag in /etc/nsswitch.confzum Auflösen von Hostnamen verwendet. Auf Ihrem CentOS 7-Computer ist diese Zeile wie folgt konfiguriert (Standardeinstellung für CentOS 7):

hosts:      files dns

Dies bedeutet , dass , wenn , wenn die Resolver - Funktionen Host - Namen nachzuzuschlagen oder IP - Adresse, sie zum ersten Mal in der für einen Eintrag überprüft /etc/hosts Datei und versucht neben dem DNS - Server (n) , die in aufgeführt sind /etc/resolv.conf.

Wenn hostname -fdie Resolver-Funktionen ausgeführt werden , um den FQDN eines Hosts abzurufen, versuchen sie, den FQDN für den Hostnamen des Systems abzurufen. Wenn der Host nicht in der /etc/hostsDatei oder auf dem entsprechenden DNS-Server aufgeführt ist, schlägt der Versuch fehl und hostnamemeldet dies Name or service not known.

Wenn ausgeführt hostname -dwird, um den Domänennamen zu erhalten, werden dieselben Vorgänge ausgeführt, und der Domänennamenteil wird bestimmt, indem der Hostnamenteil und der erste Punkt vom FQDN entfernt werden.

Konfigurieren Sie den Domainnamen

1. Aktualisieren Sie den entsprechenden DNS-Nameserver

In meinem Fall hatte ich bereits einen Eintrag für meinen neuen CentOS 7-Computer im DNS-Server für mein lokales LAN hinzugefügt. Wenn der vollqualifizierte Domänenname bei Ausführung mit der Option oder nicht in der /etc/hostsDatei gefunden wurde , war dies für die lokalen DNS-Dienste möglich Lösen Sie den FQDN für meinen neuen Hostnamen vollständig auf.hostname-d-f

2. Verwenden Sie die /etc/hostsDatei

Wenn der DNS-Server nicht konfiguriert wurde, kann der vollständig qualifizierte Domänenname in der /etc/hostsDatei angegeben werden. Die gebräuchlichste Methode hierfür ist die Angabe der primären IP-Adresse des Systems, gefolgt von dessen FQDN und dessen kurzem Hostnamen. Z.B,

172.22.0.9  nodename.domainname nodename

Auszug aus der hostnameManpage

Sie können den FQDN nicht mit hostnameoder ändern dnsdomainname.

Die empfohlene Methode zum Festlegen des FQDN besteht darin, den Hostnamen mithilfe von /etc/hosts,DNS oder NIS als Alias ​​für den vollständig qualifizierten Namen festzulegen. Wenn der Hostname beispielsweise "ursula" /etc/hostslautet , könnte eine Zeile mit folgendem Inhalt vorhanden sein:

27.0.1.1    ursula.example.com ursula

Technisch: Der FQDN ist der Name, den getaddrinfo (3) für den von gethostname (2) zurückgegebenen Hostnamen zurückgibt. Der DNS-Domänenname ist der Teil nach dem ersten Punkt.

Daher hängt es von der Konfiguration des Resolvers (normalerweise in /etc/host.conf) ab, wie Sie ihn ändern können. In der Regel wird die Hosts-Datei vor DNS oder NIS analysiert. Daher wird am häufigsten der vollqualifizierte Domänenname geändert /etc/hosts.

Anthony G - Gerechtigkeit für Monica
quelle
Danke für deine Antwort. Ich habe die Frage aktualisiert - leider hostname -ffunktioniert der Befehl auf meinem CentOS vm nicht.
Chris Snow
@SHC Können Sie Ihre Frage so bearbeiten, dass sie auch den Inhalt /etc/hostnameund die Ausgabe von enthält grep ^hosts: /etc/nsswitch.conf? Ich weiß nicht viel über Network Manager , aber ich habe auch bemerkt , dass meine /etc/NetworkManager/NetworkManager.confeine Linie in seinem enthält [keyfile]Abschnitt: hostname=<nodename>.
Anthony G - Gerechtigkeit für Monica
1
@ SHC Ich habe das Problem seitdem untersucht und meine Antwort radikal überarbeitet. es sollte jetzt Ihre Frage umfassender behandeln.
Anthony G - Gerechtigkeit für Monica
Das Lede zu dieser Antwort stimmt nicht mit dem Körper überein. hostnamectl set-hostname nodename.domainnamelegt den DNS-Domänennamen nicht fest (und es ist auch nicht so, dass er den NIS-Domänennamen festlegt).
Sourcejedi
@sourcejedi Ich habe im Moment keine Zeit, aber ich werde versuchen, meine Antwort zu klären, wenn ich die Chance dazu bekomme.
Anthony G - Gerechtigkeit für Monica
1

Unter Centos7 führt die Verwendung von nmtui zum Festlegen des Hostnamens und das Bereitstellen des Formats nodename.domainname / FQDN zu konsistenten Ergebnissen. Hostname [d / f / s] liefern alle die korrekten erwarteten Ergebnisse. Es ist nicht in /etc/resolv.conf ODER / etc / hosts gespeichert. Der FQDN wird jedoch als einzeiliger Eintrag in / etc / hostname geschrieben.

Ponn Dk
quelle
0

Für mich enthielt die Datei / etc / hostname den FQDN anstelle des Hostnamens (z. B. hostname anstelle von hostname.beispiel.com). Nachdem ich die Domain aus dem Hostnamen in / etc / hostname entfernt hatte, funktionierte der Befehl 'hostname -f' normal.

Ich denke, dies wurde eingeführt, als ich die CentOS 7 VM installiert habe. Ich hätte nur den Hostnamen eingeben sollen, nicht den vollqualifizierten Domainnamen.

KenR
quelle