Nameserver gelöscht, nachdem systemctl network.service neu gestartet hat


7

Ich arbeite an Centos 7 und habe problematisches Verhalten beim Einstellen der Netzwerkschnittstelle von DHCP auf statische IP-Konfiguration.

Ich bearbeite /etc/resolv.confund führe systemctl restart network.service
die Änderungen aus, die ich vorgenommen habe, und eine generische Datei wird erstellt:

cat /etc/resolv.conf
# Generated by NetworkManager


# 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

HINWEIS: PEERDNS = "yes" in der ifcfg-ens160-Datei.
PEERDNS =, wobei eine der folgenden Optionen lautet: yes - Ändern Sie /etc/resolv.conf, wenn die DNS-Direktive festgelegt ist. Wenn Sie DHCP verwenden, ist Ja die Standardeinstellung.
nein - Ändern Sie nicht /etc/resolv.conf.

Entnommen von hier: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-networkscripts-interfaces.html

Ich denke, es hat etwas damit zu tun, aber es funktioniert gut, wenn auf DHCP eingestellt wird. Ich gehe davon aus, dass /etc/resolv.confes erfolgreich sein wird , wenn es automatisch konfiguriert wird.

Eine Problemumgehung besteht darin, /etc/resolv.confnach dem Neustart des Dienstes zu bearbeiten .
Ich möchte jedoch das Verhalten verstehen und wissen, wie ich verhindern kann, dass die Datei auf diese Standardfehlermeldung zurückgesetzt wird.


Haben Sie in Ihrer ifcfg-ens160-Datei die DNS-Server angegeben? DNS{1} = x.x.x.x, DNS{2}=x.x.x.x
Ray

Soll ich? Das gleiche Verfahren funktioniert übrigens auch unter CentOS 6.2. Vielleicht hat sich etwas an der Art und Weise geändert, wie Services gehandhabt werden - systemctltool
csny

Ich glaube nicht, dass die DNS-Server gefüllt werden, wenn Sie sie nicht definieren. Per RedHat , DNS{1,2}=<address>, where <address> is a name server address to be placed in /etc/resolv.conf if the PEERDNS directive is set to yes.bin ich Wette bereit , dass die ifcfgDatei auf dem CentOS6.2 bauen Sie den DNS - Server erwähnen hat definiert oder PEERDNS="no".
Ray

Sie verlieren die Wette :) Die DNS-IPs werden nur an /etc/resolv.confund geschrieben PEERDNS=yes. Wie kann es sein, dass es vorher funktioniert hat?
Csny

Gefunden dies: unixmen.com/setting-dns-server-centos-7 Es heißt nicht, dass die ifcfg-Datei DNS-Einträge enthalten muss
csny

Antworten:


10

Sie mischen wahrscheinlich den Klassiker /etc/init.d/network(der übersetzt wird network.service) mit NetworkManager.service. Während erwartet wird, dass diese teilweise nebeneinander existieren, ist es viel besser, nur einen von ihnen auszuwählen und den anderen anzuhalten und zu deaktivieren .

In jedem Fall ist es besser, nicht /etc/resolv.confdirekt zu schreiben, sondern Dateien /etc/sysconfig/networkund / oder /etc/sysconfig/network-scripts/ifup-*Dateien richtig zu konfigurieren .

Sie sollten entweder DHCP aktivieren oder die Nameserver manuell einstellen /etc/sysconfig.

Beispiel (DHCP):

BOOTPROTO=dhcp

Beispiel (statisch):

BOOTPROTO=none
DNS1=192.168.1.1

Wenn Sie wirklich /etc/resolv.confdirekt einstellen möchten und sicherstellen möchten, dass NetworkManager es nicht überschreibt, können Sie es in einrichten /etc/NetworkManager/NetworkManager.conf.

[main]
dns=none

In Bezug auf Ihre zusätzliche Frage zur Anzahl der Nameserver sollten Sie niemals mehr als einen oder zwei Nameserver benötigen /etc/resolv.conf. Sie sollten nicht viel vom libc-Resolver-Verhalten erwarten, es versucht nur, die Nameserver der Reihe nach zu verwenden, und es kommt zu langen Verzögerungen, wenn Sie nicht mehr genannte Nameserver in der Liste haben.

Ich kenne Ihre Gründe nicht, mehr als drei Nameserver zu verwenden. Aber wenn es eine ist, müssen Sie auf jeden Fall einen lokalen Forwarding DNS - Server wie konfigurieren ungebundenen oder dnsmasq und Punkt /etc/resolv.confzu 127.0.0.1. Für die beste Erfahrung mit dynamischer Konfiguration sollten Sie in diesem Fall NetworkManager verwenden.

NetworkManager mit dnsmasq wird seit langem unterstützt und ist die Standardeinstellung unter Ubuntu und möglicherweise anderen Distributionen.

[main]
dns=dnsmasq

NetworkManager mit ungebundener Qualität ist in den neuesten NetworkManager-Versionen in Alpha-Qualität und benötigt derzeit auch einen DNSSEC-Trigger, da der Hauptanwendungsfall darin besteht, die DNSSEC-Validierung auf dem lokalen Host bereitzustellen.

[main]
dns=unbound

Sowohl dnsmasq und ungebundene Plugins konfigurieren , /etc/resolv.confum nameserver 127.0.0.1für Sie und jeder von ihnen konfiguriert den jeweiligen lokalen DNS - Server.


Pavel, danke. Ihre Einsicht hat mir geholfen. Ich habe gerade BOOTPROTO = none gesetzt und DNS1-, DNS2-, DNS3-, DNS4-Server hinzugefügt und das Netzwerk mithilfe des Neustarts des Servicenetzwerks neu gestartet. Beim Neustart wurden die Einträge in /etc/resolv.conf nicht gelöscht. Was ich jedoch gefunden habe, ist, dass es nur bis zu 3 DNS-Server in der Datei /etc/resolve.conf hinzufügen kann. Durch Hinzufügen der vierten DNS-Protokolle wird eine Nachricht in der Datei angezeigt: #### HINWEIS: Der libc-Resolver unterstützt möglicherweise nicht mehr als 3 Nameserver. ### Die unten aufgeführten Nameserver werden möglicherweise nicht erkannt.
Manoj Kumar

0

Verwenden Sie dhclient.conf, um die Nameserver anzugeben. Sie haben eine genaue Kontrolle über die Reihenfolge der Nameserver-Einträge und entsprechen der "Red Hat-Methode" zur Konfiguration des Netzwerks.

dhclient.conf existiert standardmäßig nicht, aber Sie können es erstellen:

interface "eth0" {
    prepend domain-name-servers 8.8.8.8;
    append domain-name-servers 8.8.4.4;
}

Resultierende resolv.conf:

# Generated by NetworkManager
search example.com
nameserver 8.8.8.8
nameserver 10.0.2.3
nameserver 8.8.4.4

Getestet mit Vagrant:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provision "shell", inline: <<VAGRANTEOF
  cat <<EOF > /etc/dhcp/dhclient-eth0.conf
interface "eth0" {
    prepend domain-name-servers 8.8.8.8;
    append domain-name-servers 8.8.4.4;
}
EOF
  sudo service network restart
VAGRANTEOF
end

Weiterführende Literatur:

  • dhclient.conf manpage
  • /usr/share/doc/dhclient-4.2.5/dhclient.conf.example

0

Ich würde empfehlen, das NetworkManager-GUI-Tool zu verwenden, um resolv.conf mit permanenten Werten zu konfigurieren - die nach dem Neustart des Netzwerks erhalten bleiben:

$ nmtui

Oder:

$ nm-connection-editor

Fügen Sie Ihre DNS-Server, Suchdomänen usw. hinzu: Geben Sie hier die Bildbeschreibung ein

Stellen Sie nun sicher, dass diese Werte nach dem Neustart des Netzwerks noch definiert sind:

$ sudo systemctl restart network
$ cat /etc/resolv.conf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.