Lokaler DNS-Cache

Eine nicht allzu seltene Zugangsbarriere zum Internet ist die Bandbreite. Die Barriere kann einerseits darin bestehen das man einfach zuwenig Bandbreite besitzt oder aber die Bandbreite zu “teuer” ist, wen man zum Beispiel nur 1 GByte Traffic pro Monat frei hat.
Etwas nervig sind die stetigen DNS-Abfragen die jede Applikation für alles in das weltweite Netz absetzt. Das erzeugt auf der einen Seite Traffic und auf der anderen Seite kostet es wertvolle Zeit, wen ständig DNS-Abfragen abgesetzt werden müssen.
Abhilfe schafft hier ein lokaler DNS-Server der die Abfragen sauber beantwortet und für zukünftige Abfragen vorhält. Damit wird auf der einen Seite das Netz entlastet und auch der anderen Seite gibt es etwas Performance.
Zuerst installiert man sich “pdns”, ein Caching-DNS-Server.

apt-get install pdnsd

Dannach muss man selbigen noch konfigurieren in der Datei /etc/pdnsd.conf . Als DNS-Server, welche uns die wirklichen Abfragen beantworten sollen wählen wir hier die öffentlichen DNS-Server von Google 8.8.8.8 und 8.8.4.4. . Man kann hier auch andere öffentliche DNS-Server wählen. Damit die /etc/hosts nicht ignoriert wird, wurde eine zusätzliche Quelle auf die /etc/hosts zeigend eingetragen.
Zusätzlich blockieren wir hier noch einige DNS-Abfragen für bestimmte Domains, die ständig nerven in Form von “Tracking” “Ads” “Facebook” und Bandbreite kosten. Positiver Nebeneffekt dieser Art des “Blockings” ist, das man Browser explizit nicht konfigurieren muss und man seinen Applikationen lokal die “nicht Existenz” etwaiger Seite wie “facebook.com” “vorgauckeln” kann. Dies kann unter Umständen auch permanent gewünscht sein 🙂 .
Wir haben pdnsd hier so konfiguriert das er lokal auf der IP 127.0.0.53 auf Port 53 lauscht. Damit der DNS-Server auch verwendet wird kann man unter Ubuntu im Network-Manager die Verbindung so einstellen, das bis auf die Standard-Einstellungen der DNS-Server von Hand eingestellt werden kann. Dieser Modus nennt sich “Automatisch (DHCP), nur Adressen”. Als DNS-Server gibt man hier “127.0.0.53” an.

 
Es folgt hier die /etc/pdns.conf ..
 

global {
	perm_cache=256000;
	cache_dir="/var/cache/pdnsd";
	run_as="pdnsd";
	server_ip = 127.0.0.53;
	status_ctl = on;
	paranoid=on;
	min_ttl=15m;
	max_ttl=1w;
	timeout=10;
}
server {
	label = "google-public-dns";
	ip = 8.8.8.8, 8.8.4.4;
	timeout = 15;
	uptest = ping;
	interval = 30m;
	ping_timeout = 300;
	purge_cache = off;
	exclude = ".localdomain", ".local";
	policy = included;
	preset = off;
}
source {
	owner=localhost;
	file="/etc/hosts";
}
neg {
	name=ivwbox.de;
	types=domain;
}
neg {
	name=doubleclick.net;
	types=domain;
}
neg {
	name=google-analytics.com;
	types=domain;
}
neg {
	name=facebook.com;
	types=domain;
}

Mit einem beherzten “service pdnsd restart” als Root auf der Shell lädt man die neue Konfiguration. Dannach muss man die Netzwerkverbindung noch konfigurieren. Testen kann man die Funktion von pdns indem man mit ‘nslookup’ eine DNS-Abfrage an 127.0.0.53 absetzt.

root@victor:~# nslookup
> server 127.0.0.53
Default server: 127.0.0.53
Address: 127.0.0.53#53
> de.wikipedia.org
Server:		127.0.0.53
Address:	127.0.0.53#53
Non-authoritative answer:
de.wikipedia.org	canonical name = wikipedia-lb.wikimedia.org.
wikipedia-lb.wikimedia.org	canonical name = wikipedia-lb.pmtpa.wikimedia.org.
Name:	wikipedia-lb.pmtpa.wikimedia.org
Address: 208.80.152.201

Man wird merken, das die erste Abfrage mit einer schmalen Anbindung ein paar Sekunden dauern wird. Startet man nach erfolgreichen Beantworten der Abfrage selbige neu, wird diese quasi in Nullzeit beantwortet und geht nichtmehr über das Netz. Würde man jetzt hier ohne “pdnsd” die Abfrage absetzen, würde es wiederholt ein paar Sekunden dauern und wertvolle Bandbreite kosten.
Zusätzlich kann man ungewünschte Domains schon auf DNS-Ebene blocken. Beliebte Kandidaten sind hier bekannte Tracking-Systeme wie “ivwbox.de” oder “google-analytics.com”. Hier könnte man z.Bsp. auch “googleadservices.com” und “googlesyndication.com” hinzufügen, um Werbeeinbledungen des bekannten AdSense-Netzwerks von Google schon auf DNS-Ebene zu verhindern.