Open-Source Reverse-Proxy PageKite für Linux, Android und den Rest.

1715
2

Viele von euch werden sicherlich schon beim sperrigen Titel dieses Beitrags aufgehört haben zu lesen, aber bleibt vielleicht besser mal dran, denn PageKite finde ich eine spannende und gut gemachte Sache. Worum geht es? Um von Rechner A auf Rechner B über den Browser (letztendlich http), muss auf Rechner B ein Webserver laufen und B muss auch aus dem Internet erreichbar sein. Vielen Rechner mit Internetzugang mangelt es aber genau an letzten Punkt. Sei es, dass ihr im Studentenwohnheim hinter einem NAT-Router sitzt und keine Portweiterleitung setzen könnt. Sei es dass ihr auf dem Smartphone oder Laptop mit UMTS unterwegs seid und der Provider euch ebenfalls hinter ein NAT steckt und somit keine Serverdienstem möglich sind. PageKite ist ein Reverse-Proxy, der eine Brücke zwischen euch und dem Netz aufbauen kann, so dass ihr auch in solchen Fällen Serverdienste anbieten könnt. Sowohl Client wie auch Server (Front- und Backend) sind Open-Source, zudem gibt es auch einen kommerziellen Dienst des Projekts.

Dass ihr einen SSH-Server wie SSHDroid, einen Web-Server wie kWS Android Web Server oder auch eine IP Webcam auf eurem Androiden laufen lassen könnt, ist ja keine tolle Neuigkeit. Doch werden die Dienste bei den meisten von euch nur im heimischen WLAN funktionieren. Unterwegs im UMTS Netz könnte ihr die Server nicht aufrufen, weil ihr bei den meisten Mobilfunkverträgen keine öffentliche IP bekommt.

Bei O2 liegt die IP des Handys im Bereich der privaten Netze.

Stattdessen steckt euch der Provider in sein eigenes Netz mit einer privaten IP-Adresse und routet eure Daten über einen Knoten ins Internet. Ihr erkennt das ganz gut, wenn ihr euch unter  „Einstellungen -> Über das Telefon -> Status“ die IP des Telefons im Mobilfunknetz anseht. Steht dort etwas von 10.x.x.x, 172.16.y.y oder eben 192.168.z.z, dann kann man das Smartphone (oder auch den über UMTS eingewählten Computer) nicht aus dem Internet heraus ansprechen.

PageKite überwindet nun diese Trennung indem das Back-End (also quasi der PageKite-Client) eine aktive Verbindung ins Internet zu einem Front-End-Relay (aka Server) aufbaut. Dieser richtet einen DNS-Domainnamen für das Back-End ein und leitet eingehende Pakete durch. Dadurch wird euer Smartphone oder euer UMTS-Notebook aus dem Internet erreichbar, auch wenn der Mobilfunkanbieter dies eigentlich gar nicht ermöglicht. Auf der FOSDEM 2011 hat die treibende Kraft Bjarni Runar Einarsson ein bisschen aus dem Nähkästchen geplaudert, schaut euch doch mal die Aufzeichnung des Vortrags an, wenn ihr Fragen zum Prinzip habt.

Das selbe Prinzip lässt sich nun nicht nur für Mobiltelefone anwenden, sondern auch für Leute die eben nicht „richtig“ im Netz hängen.  Habt ihr im Studentenwohnheim keine Möglichkeit eine Portweiterleitung einzurichten, dann erspart euch PageKite die aufwändige Konfiguration von Reverse-SSH-Tunnels oder andere Workarounds. PageKite gibt es für Windows, MacOS X und natürlich Android und Linux und lässt sich eigentlich recht einfach einrichten.

Selber hosten oder PageKite.net buchen

PageKite ist komplett freie Software, sowohl der Client- wie auch der Server-Part stehen unter der GPL. Ihr könnt daher PageKite auf eurem eigenen Root-Server und unter einer eigenen Domain betreiben, ihr habt so volle Kontrolle über den Dienst. Da der Mittelsmann trotz Verschlüsselung durchaus in die Daten reinschnuppern könnte, ist das für viele User sicherlich interessant. Allerdings bieten die Jungs ihren Reverese-Proxy auch als Dienstleistung an, so dass man sich die Einrichtung ersparen kann.

Zum Testen bekommt man 31 Tage und 2,5 GByte Datenvolumen.

Auf pagekite.net (oder aus der App heraus, dazu später mehr) könnt ihr euch einen Account erzeugen. Der erste Monat ist kostenlos und beinhaltet einen Traffic von etwa 2,5 GByte. Danach gibt es verschiedene Tarife, wobei ihr in Ein-Dollar-Schritten an der Preisschraube drehen könnt. Je mehr Geld man investiert, desto länger läuft die Buchung, desto mehr Daten könnt ihr übertragen und desto mehr Features bekommt man. Entwickler freier Software, die etwas mit dem Internet zu tun hat, bekommen von PageKite einen kostenlosen Deal angeboten.

Generell finde ich das Projekt wirklich clever durchdacht. Client/Server und auch das PageKite-Protocol sind Open-Source, die Dienstleistung (mit Hilfe deren die Entwicklung des Projekts letztendlich finanziert wird) ist proprietär. Hoffentlich geht die Rechnung am Ende für die Entwickler auf, soooo groß ist der Kundenkreis in meinen Augen nicht, aber ich kann mich da ja auch verschätzen.

PageKite für Android

Nach dem ersten Start muss man PageKite einrichten.

Am interessantesten ist PageKite sicherlich für das Android-Handy oder -Tablet. So könnt ihr zum Beispiel via SSH auf das Handy zugreifen (bei einem gerooteten Gerät auf das komplette Dateisystem), egal ob es gerade im WLAN- oder UMTS-Netz hängt. Oder ihr schnappt euch einen ausgedienten Androiden und setzt ihn als kleine IP-Webcam ein. Oder das alte Handy dient also Notfallzugang ins eigene Netz…

Die Android-App zu PageKite bekommt ihr wie gewohnt aus dem Google Play Store, sie ist wie gesagt kostenlos und Open-Source. Bevor ihr starten könnt, bietet euch die App an einen Account bei PageKite.net zu erzeugen. Ihr könnt diese Frage abbrechen, müsst aber dann erstmal selber im Netz einen PageKite-Server aufsetzen, dazu bringe ich später auch noch ein bisschen was. Zum Testen würde ich erstmal den Weg über PageKite.net gehen.

Aus der App erzeugt man einen Account bei PageKite.net.

Nach dem Eintragen eurer Account-Informationen bekommt ihr eine E-Mail mit einem Aktivierungslink zugeschickt, die sich bei mir ein bisschen Zeit lies. Erst nachdem ihr euren Account aktiviert habt, klappt die Geschichte. Ungeduldige bekommen keine Fehlermeldung angezeigt, es scheint alles fertig zu sein, doch Pakete werden erst nach der Aktivierung durchgeleitet.Nach der Aktivierung müsst ihr PageKite auf dem Handy noch ein bisschen einrichten. Erstmal braucht ihr einen SSH oder einen HTTP-Webserver. SSHDroid oder kWS Android Web Server haben sich bei mir in der Vergangenheit bewährt. Beachtet bitte, dass SSHDroid von Haus aus so konfiguriert ist, dass der Dienst nur im WLAN läuft. In den Einstellungen könnt ihr jedoch festlegen, dass der Dienst durchläuft. Das ist später wichtig, da ihr ja die Ganze Aktion im UMTS-Netz testen wollt.

Ebable PageKit schmeißt den Reverse Proxy letztendlich an.

In den Server Settings habt ihr nun die Möglichkeit die von euren Serverdiensten benutzen Ports einzutragen, in der Grundeinstellung ist erstmal gar nichts eingetragen. Für SSH-Droid wären dies in der Standardeinstellung Port 22, für einen Webserver wie den erwähnten kWS Android Web Server die Port Nummern 80 oder 443 für verschlüsseltes HTTPS. Eine Null setzt den jeweiligen Dienst zurück, so dass er wieder inaktiv wird und keine Weiterleitung via PageKite mehr stattfindet. Je nach App sieht das allerdings auch immer wieder anders aus, die vorhin erwähnte  IP Webcam schnappt sich zum Beispiel in ihrer Standardeinstellung die Port-Nummer 8080 für HTTP, so läuft das Programm dann auch ohne Root-Rechte. Mehr als die drei Dienste lassen sich aktuell in der App allerdings nicht einrichten.

Aktuell wird http, https und ssh als Protokoll unterstützt.

Danach solltet ihr die PageKite mit „Enable PageKite“ aus der Startseite der App heraus scharf schalten können. Sobald ihr die Meldung „Kites are flying and all is well“ als Status auf dem Schirm habt, solltet ihr euer Android-Smartphone oder -Tablet über die Adresse „euername.pagekite.me“ über SSH oder eben auch HTTP/HTTPS erreichen können. Voraussetzung ist natürlich, dass ihr die entsprechenden Dienste auch auf eurem Handy eingerichtet und gestartet habt, sonst antwortet am anderen Ende niemand. Achtet aber auch bitte drauf die Dienste entsprechend zu sichern, SSHDroid hat nicht gerade wirklich gesunde Standardeinstellungen. Setzt auf jeden Fall ein ordentliches Passwort für den root-User oder geht gleich den Weg über Public-Keys.

PageKite unter Ubuntu/Debian

Unter Ubuntu/Debian möchte ich den Bogen zu Linux und Open-Source wieder schließen. In der Einleitung hatte ich geschrieben, dass ihr PageKite auch selber als Client/Server betreiben könnt. Wer einen kleinen Server im Netz (oder vielleicht auch einen Raspi?) laufen hat, der kann sich überlegen seine eigene PageKite-Instanz aufzusetzen, so seid ihr nicht von Dritten abhängig und spart zudem auch Geld, kostenlos bietet PageKite.net seine Dienstleistung ja nicht an.

Für Linux bietet PageKite fertige Binarys und RPM- wie auch DEB-Pakete an. Für Debian/Ubuntu gibt es zudem auch eine Paketquelle, aus der man die Anwendung wie gewohnt problemlos installieren kann, daher führe ich hier an dieser Stelle die entsprechenden Schritte an. Weitere Informationen bekommt ihr unter PageKite for Linux and BSD auf der Homepage.

$ echo deb http://pagekite.net/pk/deb/ pagekite main | sudo tee -a /etc/apt/sources.list
$ sudo apt-key adv --recv-keys --keyserver keys.gnupg.net AED248B1C7B2CAC3
$ sudo apt-get update
$ sudo apt-get install pagekite

Danach könnt ihr auf Server und Client die Drachen steigen lassen. Die Befehle sehen in etwa so aus, wobei dies nur ein Quick&Dirty-Test ist. Ausführliche Informationen zum Einrichten der Anwendung unter GNU/Linux findet ihr im Wiki PageKites. Solltet ihr wirklich euren eigenen PageKite-Server aufsetzen wollen, dann würde ich die Konfiguration abspeichern und auch dafür sorgen, dass die Verbindung verschlüsselt wird.

Server

$ pagekite --clean --isfrontend --ports=12345 --protos=http --domain=http,https:yourdomain.net:geheim
>>> Hello! This is pagekite v0.5.3a.                            [CTRL+C = Stop]
    This is a PageKite front-end server.                                       
     - Listening on *:12345                                                    
    Connecting to front-end x.x.x.x:x ...                                      
~<> Flying: http://yourdomain.net/                                              
 << pagekite.py [flying]   Kites are flying and all is well.

Client

$ pagekite --clean --frontend=yourdomain.net:12345 --service_on=http:yourdomain.net:localhost:80:geheim
>>> Hello! This is pagekite v0.5.3a.                            [CTRL+C = Stop]
    Connecting to front-end 11.222.33.444:12345 ...                           
     - Protocols: http                                                         
     - Ports: 12345                                                            
~<> Flying localhost:80 as http:/yourdomain.net/                               
 << pagekite.py [flying]   Kites are flying and all is well.

Sollte euch das Terminal nicht sonderlich gefallen, dann gibts als Client-Alternative auch noch den PageKite Manager. Das graphische Frontend steckt allerdings noch nicht in den Paketquellen des Projekts, sondern muss von Hand runtergeladen werden. Bequeme laden es über die nächsten zwei Befehle nach ~/bin und machen es gleich ausführbar.

$ wget https://pagekite.net/pk/pagekite-gtk.py -O ~/bin/pagekit-gtk
$ chmod +x ~/bin/pagekit-gtk

Alles in allem finde ich PageKite eine clevere Sache. Im Zusammenspiel mit DynDNS und einem Raspberry Pi kann man sich den Dienst sicherlich auch recht einfach zu Hause einrichten. Interessante Anwendungszwecke gibt es mit Sicherheit einige.

Mit pagekit-gtk gibt es auch eine graphische Oberfläche für den Dienst.
Dank dem PageKit Manager müsst ihr nicht auf das Terminal zurückgreifen.

2 Kommentare

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein