Wie kann ich einen lokalen DNS-Resolver mit Cache unter Ubuntu 14.04 ausführen?

Wie kann ich einen lokalen DNS-Resolver mit Cache unter Ubuntu 14.04 ausführen?

Ich betreibe Ubuntu 14.04-Instanzen auf AWS EC2 in einer VPC. Diese verwenden den von unserer VPC bereitgestellten Nameserver. Jeder DNS-Lookup eines Prozesses wird an den VPC-Nameserver gesendet. Unsere Prozesse führen viele Lookups durch und einige schlagen fehl, was zu blockierten Prozessen führt.

Ich möchte dies beheben, indem ich auf jedem Rechner einen lokalen DNS-Resolver mit Cache installiere. Dieser Resolver hört auf und 127.0.0.1:53bedient lokale Prozesse. Der Resolver wird in aufgelistet /etc/resolv.conf, d. h. ich verwende nameserver 127.0.0.1stattdessen den dynamisch über DHCP bereitgestellten VPC-Nameserver.

Es gibt viele alternative Programme hierfür: bind9, nscd, dnsmasq, dnscache, usw. Es scheint aber auch viele Möglichkeiten zu geben, manuell zu verwalten /etc/resolv.conf, z. B. die Datei als schreibgeschützt zu markieren oder zu bearbeiten /etc/network/interfacesoder zu bearbeiten /etc/dhcp/dhclient.conf. Was ist zu empfehlen?

Ich habe noch eine weitere Anforderung: Der lokale Resolver leitet Suchvorgänge an den VPC-Nameserver weiter, unsere vertrauenswürdige Autorität für DNS-Informationen. Die von mir aufgelisteten Programme scheinen sich jedoch nicht so zu verhalten. Stattdessen leiten sie ihre Suchvorgänge an vorkonfigurierte Root-Nameserver weiter.

Theoretisch könnte ich das zum Laufen bringen dhclient-script, indem resolvconfich , oder etwas in der Art anpasse. Ich würde einen Hook hinzufügen, der die von DHCP bereitgestellte Nameserver-IP nimmt, sie in die Konfiguration meines lokalen DNS-Resolvers einfügt und dann den lokalen DNS-Resolver-Daemon neu startet. Aber das ist ziemlich haarig und ich möchte das vermeiden. (Die Standardskripte in Ubuntu 14.04 scheinen ein gewisses eingebautes Wissen über nscdund zu haben dnscacheund tun möglicherweise, was ich will, aber das ist sehr unklar.)

Welches ist die „gesegnete“ Art, einen lokalen DNS-Resolver mit Cache unter Ubuntu 14.04 auszuführen? Insbesondere, wie bringe ich den lokalen Resolver dazu, an den Standard-DHCP-Nameserver weiterzuleiten?

Antwort1

Der einfachste Weg ist wahrscheinlich nscd.

Installieren Sie nscd unter Verwendung der Standardkonfiguration.

Aktualisieren Sie /etc/nsswitch.conf und fügen Sie cache„before“ dnszur Hosts-Zeile hinzu.(Bearbeiten: Dieser Teil ist nicht auf glibc anwendbar, wie es in den meisten Linux-Distributionen verwendet wird, wird aber auf fbsd benötigt.)

hosts: files cache dns

Prüfen

tcpdump -v -n 'port 53'
getent hosts superuser.com

Sie müssen /etc/resolve.conf nicht verstümmeln oder den DHCP-Resolver erfassen, um den Upstream von nscd zu aktualisieren. nsswitch leitet gethost*-Aufrufe korrekt über den Cache-Server weiter, da dieser Teil von glibc ist.

verwandte Informationen