In diesem HowTo möchte ich Euch zeigen, wie man aus den Zutaten
Android,
OpenVPN und der alternativen Routerfirmware
Tomato eine anständige VPN-Suppe kocht.
Wichtiger Warnhinweis: In diesem HowTo werden teilweise tiefgreifende Änderungen am und im Android-OS bzw. dem Router durchgeführt. Führt die nachfolgenden Schritte nur aus, wenn ihr auch wisst was ihr da tut und ihr euch sicher seid! Für Schäden an Hard- und Software übernehme ich keine Haftung!
Ich möchte in dieser ersten Version versierte Nutzer ansprechen, die von der Materie schon etwas Ahnung haben. In einer späteren Version werde ich die Schritte wahrscheinlich näher erläutern und erklären, um auch technisch nicht so fortgeschrittene Nutzer anzusprechen.
1. Die Hardware
1.1 Der Router
Als Router kommt bei mir ein
Linksys WRT54GL v1.1 zum Einsatz. Das Modell ist zwar schon etwas älters, hat sich die offene Firmware aber zu einem wahren Mod- und Firmware-Wunder entwickelt.
1.2 Das Smartphone
Seit Dezember 2011 nenne ich ein (gerootetes)
Samsung Galaxy Nexus mit zurzeit Android ICS 4.0.4 mein Eigen. Auf das Rooten werde ich
nicht eingehen!
2. Die Software
2.1 Das Betriebssytem
Ich führe alle Windows-basierten Schritte auf einem System mit installiertem Windows 7 Professional x64 und administrativen Berechtigungen (angemeldet als Administrator) aus. In der Win7 x86 Version und/oder anderen Betriebssystemen können Pfade und Befehle anders lauten. Darauf werde ich aber nicht eingehen!
2.2 Die Tomato Firmware
Bei der
Tomato Firmware handelt es sich um eine schlanke Linux-Distribution, die für einige WLAN-Router verfügbar ist. Durch zusätzliche Funktionen wie z.B. iptables oder QoS ist diese Firmware meist viel mächtiger als die vorinstallierten Herstellerfirmwares. Die originale Tomato Firmware bringt jedoch keine Unterstützung für OpenVPN mit. Aus diesem Grund nehmen wir die
TomatoUSB VPN Version.
Ob Euer Router unterstützt wird könnt ihr
hier herausfinden.
2.3 OpenVPN
Dieses Zitat beschreibt es eigentlich am besten.
2.4 Benötigte Android Apps
Um eine OpenVPN-verschlüsselte Verbindung zum Router aufbauen zu können, benötigen wir einige Apps:
- Superuser - wird benötigt um den nachfolgenden Apps die entsprechenden root-Rechte zu gewähren
- BusyBox - bringt diverse Unix-Tools mit und kann als Befehlssammlung verstanden werden
- OpenVPN Installer - installiert die OpenVPN Binaries ins /system/xbin-Verzeichnis auf dem Androiden
- OpenVPN Settings - sorgt dafür, dass wir die nachher erstellte OpenVPN-Config auch anwenden können
3. Die Firmware flashen
Da ich meinen Router bereits vor langer langer Zeit mit der Tomato Firmware geflashed habe, kann ich keine Anleitung für andere Firmwares geben. Mi scusi!
Ladet Euch von der
TomatoUSB Homepage die VPN-Version mit dem Kernel 2.4 (stable) herunter und entpackt die RAR Datei.
Startet den Browser Eurer Wahl, gebt die IP-Adresse des Routers ein und meldet Euch an. Navigiert zum Punkt
Administration > Upgrade und klickt auf den
Choose File Button. Wählt jetzt die vorhin entpackte TRX Datei aus und klickt auf
Upgrade. Bestätigt die Abfrage mit einem Klick auf
OK. Die Firmware wird jetzt installiert und der Router startet nach etwa einer Minute automatisch neu.
Nach dem Neustart solltet ihr im Menü zwei weitere Punkte finden:
USB and NAS und
VPN Tunneling
4. OpenVPN installieren
4.1 Windows
Im
OpenVPN Downloadbereich ladet Ihr den Windows Installer der Version 2.1.4 herunter und installiert diesen mit den Standardeinstellungen. Bei der Frage, ob ein TAP-Win32-Netzwerkadapter installiert werden soll, klickt Ihr auf
Installieren.
(Hier bin ich mir nicht ganz sicher, ob das wirklich nötig ist. Ich habe es bisher aber immer mit installiert.)
Warum nicht die aktuellste Version? Weil ich meine CA (Certification Authority; Zertifizierungsstelle) noch unter 2.1.4 aufgebaut habe und die aktuelle Version 2.2.2 nur
Pkcs11 Unterstützung mitbringt. Dafür habe ich im Moment aber noch keine Verwendung.
4.2 Android
4.2.1 BusyBox
Ihr habt auf Eurem Android bereits root und die Superuser App ist installiert? Wunderbar! Startet jetzt die
BusyBox App und gewährt ihr root-Berechtigungen. Wählt
BusyBox 1.20.0 als zu installierende Version und
/system/xbin als Installationsverzeichnis aus und drückt auf
Install. Nach ein paar Sekunden sollte BusyBox melden, dass alles erfolgreich installiert wurde.
4.2.2 OpenVPN Installer
Hier das gleiche Spiel.
OpenVPN Installer App starten, root gewähren und auf
Install drücken. Die jetzt auftauchende Sicherheitswarnung lesen, verstehen (!) und wieder auf
Install drücken. Als Installationsverzeichnis wählt Ihr auch hier wieder
/system/xbin aus. Ist alles installiert, sollte es so aussehen:
5. Zertifizierungsstelle und Zertifikate erstellen
5.1 Zertifizierungsstelle erstellen
Startet eine Admin-Kommandozeile, wechselt in das Verzeichnis
C:\Program Files (x86)\OpenVPN\easy-rsa und gebt als ersten Befehl
init-config ein.
Durch init-config wurden zwei Dateien mit dem Namen
var.bat und
openssl.cnf erstellt. Die
var.bat öffnen wir jetzt mit Notepad oder Notepad++ (meine Empfehlung!).
In Zeile 6 ändern wir den Pfad in
%ProgramFiles (x86)%\OpenVPN\easy-rsa um. Ab Zeile 31 müssen die Daten an uns angepasst werden. Ein Beispiel:
Danach wird die Datei gespeichert und in der Kommandozeile ausgeführt.
Der nächste Befehl,
clean-all, erstellt Umgebungsvariablen und benötigte Ordner. Die Fehlermeldungen können ignoriert werden.
Mit dem Befehl
build-ca erstellen wir nun unsere CA.
Wir werden jetzt aufgefordert einige Daten (Ländername, Bundesland, Stadt, ...) einzugeben. Da wird diese Daten bereits in der
vars.bat angegeben haben, können wir mit
ENTER bestätigen. Ganz wichtig: Bei
Common Name muss etwas eingegeben werden. Gebt dort euren Namen oder so an...
Das wars. Im Unterzeichnis
easy-rsa/keys sind jetzt zwei Dateien (ein Root CA Zertifikat und ein Root CA Schlüssel) erstellt worden.
5.2 Zertifikate erstellen
5.2.1 Serverzertifikat erstellen
Gebt in der Kommandozeile den Befehl
build-key-server tomato ein. Das
tomato kann beliebig ersetzt werden. Achtet nur darauf, dass der jetzt vergebene Name später exakt gleich beim
Common Name eingegeben werden
muss. Alle anderen Abfragen können wieder mittels
ENTER bestätigt werden. Am Ende noch zweimal "Y" drücken damit das Zertifikat zertifiziert wird.
Im Verzeichnis
easy-rsa/keys finden wir jetzt drei Dateien (crt, csr und key) mit dem vorhin vergeben Namen. Hinter
crt versteckt sich das Zertifikat, hinter
key der Schlüssel.
5.2.2 Clientzertifikat erstellen
Anderer Befehl, gleiche Vorgehensweise. Um den Prozess zu starten, gebt in die Kommandozeile
build-key galaxynexus ein. Auch hier kann wieder ein frei wählbarer Name an Stelle von
galaxynexus vergeben werden. Zum Schluss wieder zweimal mit "Y" bestätigen.
Dieser Prozess kann beliebig oft wiederholt werden. Es muss nur jeweils ein anderer Name bei
build-key und beim
Common Name gewählt werden. Für jeden Client werden, wie beim Server, drei Dateien im
easy-rsa/keys-Verzeichnis erstellt.
Fehlermeldungen können auch hier wieder ignoriert werden.
5.2.3 Diffie Hellmann Datei erstellen
Was genau ist Diffie Hellman (DH)?
Read it!
Wir erstellen uns jetzt jedenfalls eine DH-Datei. Der Befehl dafür lautet
build-dh.
Auch hier dürfen Fehlermeldungen wieder gekonnt ignoriert werden.
Warum der hier immer an unterschiedlichen Stellen abbricht? Ich weiß es nicht... Funktioniert trotzdem alles wie gewollt!
Die soeben erstelle Datei (dh1024.pem) finden wir wieder im
easy-rsa/keys-Verzeichnis.
6. DynDNS Dienst einrichten
DynDNS? Toller Dienst! Man muss sich nie wieder IP-Adressen merken und der Router kann immer über einen DynDNS-Alias angesurft werden. Genau das richtige für uns! Also Account auf
DynDNS.com erstellen und unter
My Services > Host Services einen
Hostname erstellen. Bei
Service Type unbedingt
Host with IP wählen. Der Rest, insbesondere der Hostname, ist vollkommen egal.
Im Router könnt Ihr den Dienst dann unter
Basic > DDNS einrichten. Bei
IP address einfach
User WAN IP Address auswählen und dann Euren Login sowie Hostnamen unter
Dynamic DNS 1 eingeben. Fertig.
7. OpenVPN Konfigurationsdatei erstellen
Geht in das Verzeichnis
C:\Program Files (x86)\OpenVPN\sample-config und öffnet dort mit Notepad++ die Datei
sample.ovpn. Löscht den kompletten Inhalt aus der Datei und befüllt es mit diesen Daten:
In Zeile 4 gebt Ihr dann Euren DynDNS Hostnamen an, den Port lasst Ihr auf 1194. Im zweiten Abschnitt müssen dann nur noch die Namen des Zertifikats (Zeile 13) und Schlüssels (Zeile 14) angepasst werden. Alles andere kann so bleiben. Speichert diese Datei unter einem neuen Dateinamen.
8. Tomato für OpenVPN einrichten
Öffnet Euren Browser, surft die Adminoberfläche des Routers an und geht dort ins Menü
VPN Tunneling > Server. Wählt dort
Server 1 > Basic aus und übernehmt die Einstellungen wie im Bild.
Geht jetzt auf
Advanced. Auch hier übernehmt Ihr wieder die unten angegeben Einstellungen.
Im letzten Schritt müssen noch die erstellten Zertifikate und Schlüssel eingefügt werden. Klickt dazu auf
Keys und fügt die Schlüssel ein. Öffnet das entsprechende Zertifikat bzw. den Schlüssel aus dem
easy-rsa/keys-Verzeichnis mit Notepad++ und kopiert den Inhalt in das entsprechende Feld. Bei der
tomato.crt wird nur das Zertifikat zwischen
--BEGIN CERTIFICATE-- und
--END CERTIFCATE-- benötigt.
Speichert die gemachten Einstellungen mittels Klick auf
Save und startet danach den VPN Server durch einen Klick auf
Start Now.
9. Den Androiden einrichten
Erstellt auf dem Androiden einen Ordner
openvpn auf der root-Ebene. Kopiert in diesen die Dateien
galaxynexus.key,
galaxynexus.crt und
ca.crt (aus
easy-rsa/keys) und die oben erstellte ovpn-Datei (aus
sample-config). Die Datei
ca.crt kommt zusätzlich noch einmal direkt in die root-Ebene.
Geht jetzt in die Einstellungen in den Punkt
Sicherheit > Von Speicher installieren. Dort sollte jetzt ein Zertifikat
ca angezeigt werden. Installiert es.
Die
ca.crt aus der root-Ebene ist danach weg. Also nicht wundern.
Startet die
OpenVPN Settings App. Unter
OpenVPN configurations sollte die ovpn-Dateiaufgelistet sein.
Aktiviert erst OpenVPN, ruft dann das Kontextmenü der ovpn-Datei auf, wählt dort
Preferences > Enable Logging und bestätigt indem Ihr die
Zurück-Taste nutzt.
Jetzt kommt der große Moment. Deaktiviert auf dem Androiden WLAN und aktiviert mobiles Internet. Sobald ihr verbunden seid, aktiviert ihr die ovpn-Config. Jetzt kann es ein bisschen dauern, meistens benötigt der Punkt
auth am längsten. Aber nach ein paar Sekunden solltet Ihr in der Statusleiste die gewünschte Meldung
tomato.ovpn: Connceted sehen. Unter der ovpn-Config wird euch auch noch angezeigt mit welcher IP Ihr Euch nun im VPN Subnet befindet.
Startet jetzt auf Eurem Rechner eine Kommandozeile und setzt einen
ping auf die VPN-IP ab.
Auf Eurem Android könnt Ihr nun auf z.B.
http://www.meineip.de gehen und gucken was für eine IP Euch angezeigt wird. Bei mir ist es die von meinem VDSL-Anschluss in meiner Wohnung und nicht mehr die vom mobilen Internet.
Eine genaue Übersicht findet Ihr im Router. Geht dort auf
VPN Tunneling > Server > Server 1 > Status für alle weiteren Infos.
---
Fragen? Fragen!