Raspberry Pi: Schnelleres Internet mit DNS-Caching

Zwar ist DNS-Auflösung ein Thema, über das sich die meisten wahrscheinlich keine Gedanken machen, dennoch hat der Vorgang, der aus einer Domain eine IP-Adresse auflöst einen erheblichen Anteil an der Geschwindigkeit beim Surfen. Etwas Linderung kann ein DNS-Cache auf einem Raspberry Pi bieten.

Nachdem ich den Internet-Provider gewechselt habe und nun über eine VDSL-Leitung mit einem Sync von 51,4 Mbit/s downstream und 10 Mbits/s upstream verfüge habe ich mich daran gemacht, die letzten Bremsen zu lösen.

Raspberry Pi Logo
Raspberry Pi Logo
Zuerst ist mir aufgefallen, dass es nach Eingaben einer URL eine kurze Gedenksekunde dauert, bis das Laden der Webseite startet.

Ein Lösungsansatz: ein Raspberry Pi, direkt an die Fritzbox angeschlossen (ich verwende eine Fritz!Box 7490) arbeitet als DNS-Cache (mit pdnsd) und DHCP-Server (da sich in der Fritzbox kein alternativer DNS-Server zur Verteilung via DHCP eintragen lässt).

Raspberry Pi als DNS-Cache

Wenn Raspbian (Debian) verwendet wird und man keinen kompletten DNS-Server wie bind einsetzen will, bietet sich das Paket pdnsd an. pdnsd hat den Vorteil, dass die Cache-Daten nicht nur im RAM, sondern auch auf der SD-Card des Pi. Gecachte DNS-Einträge bleiben somit auch nach einem Neustart des Pi erhalten. Die Konfiguration von pdnsd ist einfach, die wichtigsten Anpassungen in der /etc/pdnsd.conf, die meisten Werte habe ich auf ihren Standards gelassen:

perm_cache=8192; // Cache-Größe in Kilobyte (hier: 8 Megabyte)
cache_dir="/var/cache/pdnsd"; // Cache-Verzeichnis
server_ip = 0.0.0.0; // IP, auf der gelauscht wird: 0.0.0.0 bedeute auf allen IPs

Damit Anfragen, die noch nicht im Cache liegen beantwortet werden können, müssen auch für pdnsd DNS-Server konfiguriert werden. Dabei wird per Default auf das Programm resolvconf zurückgegriffen, die Nameserver müssen dann über die Datei /etc/network/interfaces konfiguriert werden. Dort wird an einem Interface-Eintrag die Zeile dns-nameservers 8.8.8.8 8.8.4.4 hinzugefügt:

auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
dns-nameservers 217.0.43.161 217.0.43.177 8.8.8.8 8.8.4.4

Mit dieser Konfiguration bekommt der Raspberry Pi die IP-Adresse 192.168.0.10, verwendet als Gateway die Fritzbox (192.168.0.1) und die Telekom-DNS-Server 217.0.43.161 und 217.0.43.177 sowie die öffentlichen DNS-Server von Google (8.8.8.8 und 8.8.4.4). Läuft pdnsd, kann man mit sudo /etc/init.d/pdnsd status erfahren, wie der Cache-Status ist:

Cache status:
=============
8192 kB maximum disk cache size.
613647 of 8398848 bytes (7.31%) memory cache used in 2275 entries.

DHCP auf Raspberry Pi

Damit die Einstellungen auch von allen Clients ohne zusätzlichen Konfigurations-Aufwand übernommen werden, muss man den DHCP-Server der Fritzbox deaktivieren und einen alternativen DHCP-Server auf dem Raspberry Pi installieren:

sudo aptitude install isc-dhcp-server

Die Konfiguration wird dann über die Datei /etc/dhcp/dhcpd.conf realisiert. Da auch diese gut Dokumentiert ist mit Kommentaren gehe ich hier wieder nur auf die wichtigsten Punkte ein:

option domain-name-servers 192.168.0.10; // IP unseres DNS-Caches
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.70 192.168.0.100;
option domain-name-servers 192.168.0.10;
option domain-name "fritz.box";
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
default-lease-time 600;
max-lease-time 7200;
}

Damit bekommen alle DHCP-Clients eine IP zwischen 192.168.0.70 und 192.168.0.100 sowie die korrekten Daten die gebraucht werden, um den DNS-Cache auf dem Raspberry Pi zu verwenden. DNS-Auflösung von bereits besuchten Domains läuft innerhalb von 2 Millisekunden ab (was im Prinzip dem doppelten Ping in meinem Netzwerk ist).

DNS-Cache auf Raspberry Pi – Fazit

Zwar mag es den meisten nicht weiter wichtig vorkommen – aber für einen Heavy-Nutzer wie mich macht es durchaus einen Unterschied, ob die DNS-Auflösung ein paar Millisekunden schneller abläuft. Größter Vorteil: das Surfen fühlt sich „knackiger“ an, gerade auf Webseiten die man häufiger aufruft und bei denen die DNS-Daten sicher im Cache vorhanden sind. Ich habe die minimale Cache-Dauer auf einen Tag eingestellt und die maximale auf eine Woche. Wenn nun eine Webseite die IP-Adresse wechselt, was zum Beispiel bei einem Serverumzug der Fall ist. In so einem Fall muss der pdnsd-Cache zurückgesetzt werden.

Nebenher-Erkenntnis: der Raspberry Pi lässt sich stabil am USB-Anschluss der Fritz!Box 7490 betreiben, ein gesondertes Netzteil für den Kleinstrechner wird für diese Konfiguration also nicht benötigt. Eine weitere Nutzungsmöglichkeit bzw. Erweiterung dieses Setups ist die Verwendung des Raspberry Pi als Privoxy-Server im Heimnetzwerk.