/etc/resolv.conf

Aus Foxwiki


resolv.conf

Normalerweise wird die Datei resolv.conf(5) von verschiedenen Netzwerkdienst-Dämonen dynamisch verwaltet.

  • Dies ist die Standardeinstellung, die für Laptops und andere sehr mobile Systeme gedacht ist, die sich mit verschiedenen Netzwerken verbinden können.
  • Es funktioniert auch gut für viele Desktop- und Serversysteme, solange die Netzwerkinfrastruktur perfekt ist.

Bei manchen Systemen und in manchen Netzwerken möchte der Systemadministrator die Datei /etc/resolv.conf von Hand konfigurieren.

  • Dies führt zu einem Konflikt zwischen den Änderungen des Administrators und den dynamischen Änderungen, die von den Netzwerkdienst-Dämonen durchgeführt werden.
  • Wenn Sie die Datei /etc/resolv.conf von Hand bearbeiten und verhindern müssen, dass die Daemonen Ihre Änderungen überschreiben, finden Sie auf dieser Seite einige der Möglichkeiten, die Sie haben.

Configuring openresolv or resolvconf

Debian stellt zwei Pakete zur Verfügung, von denen jedes ein Programm namens resolvconf enthält, das verwendet werden kann, um die Änderung der Datei /etc/resolv.conf durch verschiedene Netzwerkprogramme zu kontrollieren (oder ganz zu verhindern).

  • Diese Pakete sind openresolv und resolvconf.
  • Sie kollidieren miteinander, da sie buchstäblich beide das gleiche Programm bereitstellen, sodass Sie höchstens eines von ihnen auswählen müssen.

Diese Pakete enthalten verschiedene Konfigurationsdateien für andere Pakete (wie isc-dhcp-client).

  • Zum Beispiel enthält resolvconf eine Datei, die die Shell-Funktion make_resolv_conf modifiziert, die von dhclient-script(8) verwendet wird.

Wenn openresolv installiert ist, können Sie es anweisen, nichts zu tun, wenn ein Daemon versucht, resolv.conf zu ändern, indem Sie resolvconf=NO in die Datei /etc/resolvconf.conf eintragen. (Hinweis: Dies ist nicht die Datei /etc/resolv.conf!)

Wenn resolvconf installiert ist und Sie ifupdown verwenden, um Ihre Schnittstelle(n) zu konfigurieren, können Sie dns-nameserver-Einträge in der/den entsprechenden Stanza(s) in /etc/network/interfaces verwenden:

iface eth0 inet static
   address 192.168.1.3
   netmask 255.255.255.0
   gateway 192.168.1.1
   dns-nameserver 192.168.1.254
   dns-nameserver 8.8.8.8
   dns-search foo.org bar.com

dhclient konfigurieren

Der häufigste Daemon, der resolv.conf überschreibt, ist dhclient(8) (aus isc-dhcp-client).

  • In vielen Fällen reicht es aus, diesen einen Daemon davon abzuhalten, die Datei zu verändern.

dhclient daran hindern, /etc/resolv.conf zu ändern

Ein anderer Ansatz macht von den Hook-Skripten von dhclient-script Gebrauch. Laut dhclient-script(8):

  • Beim Start definiert das Client-Skript zunächst eine Shell-Funktion, make_resolv_conf , die später zum Erstellen der Datei /etc/resolv.conf verwendet wird.
  • Um das Standardverhalten außer Kraft zu setzen, muss diese Funktion im Enter-Hook-Skript neu definiert werden.

Daher können wir dhclient davon abhalten, die Datei resolv.conf zu überschreiben, indem wir folgendes tun:

echo 'make_resolv_conf() { :; }' > /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone
chmod 755 /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone

Das execute-Bit ist erforderlich, weil dhclient-script run-parts(8) verwendet, um zu entscheiden, welche Dateien gelesen werden sollen.

  • Aus demselben Grund darf der Dateiname nur Buchstaben, Ziffern, Unterstriche und Bindestriche enthalten.

Ändern von /etc/dhcp/dhclient.conf

Die Datei /etc/dhcp/dhclient.conf kann mit Direktiven versehen werden, die die vom DHCP-Server gesendeten Optionen außer Kraft setzen.

Diese Direktiven setzen die Parameter für Domäne, Suche und Nameserver außer Kraft, die in /etc/resolv.conf eingetragen sind:

supersede domain-name "example.com";
supersede domain-search "example.com";
supersede domain-name-servers 127.0.0.1;

Eine andere Möglichkeit besteht darin, "domain-name, domain-name-servers, domain-search" aus der Anfragezeile zu entfernen.

Dies funktioniert jedoch nur in einigen Netzwerken und nicht in anderen.

Wenn der DHCP-Server unaufgeforderte domain-name-servers (et al.)-Antworten sendet, beachtet dhclient diese trotzdem und überschreibt die Datei resolv.conf.

Stop dhclient from modifying /etc/resolv.conf

Another approach makes use of dhclient-script's hook scripts.

  • According to dhclient-script(8):
  • When it starts, the client script first defines a shell function, make_resolv_conf , which is later used to create the /etc/resolv.conf file.
  • To override the default behaviour, redefine this function in the enter hook script.

Therefore, we can stop dhclient from overwriting resolv.conf by doing the following:

echo 'make_resolv_conf() { :; }' > /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone
chmod 755 /etc/dhcp/dhclient-enter-hooks.d/leave_my_resolv_conf_alone

The execute bit is required because dhclient-script uses run-parts(8) to decide which files to read.

  • For that same reason, the filename must not contain anything but letters, digits, underscores and hyphens.

Modifying /etc/dhcp/dhclient.conf

The /etc/dhcp/dhclient.conf file can be populated with directives that will override the options sent by the DHCP server.

  • For example, these directives will override the domain, search, and nameserver parameters that are placed into /etc/resolv.conf:
supersede domain-name "example.com";
supersede domain-search "example.com";
supersede domain-name-servers 127.0.0.1;

Another option is to remove "domain-name, domain-name-servers, domain-search" from the request line.

  • However, this only works on some networks, and not on others.
  • If the DHCP server sends unsolicited domain-name-servers (et al.) responses, dhclient will still heed them, and will still overwrite the resolv.conf file.

Making /etc/resolv.conf immutable

This approach will render /etc/resolv.conf immutable so that it cannot be changed, regardless of what packages are installed or what tries to modify it.

rm -f /etc/resolv.conf
editor /etc/resolv.conf
chattr +i /etc/resolv.conf

Obviously, you will need to put the appropriate content into the file before setting the immutable bit.

  • Any time you wish to change the file, you will have to remove the bit, make your change, and then restore the bit.

A consequence of making /etc/resolv.conf immutable is that if dhclient-script tries to change it and fails, it clutters /etc with temporary files.

  • See 860928 for details.
  • The user/admin may need to periodically clean these files out of /etc until #860928 is fixed.

Links

  1. resolv.conf(5)