
Wie lege ich den vollqualifizierten Hostnamen unter CentOS 7.0 fest?
Ich habe online einige Posts gesehen, in denen beispielsweise Folgendes stand:
$ sudo hostnamectl set-hostname nodename.domainname
Das Ausführen von domainname gibt jedoch nichts zurück:
$ domainname
(none)
Auch:
$ 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
Antwort1
Um dieHostname Tunverwenden hostnamectl
, aber nur mit dem Hostnamen, etwa so:
hostnamectl set-hostname nodename
Um die(DNS) DomänennameBearbeiten Sie /etc/hosts
die Datei und stellen Sie Folgendes sicher:
<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
Da gibt es eine Linie- Es gibt KEINE anderen Zeilen mit
<some IP> <hostname>
, und dies schließt Zeilen mit127.0.0.1
und::1
(IPv6)-Adressen ein.
(none)
Beachten Sie, dass die richtige Ausgabe beim Ausführen des Befehls ist , sofern Sie nicht NIS verwenden domainname
.
Um zu überprüfen, ob Ihr DNS-Domänenname richtig eingestellt ist, verwenden Sie dnsdomainname
den Befehl und überprüfen Sie die Ausgabe von hostname
vs hostname -f
(FQDN).
NIS vs. DNS-Domäne
Dieses Problem hat mich verwirrt, als ich es zum ersten Mal sah. Es scheint, dass der domainname
Befehl schon vor der Popularität des Internets existierte. Statt des DNS-Domänennamens zeigt er den DNS des Systems an oder legt ihn fest.NIS (Netzwerkinformationsdienst)auch bekannt als YP-Domänenname (Yellow Pages) (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. ( nisdomainname
und ypdomainname
sind alternative Namen für diesen Befehl.)
Anzeigen des FQDN- oder DNS-Domänennamens
Um dieDNS(Internet-)Domänennamen möchten, sollten Sie den dnsdomainname
Befehl oder hostname
mit den -d, --domain
Optionen ausführen. (Beachten Sie, dass der dnsdomainname
Befehl nicht zum Festlegen des DNS-Domänennamens verwendet werden kann – er dient nur zur Anzeige.)
Zum Anzeigen derFQDN (Vollqualifizierter Domänenname)des Systems, hostname
mit den -f, --fqdn, --long
Optionen ausführen (ebenso kann dieser Befehl nicht verwendet werden, um den Domänennamenteil festzulegen).
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 FQDN zu bestimmen.
Namensauflösung
In modernen Betriebssystemen wie RHEL 7 wird der hosts
Eintrag in /etc/nsswitch.conf
zur Auflösung von Hostnamen verwendet. In Ihrer CentOS 7-Maschine ist diese Zeile wie folgt konfiguriert (Standard für CentOS 7):
hosts: files dns
Das bedeutet, dass die Resolver-Funktionen bei der Suche nach Hostnamen oder IP-Adressen zunächst nach einem Eintrag in der/etc/hosts
Dateiund dann versuchen Sie dieDNS-Serverdie in aufgeführt sind /etc/resolv.conf
.
Beim Abrufen hostname -f
des FQDN eines Hosts versuchen die Resolver-Funktionen, den FQDN für den Hostnamen des Systems abzurufen. Wenn der Host nicht in der /etc/hosts
Datei oder vom entsprechenden DNS-Server aufgeführt ist, schlägt der Versuch fehl und hostname
es wird eine entsprechende Meldung ausgegeben Name or service not known
.
Wenn hostname -d
zum Abrufen des Domänennamens ausgeführt wird, werden dieselben Vorgänge ausgeführt und der Domänennamenteil wird bestimmt, indem der Hostnamenteil und der erste Punkt aus dem FQDN entfernt werden.
Konfigurieren des Domänennamens
Aktualisieren Sie den entsprechenden DNS-Nameserver
In meinem Fall hatte ich bereits einen Eintrag für meine neue CentOS 7-Maschine im DNS-Server für mein lokales LAN hinzugefügt, sodass die lokalen DNS-Dienste den FQDN für meinen neuen Hostnamen vollständig auflösen konnten, als der FQDN
/etc/hosts
beim Ausführenhostname
mit der Option-d
„oder“ nicht in der Datei gefunden wurde.-f
Verwenden Sie die
/etc/hosts
DateiWenn der DNS-Server nicht konfiguriert wurde, kann der vollqualifizierte Domänenname in der
/etc/hosts
Datei angegeben werden. Die gängigste Methode hierfür ist die Angabe der primären IP-Adresse des Systems, gefolgt von seinem FQDN und seinem kurzen Hostnamen. Beispiel:172.22.0.9 nodename.domainname nodename
Ausschnitt aushostname
manpage
Sie können den FQDN nicht mit
hostname
oder änderndnsdomainname
.Die empfohlene Methode zum Festlegen des FQDN besteht darin, den Hostnamen mithilfe von DNS oder NIS als Alias für den vollqualifizierten Namen festzulegen
/etc/hosts,
. Wenn der Hostname beispielsweise „ursula“ lautet, könnte eine Zeile mit/etc/hosts
folgendem Inhalt vorhanden sein:127.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. Normalerweise wird die Hosts-Datei vor DNS oder NIS analysiert, daher ist es am üblichsten, den FQDN in zu ändern/etc/hosts
.
Antwort2
Unter Centos7 liefert die Verwendung von nmtui zum Festlegen des Hostnamens und die Angabe des Formats nodename.domainname / FQDN konsistente Ergebnisse. Hostname [d/f/s] liefert alle korrekten erwarteten Ergebnisse. Es wird nicht in /etc/resolv.conf ODER /etc/hosts gespeichert. Aber der FQDN wird als einzeiliger Eintrag in /etc/hostname geschrieben.
Antwort3
Bei mir enthielt die Datei /etc/hostname den FQDN statt des Hostnamens (z. B. Hostname statt hostname.example.com). Nachdem ich die Domäne aus dem Hostnamen in /etc/hostname entfernt hatte, funktionierte der Befehl „hostname -f“ normal.
Ich glaube, dies wurde eingeführt, als ich die CentOS 7-VM installiert habe. Ich hätte nur den Hostnamen eingeben sollen, nicht den vollqualifizierten Domänennamen.
Antwort4
Ähnliches Problem wie OP (RHEL7), gelöst durch Entfernen eines nachstehenden Leerzeichens aus dem in der /etc/hostname
Datei aufgeführten kurzen Hostnamen. Gefolgt von systemctl restart systemd-hostnamed
. Jetzt wird FQDN mit hostname -f
Befehl angezeigt.