CentOS7 hostnamectl set-hostname bringt /etc/resolv.conf durcheinander

CentOS7 hostnamectl set-hostname bringt /etc/resolv.conf durcheinander

CentOS7. Netzwerk ist alles in Ordnung.

# cat /etc/resolv.conf 
nameserver 192.168.1.1

Dann entscheide ich mich, den Hostnamen zu ändern.

# hostnamectl set-hostname host.domain
# reboot
# cat /etc/resolv.conf 
# Generated by NetworkManager
search domain


# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com

Warum bringt hostnamectl set-hostnamemich das durcheinander /etc/resolv.conf?

Antwort1

Um als offizielle Antwort noch einmal zu wiederholen, was MikeA in den Kommentaren zur Frage sagt:

Es muss nicht unbedingt dhcpclient sein, aber es kann auch NetworkManager sein. Wenn Sie DNS1, DNS2 und DOMAIN in derselben Datei angeben, sollte die richtige /etc/resolv/conf für Sie erstellt werden.

Wenn DNS1, DNS2 und DOMAIN nicht in dieser Datei enthalten sind, müssen Sie die richtigen Zeilen manuell zu Ihrer /etc/resolv.conf hinzufügen (also Suche und Nameserver) - MikeA

Ich bin seinen Kommentaren gefolgt und hatte Erfolg (weitere Einzelheiten finden Sie weiter unten).

NetworkManager (CentOS 7 – aktuelle Methode)

  1. Fügen Sie folgende Zeilen hinzu /etc/sysconfig/network-scripts/ifcfg-<inf>: DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
  2. Neustart


„statische“ resolv.conf (die alte Methode)

  1. PEERDNS=noIn/etc/sysconfig/network-scripts/ifcfg-<inf>
  2. Manuelles Hinzufügen korrekter Zeilen zu /etc/resolv.conf(z. B. Suche, Nameserver) (Dies ist im Wesentlichen wie



Weitere Informationen und Details


Aufgrund eines Netzwerkfehlers bin ich auf diese Frage gestoßen.

Der Server ist eine virtuelle CentOS 7-Maschine, die in einer KVM-Umgebung ausgeführt wird.

Das Betriebssystem wurde über die SolusVM-Systemsteuerungsvorlage installiert.

Nach der Installation von CentOS 7 habe ich den Hostnamen auf eine von zwei Arten geändert, kann mich aber nicht erinnern, welche:

  • hostname myserver.mydomain.com; oder
  • Verwendete Registerkarte „Hostname“ des SolusVM-Systemsteuerungspanels

Ich bin ziemlich sicher, dass ich nur Letzteres getan habe, da ich ein GIT-Init-Commit habe, das den alten Hostnamen anzeigt hostnameund verwendet, aber einen einzelnen Eintrag mit statischer IP und neuem Hostnamen/neuer Domäne hat. Unterschiede finden Sie unten.resolv.confhosts

Es scheint, dass diese Änderung aus dem einen oder anderen Grund nicht bestehen blieb, denn als die VM über SolusVM (oder den KVM-Manager) angehalten wurde, was zu einem Neustart führte, wurde der Hostname wieder auf den ursprünglichen Namen zurückgesetzt systemd.

Dann habe ich herausgefunden, dass in CentOS 7 der Hostname mit gesetzt werden muss hostnamectl set-hostname myserver.mydomain.com. [1]

Nachdem ich dies getan und einen Neustart durchgeführt hatte, stellte ich fest, dass ich keine DNS-Auflösung hatte, nslookup google.comwas beispielsweise ping google.comzu DNS-/keine Auflösungsfehlern führte.

Es scheint, als ob die DNS-Konfiguration, die möglicherweise über die SolusVM CentOS 7-Installationsvorlage festgelegt wurde, vom NetworkManager gelöscht wurde. Ich kann zwar nicht mit Sicherheit sagen, wer oder was die Änderungen verursacht hat, aber aus GIT geht definitiv hervor, dass Änderungen an und direkt nach dem Ausführen des Befehls vorgenommen wurden /etc/hostname( /etc/resolv.confsiehe /etc/machine-infoerneut hostnamectl ...unten die Unterschiede).

Hier sind die genauen Schritte, die ich für jeden in einer ähnlichen Situation, zur Fehlerbehebung oder als explizites Beispiel durchgeführt habe:

Ziel: Hostname.Domänenname (FQDN) aktualisieren

(explizit: meinALTERHostname.meinALTEDomain.com -> meinNEUERHostname.meinENEUEDomain.com)

  1. Ausgangszustand:

    • hostname:myOLDhostname.myOLDdomain.com
    • resolv.conf:
      # Generated by NetworkManager search myOLDdomain.com nameserver 8.8.8.8 nameserver 8.8.4.4
    • machine-info: /dev/null(dh nicht vorhanden)
  2. Befehl ausgeführthostnamectl set-hostname myNEWhostname.myNEWdomain

  3. Neustart. Nach dem Neustart melde ich mich per SSH wieder bei der VM an.
  4. Versuchen Sie es mit nslookup google.com, ping google.com, Sie erhalten Fehler wie:ping: unknown host google.com
  5. cat /etc/resolv.confzeigt jetzt:
    # Generated by NetworkManager
    search myNEWdomain.com


    # No nameservers found; try putting DNS servers into your
    # ifcfg files in /etc/sysconfig/network-scripts like so:
    # DNS1=xxx.xxx.xxx.xxx
    # DNS2=xxx.xxx.xxx.xxx
    # DOMAIN=lab.foo.com bar.foo.com
  6. Nach der Suche stelle ich fest, /etc/sysconfig/network-scripts/ifcfg-eth0dass keine DNS1, DNS1, und DOMAINEinträge vorhanden sind. Dies führt zu fehlenden nameserverEinträgen in /etc/resolv.conf.
  7. Ich füge folgendes an via sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0:
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    DOMAIN=myNEWdomain.com
  8. Ich führe erneut den Befehl aushostnamectl set-hostname myNEWhostname.myNEWdomain
  9. Ich habe jedoch immer noch kein DNS nslookupund pinges fehlschlägt immer noch.
  10. Ich versuche, NetworkManager wie empfohlen neu zu startensystemctl restart NetworkManager.service
  11. Immer noch kein DNS, also führe ich den Befehl ausreboot
  12. Nach dem Neustart melde ich mich erneut per SSH an und ES FUNKTIONIERT. pingUnd nslookpbeides ist erfolgreich.
  13. Jetzt prüfe ich cat /etc/resolv.confund sehe die enthaltenen nameserverEinträge:
    # Generated by NetworkManager
    search myNEWdomain.com
    nameserver 8.8.4.4
    nameserver 8.8.8.8

Für GIT verwende ich etckeeper(verwaltet im Wesentlichen ein GIT-Repository in /etc) und es zeigt die anfängliche Konfiguration und dass explizit keine anderen Änderungen an den netzwerkbezogenen Dateien von vorgenommen wurden, /etc/{hostname,resolv.conf,hosts}bis der hostnamectlBefehl ausgeführt wurde.

Antwort2

Sie können Networkmanager anweisen, keine Änderungen vorzunehmen, resolv.confindem Sie nodnsim Hauptabschnitt einen Codeausschnitt hinzufügen /etc/NetworkManager/conf.d/nodns.conf:

[main]
dns=none

(nicht vergessen systemctl restart NetworkManager)

verwandte Informationen