Archiv/pdnsd

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Root-Rechte

  4. Einen Editor öffnen

Inhaltsverzeichnis
  1. Installation
  2. Konfiguration
    1. Globale Einstellungen
    2. Festplattenspeicher
    3. DNS-Server
    4. Konfiguration abschließen
  3. Beispielkonfiguration
  4. Start und Test
  5. Problembehandlung
    1. NetworkManager überschreibt resolv.conf
    2. Fehleranalyse
  6. Extras
    1. Gemeinsamer DNS-Server im Netzwerk
    2. Werbeblocker
    3. pdnsd-ctl
  7. Links

Wiki/Icons/service.png pdnsd 🇬🇧 ist ein DNS-Proxy-Server für Linux. Im Vergleich mit z.B. dnsmasq speichert er DNS-Abfragen in einem lokalem Zwischenspeicher permanent, wodurch sich der Internetzugriff auch über einen Neustart hinaus beschleunigen lässt. pdnsd unterstützt parallele Anfragen, mehrere DNS-Server und kann umfangreich konfiguriert werden.

Installation

pdnsd kann direkt aus den Quellen installiert werden [1]:

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install pdnsd 

sudo aptitude install pdnsd 

Konfiguration

pdnsd wird hauptsächlich über die Datei /etc/pdnsd.conf konfiguriert. Hier müssen einige wenige Anpassungen vorgenommen werden, um das Programm sinnvoll nutzen zu können.

Es ist ratsam, vor der Bearbeitung der Datei mittels

sudo cp /etc/pdnsd.conf /etc/pdnsd.conf.backup 

ein Backup anzulegen.

Hinweis:

Die Konfigurationsdatei verwendet zwar eine einfache, aber in einigen Punkten von anderen Dateien dieser Art abweichende Syntax. Es gibt verschiedene Abschnitte, welche mit dem Namen des Abschnitts starten (global,server,source,neg).

In jedem Abschnitt gibt es eine Reihe von Optionen nach dem Muster:

option_name=option_wert;

Das Semikolon muss am Ende jeder Option gesetzt sein. Kommentare werde mit // statt # eingeleitet. Komplette Bereiche werden mit einem /* am Anfang und einem */ am Ende auskommentiert.

Globale Einstellungen

Hier lassen sich grundlegende Einstellungen vornehmen. Die Voreinstellungen sind bereits sinnvoll, lassen sich allerdings durchaus noch verbessern. Die vollständigen Optionen sind in den Hilfeseiten des Programms beschrieben.

Festplattenspeicher

pdnsd löst automatisch alle Einträge der Datei /etc/hosts auf und speichert sie zwischen. Sind sehr viele Einträge vorhanden (falls man die Datei z.B. zum Blocken von Werbung verwendet), ist die voreingestellte Größe für den Festplattenspeicher möglicherweise zu klein. Dies führt dazu, dass pdnsd nicht mehr alle Abfragen speichern kann. Über den Eintrag perm_cache in den globalen Einstellungen lässt sich die Größe des zu verwendenden Festplattenspeichers erhöhen.

Als Alternative kann mit der Option authrec=off; im Abschnitt 'Source' das Vorladen der in der Datei /etc/hosts eingetragenen Seiten komplett abgeschaltet werden.

DNS-Server

In diesem Bereich lassen sich die DNS-Server angeben, die pdnsd abfragt. Mindestens ein DNS-Server muss eingetragen sein. In der Beispielkonfiguration unten ist OpenDNS 🇬🇧 voreingestellt. Es können durchaus mehrere DNS-Server mit eigenen Sektionen eingetragen sein. (Siehe auch GoogleDNS 🇬🇧 in der Beispielkonfiguration.)

Konfiguration abschließen

Ist die Konfiguration abgeschlossen, muss pdnsd noch mitgeteilt werden, dass die Datei /etc/pdnsd.conf verwendet werden soll. Hierzu öffnet man in einem Editor [4] mit Root-Rechten [3] die Datei /etc/default/pdnsd und setzt die Option AUTO_MODE auf OFF. Unterlässt man dies, ignoriert pdnsd die Datei und somit auch die eigenen Einstellungen.

Abschließend muss die /etc/resolv.conf noch auf den lokalen Proxy verweisen. Dazu muss der folgende Eintrag vorgenommen und gespeichert werden:

nameserver 127.0.0.1

Hinweis: verwendet man den NetworkManager (der in Ubuntu Standard ist), muss wie unten angegeben vorgegangen werden.

Beispielkonfiguration

Diese Beispielkonfiguration verwendet OpenDNS 🇬🇧 als Nameserver und dürfte für die meisten Anwender direkt funktionieren.

global {
	perm_cache=4096;
	cache_dir="/var/cache/pdnsd";
	run_as="pdnsd";
	server_ip = 127.0.0.1;  // Hier eth0 verwenden, wenn andere Rechner im Netzwerk
				// auf pdnsd zugreifen sollen.
//	debug=on;               // Schaltet den Debugmodus ein
	status_ctl = on;
//  	paranoid=on;             //Diese Option reduziert die Wahrscheinlichkeit eines korrupten
	                         //Zwischenspeichers, macht pdnsd aber weniger effizient.

//	query_method=tcp_udp;	// pdnsd muss mit tcp-Unterstützung kompiliert sein,
				// um diese Option verwenden zu können.
	min_ttl=15m;       // Behalte gespeicherte Abfragen mindestens 15 Minuten.
	max_ttl=1w;	   // Behalte gespeicherte Abfragen höchstens eine Woche.
	timeout=10;        // Globale Zeitüberschreitung (10 Sekunden).
}

/* Mit status_ctl=on und installiertem resolvconf ist diese Konfiguration direkt nutzbar
   Dies ist für mobile Endgeräte empfohlen */
server {
    label="resolvconf";
}

server {
label = "OpenDNS";
    ip = 208.67.222.222
    , 208.67.220.220;
    timeout = 5;
    uptest = query;
    interval = 30m;      // Teste einmal alle 30 Minuten.
    ping_timeout = 300; // 30 Sekunden.
    purge_cache = off;
    exclude = .localdomain;
    policy = included;
    preset = off;
}

/*
// Beispiel für einen zweiten DNS-Server. Zur Verwendung auskommentieren (/* und */ löschen)
server {
label = "GoogleDNS";
    ip = 8.8.4.4
    , 8.8.8.8;
    timeout = 5;
    uptest = query;
    interval = 30m;      // Teste einmal alle 30 Minuten.
    ping_timeout = 300; // 30 Sekunden.
    purge_cache = off;
    exclude = .localdomain;
    policy = included;
    preset = off;
}
*/

source {
	owner=localhost;
//	serve_aliases=on;
//	authrec=off;		//Schaltet das Vorladen der Inhalte der /etc/hosts ab.
	file="/etc/hosts";
}

rr {
	name=localhost;
	reverse=on;
	a=127.0.0.1;
	owner=localhost;
	soa=localhost,root.localhost,42,86400,900,86400,86400;
}

/*
// Hier können Adressen eingetragen werden, die blockiert werden sollen
neg {
	name=doubleclick.net;
	types=domain;   # Damit werden alle Unterseiten der Domain blockiert.
}
*/

Start und Test

Vor dem Start sollte man per Konsole [2] mit folgendem Befehl die aktuelle Antwortzeit abfragen:

dig google.com | grep "Query time" 

Hier dürfte man in den meisten Fällen einen zweistelligen Wert erhalten. Gestartet wird pdnsd nun manuell mit

sudo /etc/init.d/pdnsd start 

Sollte alles problemlos verlaufen, dürfte der Test von oben nun bei Wiederholung einen deutlich kleineren, einstelligen Wert ausgeben.

Problembehandlung

NetworkManager überschreibt resolv.conf

Falls man den NetworkManager verwendet (in Ubuntu Standard), überschreibt dieser den manuellen Eintrag in der resolv.conf. In diesem Fall muss das Programm nm-connection-editor mit Root-Rechten [3] aufgerufen und in den Einstellungen (IPv4/IPv6) die "Methode" auf "Automatisch (DHCP), nur Adressen" umgestellt werden. Dann trägt man unter DNS-Server die Adresse 127.0.0.1 ein und verlässt das Programm wieder.

Fehleranalyse

Um bei Fehlern oder zur weiteren Verbesserung der Geschwindigkeit detailliertere Ausgaben des Programms zu erhalten, kann in den globalen Einstellungen der Debugmodus mit debug=on; aktiviert werden. Nach einem Neustart stellt pdnsd diese Informationen unter /var/cache/pdnsd/pdnsd.debug zur Verfügung.

Hinweis:

Die Option sollte nicht im alltäglichem Gebrauch aktiviert sein, da sie die Geschwindigkeit verringert.

Extras

Gemeinsamer DNS-Server im Netzwerk

Existieren mehrere Computer in einem Netzwerk, kann man pdnsd auch als DNS-Server für alle Computer einrichten. Damit verwenden alle angeschlossenen Rechner einen einzelnen DNS-Zwischenspeicher, was sich wiederholende Abfragen beschleunigt. Hierfür muss lediglich die Server-IP in den globalen Einstellungen auf den Namen des Netzwerkadapters umgestellt werden (in der Regel eth0). Falls eine Firewall aktiv ist, muss man noch Verbindungen über Port 53 erlauben.

Nun kann der Rechner, auf dem pdnsd läuft, auf den anderen Computern im Netzwerk als primärer DNS-Server eingestellt werden.

Werbeblocker

pdnsd erlaubt es, verschiedene Hosts oder Domänen anzugeben, die es nicht abfragen soll. So lässt sich ein einfacher Werbeblocker aufsetzen. Dafür verwendet man die 'neg'-Sektion in der Konfigurationsdatei, wo entsprechende Einträge vorgenommen werden können.

pdnsd-ctl

pdnsd-ctl erlaubt einige zusätzliche Kommandos, unter anderem das Löschen des Zwischenspeichers mittels

sudo pdnsd-ctl empty-cache 

oder dessen Ansicht mit

sudo pdnsd-ctl dump 

Um pdnsd-ctl nutzen zu können, muss die Option status_ctl=on; gesetzt sein.