Linux Hardware

Schneller surfen dank Raspberry Pi als LAN-Proxy

26.07.2015 von David Wolski
Ein lokaler Proxy-Server mit Zwischenspeicher serviert allen Teilnehmern wiederholt abgerufene Webinhalte mit LAN-Geschwindigkeit. Mit dem schlanken Proxy-Server Polipo kann ein Raspberry Pi diese Aufgabe übernehmen.

Der Cache eines Webbrowsers ist darauf optimiert, wiederholt aufgerufene Inhalte aus dem Speicher heraus darzustellen, ohne dabei die angeforderte Datei nochmals vom Webserver zu holen. Wo immer mehrere PCs und Geräte über den Browser Seiten über eine gemeinsame Internetverbindung zapfen, gibt es Überschneidungen bei den abgerufenen Inhalten. Viele Bilder, Dokumente und Script-Frameworks sind stets gleich. Wozu dann also alles doppelt und dreifach durch die Internetanbindung ziehen, wenn es doch die identischen Daten sind?

Hier springt der Proxy-Server als Zwischenspeicher ein, der zuerst die Anfragen der Benutzer annimmt und vergleicht, was schon da ist.

Der Proxy (Stellvertreter) kontaktiert den Webserver anstelle des Browsers, legt dabei die Daten im Zwischenspeicher ab und gibt sie an die Clients weiter. Bei wiederholten Zugriffen kommen die Inhalte dann direkt vom Proxy-Server.


Vorbereitungschritte auf dem Raspberry Pi

Für den Raspberry Pi gibt es inzwischen eine ganze Reihe gut gepflegter Linux-Distributionen: Die Debian-Variante Raspbian, das auf Fedora basierende Pidora und Arch Linux sorgen für Auswahl ganz nach Geschmack und Gewohnheiten.

In diesem Beitrag dient jedoch das von der Raspberry Foundation favorisierte Raspbian als Referenz. Die hier beschriebenen Programmpakete gibt es auch bei anderen, nur unterscheidet sich die Konfiguration im Detail. Damit ein Raspberry Pi in die Rolle als Proxy-Server schlüpfen kann, müssen folgende Vorbereitungen getroffen werden:

Einen geeigneten Proxy-Server wählen

Nicht jeder Proxy-Server läuft auf den begrenzten Ressourcen der Platine optimal. Der bekannteste Proxy-Server für Linux und BSD ist das seit beinahe 20 Jahren gepflegte Programm Squid (Tintenfisch). Squid ist ein echtes Arbeitstier: Die Struktur und Verwaltung des Zwischenspeichers ist auf eine große Zahl von Nutzern angelegt, damit Squid auch Dutzende User im Netzwerk bedienen kann, sofern genügend Ressourcen in Form von Speicher und CPU-Leistung bereitstehen. Auf dem Raspberry Pi ist dies aber nicht der Fall. Der Mini-PC kann als Proxy-Server nach empirischen Erfahrungswerten bis zu fünf Netzwerk-User gut bedienen, danach macht sich vor allem die recht langsame I/O-Leistung der SD-Karte als Bremse bemerkbar. Einen Proxy-Server für höchste Leistungen zu betreiben, wäre also kaum sinnvoll.

Polipo vorbereiten: Die Standardkonfiguration ist für schwache Hardware gut geeignet. Die farblich markierten Zeilen in der „/etc/polipo/config“ müssen Sie aber selbst anpassen.

Außerdem handelt man sich mit Squid auf dem Raspberry nicht dessen Vorteile unter großer Last ein, sondern hauptsächlich Nachteile: Eine komplexe Konfiguration und ein enormer Speicherhunger. Geeigneter ist ein kleinerer Proxy-Server mit Zwischenspeicher, der auch mit bescheidener Hardware zufrieden und für kleine LANs geschaffen ist: Polipo. Dieser Proxy versteht sich bestens darauf, sich mit knappen Ressourcen zu bescheiden. Polipo gelingt dieses Kunststück, indem die Kontrolle über den Cache-Speicher auf ein Minimum begrenzt wird. Einen Index über den Cache-Inhalt spart sich Polipo beispielsweise. Das sorgt für eine bessere Performance, hat aber auch Nebenwirkungen: So weiß Polipo durch den Verzicht auf einen Index nie genau, wie groß der Cache gerade ist, und kann deshalb auch die Cache-Größe nicht auf einen bestimmten Wert begrenzen.

Viel Arbeit für den kleinen Raspberry: Die schlechte I/O-Leistung der SD-Karte bremst große Downloads, wie die CPU-Last in htop zeigt. Erledigen Sie große Downloads besser mit wget.

Weitere Einschränkungen sollen nicht unerwähnt bleiben: Polipo in der ARM-Version für den Raspberry kann keine Dateien größer als zwei GB zwischenspeichern. Wer größere Dateien herunterlädt, muss dies am Proxy vorbei mit einem anderen Browser oder mit wget erledigen.

Polipo installieren und einrichten

Der Proxy-Server Polipo liegt in den Paketquellen bereit und ist mit

sudo apt-get install polipo ana cron

schnell installiert. Die mitgelieferte Standardkonfiguration unter „/etc/polipo/config“ erlaubt noch keine Verbindungen zum Proxy, enthält aber schon die wichtigsten Parameter als zunächst auskommentierte Vorlage. Öffnen Sie zunächst die Konfigurationsdatei:

sudo nano /etc/polipo/config

Im Editor Nano gehen Sie im Abschnitt „### Basic configuration“ zur Zeile „# proxyAddress = „0.0.0.0“. Hier legen Sie fest, unter welcher IP der Proxy-Server auf Verbindungen wartet. Ist die permanente IP des Raspberry Pi beispielsweise „192.168.1.33“, so ersetzen Sie die mit „#“ auskommentierte Zeile so:

proxyAddress = "192.168.1.33"

Gehen Sie nicht weit darunter zur Zeile „# allowedClients = 127.0.0.1“. Diese definiert, welche LAN-Teilnehmer Polipo nutzen dürfen. Die Angabe erfolgt in der CIDR-Notation. Um neben dem Raspberry Pi alle IP-Adressen aus einem LAN aus dem Adressbereich 192.168.1.0 bis 192.168.1.255 (Klasse-C-Subnetz) zuzulassen, ersetzen Sie die vorhandene Zeile so:

allowedClients = 127.0.0.1, 192.168.1.0/24

Ein privates Klasse-C-Subnetz im IP-Bereich 192.168.0.0 bis 192.168.0.255 hätte dann die Angabe „192.168.0.0/24“ und ein privates Klasse-A-Subnetzwerk mit den IPs 10.0.0.0 bis 10.0.0.255 die Notation „10.0.0.0/24“.

Nach dieser Minimalkonfiguration ist Polipo schon einsatzbereit, da die weiteren bereits gesetzten Standardeinstellungen gut geeignet für den Raspberry Pi sind. Als verwendbares RAM nutzt Polipo automatisch ein Viertel des Arbeitsspeichers und hält hier die zuletzt angeforderten Dateien für Cache-Anfragen bereit.

Firefox nutzt hier Polipo auf einem Raspberry mit der IP 192.168.1.33. Bei mehreren Proxys ist die Erweiterung https://addons.mozilla.org/de/firefox/addon/proxy-selector ein guter Umschalter.

Ältere Dateien oder Dateien, die größer als ein Viertel des Arbeitsspeichers sind, landen im Festspeicher im Ordner „/var/cache/polipo“ in einer einfachen Verzeichnisstruktur, die sich nach den Namen angeforderter Webseiten gliedert. Polipo hat keine eigene Cache-Verwaltung für den Zwischenspeicher, und damit die Partition nicht vollläuft, hinterlegt Polipo bei der Installation ein Aufräum-Script unter„/etc/cron.daily/polipo“, das der anfangs gleich mitinstallierte Taskplaner Anacron täglich einmal ausführt und dabei Dateien entfernt, auf die vier Tage nicht mehr zugegriffen wurde. Dateien mit mehr als einem MB werden schon nach einem Tag entsorgt. Mit

sudo service polipo restart

aktiviert man die neue Konfiguration. Sollte Polipo einmal hängen bleiben, was beim Download von Dateien über zwei GB passiert, dann starten Sie den Prozess ebenfalls mit diesem Kommando neu. Polipo lauscht jetzt auf dem Standard-Port 8123. Nun nehmen Sie Polipo noch mit dem Befehl

sudo update-rc.d polipo defaults

in die Runlevel-Konfiguration auf, damit der Proxy beim Booten des Raspberry Pi automatisch startet. Anfangs empfiehlt es sich, die Größe des Disk-Cache von Polipo mit diesem Befehl

sudo du -h /var/cache/polipo/ | tail -n 1

hin und wieder mit zu überprüfen.

Die Clients mit dem Proxy-Server verbinden

Alle Browser im Netzwerk, welche Polipo nutzen sollen, richten Sie nun so ein, dass diese die IP-Adresse des Raspberry Pi als Proxy verwenden.

Beim Firefox finden Sie diese Option beispielsweise unter „Erweitert -> Netzwerk -> Verbindung -> Einstellungen“.
Aktivieren Sie die „manuelle Proxy-Konfiguration“, und tragen Sie im Feld „HTTP-Proxy“ die IP des Raspberry ein, in dieser Beispielanleitung also 192.168.1.33. Den „Port“ dahinter legen Sie auf 8123 fest.

Chrome und Chromium: Da diese Browser den Standard-Proxy des Systems als Voreinstellung nehmen, ist die Browser-Erweiterung „Proxy Helper“ eine sinnvolle Ergänzung.

Google Chrome und Chromium verwenden dagegen die Proxy-Standardeinstellung des Systems. Für diese Browser muss der Proxy-Server daher in den Netzwerkeinstellungen festgelegt werden. Alternativ haben diese Browser aber auch noch eine Proxy-Angabe als Startparameter zu bieten. Der folgende Befehl informiert Google Chrome über den Proxy

/usr/bin/google-chrome --proxyserver="[IP-Adresse]:8123"

und bei Chromium muss es

/usr/bin/chromium-browser --proxyserver="[IP-Adresse]:8118"

lauten. Die kostenlose Erweiterung „ Proxy Helper“ erleichtert die Proxy-Konfiguration dabei erheblich, da sie ein passendes Icon in der Symbolleiste von Chrome/Chromium unterbringt.

Den Proxy ankurbeln: Mit diesen Befehlen starten Sie Polipo mit der geänderten Konfiguration neu und richten ihn für den automatischen Start ein.

Engpässe des Raspberry Pi

Ein Mini-PC auf einer Platine muss bei einem Verkaufspreis von 35 Euro Kompromisse eingehen, selbst wenn sich wie beim Raspberry Pi eine gemeinnützige Stiftung um Entwicklung und Vermarktung kümmert. Auf dem Raspberry Pi macht sich dies mit einer vergleichsweise schlechten I/O-Leistung bemerkbar, da der permanente Speicher nicht als Flash-Chip auf der Platine sitzt, sondern auf einer vergleichsweise langsamen SD-Karte untergebracht ist. Gut schlägt sich dagegen die 10/100-Ethernet-Schnittstelle der Modelle B und B+. Obwohl Ethernet intern über den USB-Hub angeschlossen ist, erreicht der Raspberry Pi hier 90 bis 94 MBit/s, solange die CPU- und I/O-Auslastung niedrig bleiben. Als Router für mehrere Clients im LAN samt NAT und Iptables als Firewall wäre der Raspberry Pi nicht geeignet, da hier zu viel Rechenleistung für den schwächlichen ARM-Prozessor anfiele. Als Mini-Proxy-Server mit Polipo verbessert der Raspberry Pi aber die Surfgeschwindigkeit bei DSL-Internetanbindungen, so lange der Proxy-Server nicht mehr als fünf Client-Geräte gleichzeitig bedienen muss und diese nicht zu große Dateien herunterladen (bis etwa 500 MB pro Datei).

(PC-Welt/ad)