Wie kann die libc-Resolver-Beschränkung von maximal 3 Nameservern überwunden werden?

10

Angenommen, ich arbeite in einer Umgebung mit einer Reihe von Domänenänderungen und einer langsamen Weitergabe.
Ich möchte die Domänenkonfiguration sofort nach dem Festlegen der Änderung testen, aber die Weitergabe ist langsam. Daher möchte ich der /etc/resolv.confDatei in meinem Debian 6.0.3-Laptop weitere Nameserver hinzufügen . Insbesondere Domain Name Server meines Domain Name Registrars. Ich mache es, indem ich hinzufüge:

append domain-name-servers 85.128.130.10, 194.204.152.34;

zu meiner /etc/dhcp/dhclient.confDatei. Nach dem erneuten Herstellen der Verbindung zum Netzwerk wird my /etc/resolv.confordnungsgemäß aktualisiert, jedoch mit der folgenden Meldung:

# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.

Gibt es also eine Möglichkeit, mehr als 3 Nameserver gleichzeitig zu verwenden?

malloc4k
quelle

Antworten:

19

Nur 127.0.0.1als Nameserver /etc/resolv.confeinfügen und lokal einen DNS-Cache ausführen. Ich empfehle Dnsmasq , es ist leicht und einfach einzurichten . Bei Distributionen wie Debian und Ubuntu empfehle ich außerdem die Installation des resolvconf- Pakets, das die Wartung übernimmt, /etc/resolv.confwenn Sie keinen lokalen DNS-Cache ausführen , oder die Konfiguration des DNS-Cache-Programms, wenn Sie es sind.

Gilles 'SO - hör auf böse zu sein'
quelle
Ja, der lokale DNS-Cache (und speziell dnsmasq ) hat es geschafft. Ich werde es mir erlauben, Ihre Lösung unten zu erweitern.
Malloc4k
Ich möchte hinzufügen, dass systemd systemd- resolve.service bereitstellt, einen Systemdienst, der die Auflösung von Netzwerknamen verwaltet. Es implementiert einen Caching-DNS-Stub-Resolver sowie einen LLMNR-Resolver und -Responder.
Cristian Ciupitu
8

Auf diese Weise habe ich Debian dazu gebracht, mehr als 3 Nameserver gleichzeitig zu verwenden.

  1. Installieren Sie das dnsmasq- Paket

  2. Konfigurieren Sie meinen lokalen DHCP-Client so, dass er keine vom DHCP-Server bereitgestellten DNS-Serveradressen verwendet, sondern nur den lokalen Server. Dazu füge ich meiner /etc/dhcp/dhclient.confDatei die folgende Zeile hinzu

    supersede domain-name-servers 127.0.0.1;

  3. Konfigurieren Sie dnsmasq so, dass nicht die Standarddatei /etc/resolv.conf, sondern eine eigene Alternative verwendet wird. In /etc/dnsmasq.confdie folgende Zeile

    resolv-file=/etc/resolv.dmasq

  4. Erstellen Sie /etc/resolv.dmasqmit so vielen Nameservern, wie Sie möchten.

  5. Starten Sie den dnsmasqDienst neu.

Ich habe es mit 9 definierten Nameservern getestet, die meine Domain nicht enthalten. Das System konnte seinen Namen nicht auflösen. Als ich den 10. Nameserver hinzufügte, löste das System seinen Namen korrekt auf.

malloc4k
quelle
5

Aus der resolv.conf:

Es können bis zu MAXNS (derzeit 3) Nameserver aufgelistet werden, einer pro Zeile. Wenn mehrere Server vorhanden sind, werden sie von der Resolver-Bibliothek in der angegebenen Reihenfolge abgefragt. Wenn keine Nameserver-Einträge vorhanden sind, wird standardmäßig der Nameserver auf dem lokalen Computer verwendet. (Der verwendete Algorithmus besteht darin, einen Nameserver zu testen. Wenn das Zeitlimit für die Abfrage abgelaufen ist, versuchen Sie es mit dem nächsten, bis keine Nameserver mehr vorhanden sind, und wiederholen Sie den Versuch mit allen Nameservern, bis eine maximale Anzahl von Wiederholungsversuchen ausgeführt wurde.)

Sobald alle Nameserver ausprobiert wurden und die Abfrage fehlschlägt, wird standardmäßig die Nachricht "Host nicht gefunden" zurückgegeben.

Können Sie dieselbe Zeile unten in der conf-Datei wiederholen, damit mehrere nameserverAnweisungen hinzugefügt werden ? Jede nameserverDirektivenzeile unterstützt bis zu 3 DNS-Adressen (pro Zeile).

Bitte beachten Sie, dass immer nur ein Host ausprobiert wird und dieser in der resolv.conf ganz oben auf der Liste steht. Wenn die Adresse auf dem ersten Server nicht gefunden wird oder der Server nicht erreichbar ist, wird erst dann der zweite versucht und für den dritten Server fortgesetzt, wenn die Abfrage auf dem zweiten Server fehlschlägt. Während der Host-Auflösung gibt es keine Round-Robin- oder zufällige Auswahl von Nameservern aus resolv.conf, sodass die Kosten für den Test aller Nameserver die Leistung der zugrunde liegenden Systeme / Anwendungen direkt belasten.

Ich denke jedoch, dass Sie einen lokalen Caching-Nameserver besser implementieren sollten. Die Erhöhung der DNS-Leistung für Anwendungen, die / abhängig von der Hostauflösung verwenden, würde sich erhöhen, wenn die Anzahl der DNS-Aufrufe verringert wird / auch von der Latenz abhängt.

Ein anderer Ansatz wäre die Verwendung von openDNS-Servern. Sie verfügen möglicherweise über die aktuellsten und am schnellsten bedienbaren DNS-Server im Internet.

Nikhil Mulley
quelle
2

Eine andere Antwort. Ich bin mir nicht sicher, ob dies für Debian relevant wäre, aber dies ist in letzter Zeit eher ein konventioneller (und modischer) Ansatz, der in fast allen neuesten Distributionsversionen zu finden ist.

Verwenden Sie Netzwerkprofile. Die Idee ist, in einer unterschiedlichen Netzwerkumgebung entweder dynamisch zu den Netzwerkeinstellungen zu wechseln oder Benutzereingaben zu verwenden, während die Kopien der Konfigurationsdateien und Einstellungen für alle anderen Netzwerke beibehalten werden, die zu diesem Zeitpunkt möglicherweise nicht aktiv sind.

http://www.linuxhowtos.org/Tips%20and%20Tricks/switchingnetwork.htm http://www.linuxhomenetworking.com/forums/showthread.php/15822-Configure-multiple-network-profiles http: // wiki. debian.org/NetworkManager

Nikhil Mulley
quelle
-2

Bearbeiten Sie /etc/resolvconf/update.d/libcdie folgende Zeile

[ "$N" = 3 ] && return 0

Zu

[ "$N" = 4 ] && return 0

Sie können jetzt 4 Nameserver /etc/network/interfaceseinfügen und die Zeile in Ihre Benutzeroberfläche einfügen

dns-nameservers x.x.x.x y.y.y.y a.a.a.a b.b.b.b
Anderson Ferneda
quelle
3
Wenn libc nicht mehr als drei verwendet, erscheint diese Änderung sinnlos.
Mikel