[HowTo] Android: OpenVPN Einwahl via Tomato

W

wuerg

Stammgast
26
07.11.2012 - v2 online
Ein paar Schritte überarbeitet; u.a. wurden die Android-Apps durch eine einzige App ersetzt. Die alten Schritte befinden sich in Spoilern.


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 JB 4.1.2 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
OpenVPN ist ein Programm zum Aufbau eines Virtuellen Privaten Netzwerkes (VPN) über eine verschlüsselte TLS-Verbindung.
(Quelle: 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 zwei Apps:

  • Superuser - wird benötigt um den nachfolgenden Apps die entsprechenden root-Rechte zu gewähren
  • OpenVPN für Android - der OpenVPN-Client für Android
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
Startet die OpenVPN für Android-App und gewährt ihr root. Vorerst sind hier keine weiteren Schritte notwendig.

v1
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.

android-openvpn-tomato-01.png


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:

android-openvpn-tomato-02.png



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.

android-openvpn-tomato-03.png


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!).

android-openvpn-tomato-04.png


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:

android-openvpn-tomato-05.png


Danach wird die Datei gespeichert und in der Kommandozeile ausgeführt.

android-openvpn-tomato-06.png


Der nächste Befehl, clean-all, erstellt Umgebungsvariablen und benötigte Ordner. Die Fehlermeldungen können ignoriert werden.

android-openvpn-tomato-07.png


Mit dem Befehl build-ca erstellen wir nun unsere CA.

android-openvpn-tomato-08.png


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...

android-openvpn-tomato-09.png


Das wars. Im Unterzeichnis easy-rsa/keys sind jetzt zwei Dateien (ein Root CA Zertifikat und ein Root CA Schlüssel) erstellt worden.

android-openvpn-tomato-10.png


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.

android-openvpn-tomato-11.png


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.

android-openvpn-tomato-12.png


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.

android-openvpn-tomato-13.png


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:

client
dev tun
proto tcp
remote morphiumvpn.dyndns.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
script-security 2
redirect-gateway def1

ca ca.crt
cert galaxynexus.crt
key galaxynexus.key
ns-cert-type server
cipher AES-128-CBC
comp-lzo
verb 4

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.

android-openvpn-tomato-14.png


Geht jetzt auf Advanced. Auch hier übernehmt Ihr wieder die unten angegeben Einstellungen.

android-openvpn-tomato-15.png


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.

android-openvpn-tomato-16.png


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.

android-openvpn-tomato-17.png


Die ca.crt aus der root-Ebene ist danach weg. Also nicht wundern.

Startet die OpenVPN für Android App. Wählt nach dem Starten den Punkt VPN Liste aus. Wie ihr seht, sind noch keine VPN Profile definiert. Die vorhin erstellte opvn-Datei kann man über das Ordner-Symbol hinzufügen. Navigiert dazu zu dem openvpn-Ordner auf der root-Ebene und wählt in diesem die ovpn-Datei aus. Bestätigt diesen Schritt mit einem Klick auf Auswählen. Ihr solltet jetzt angezeigt bekommen, dass die Konfigurationsdatei erfolgreich gelesen wurde.

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 connceted sehen.

android-openvpn-tomato-edit1_06


v1
Startet die OpenVPN Settings App. Unter OpenVPN configurations sollte die ovpn-Datei aufgelistet sein.

android-openvpn-tomato-18.png


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.

android-openvpn-tomato-19.png

Startet jetzt auf Eurem Rechner eine Kommandozeile und setzt einen ping auf die VPN-IP ab.

android-openvpn-tomato-20.png


Auf Eurem Android könnt Ihr nun auf z.B. Meine IP Adresse auf 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. ;)

android-openvpn-tomato-21.png


Eine genaue Übersicht findet Ihr im Router. Geht dort auf VPN Tunneling > Server > Server 1 > Status für alle weiteren Infos.

android-openvpn-tomato-22.png



---

Fragen? Fragen!
 
Zuletzt bearbeitet:
Gibt es nicht auch seit kurzem eine App für openVPN die kein Root benötigt?
 
Kann ich nichts zu sagen. Kenne nur die Variante mit root.
 
Damit spart man sich dann ein paar Schritte. ;)
 
Hi,
Zunächst einmal vielen Dank für diese gute Anleitung! :thumbsup:
Ich bin dieser erfolgreich gefolgt, heisst ich kann mich verbinden. Jedoch beim IP Test sehe ich, dass die IP des Telefon Providers angezeigt wird. Der Traffic schein nicht komplett geroutet zu werden. Das sollte ja doch durch redirect-gateway def1 erzwungen werden oder?
 
Genau, das sollte durch "redirect-gateway def1" erzwungen werden. Kannst du mal mittels Terminal App ein "ifconfig" posten?
 
Hmm ifconfig zeigt auch nach su nichts an. Die Terminal App hat root rechte bekommen.
 
Das ist komisch. Wenigstens der lo (loopback) sollte da sein.
 
Hmm finde ich auch. Ich verwende den Terminal Emulator v1.0.45 der beim CM9 im System dabei ist. Kann es sein, dass ich etwas übersehen habe?
 
Kriegst du denn etwas angezeigt, wenn du im WLAN oder WWAN bist und keine VPN-Verbindung aufgebaut hast?
 
Hi,

also ich habe jetzt den "ip" Befehl verwendet. Dieser hat hingehauen. Hier die Ausgabe. Die IP6 Adressen die mit --:--:--:--:--:-- dargestellt werden habe ich verschleiert. Ich hoffe das stört die Analyse nicht. Falls doch kann ich sie angeben.

Am Ende findet sich das tun0 Interface. Was sind eigentlich die ifbX Interfaces?

app_22@android:/ # ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: svnet0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 65541 qdisc pfifo_fast state UNKNOWN qlen 1000
link/phonet a0 peer 00
family 35 ???/0 scope link
3: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 32
link/ether --:--:--:--:--:--brd ff:ff:ff:ff:ff:ff
4: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN qlen 32
link/ether --:--:--:--:--:--brd ff:ff:ff:ff:ff:ff
5: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
link/sit 0.0.0.0 brd 0.0.0.0
6: ip6tnl0: <NOARP> mtu 1452 qdisc noop state DOWN
link/tunnel6 :: brd ::
7: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether --:--:--:--:--:--brd ff:ff:ff:ff:ff:ff
17: pdp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ppp
inet 10.75.165.71/24 scope global pdp0
18: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/none
inet 10.8.0.6 peer 10.8.0.5/32 scope global tun0
 
Also... Ich habe am Wochenende mein GN neu gemacht und JB installiert. Dabei habe ich gleich einen anderen OpenVPN Installer benutzt - nämlich diesen hier: https://play.google.com/store/apps/details?id=de.blinkt.openvpn

Weil dieser keine Busybox benötigt, habe ich Busybox nicht installiert und kann jetzt selbst kein ifconfig mehr ausführen. Das war wohl eines der Tools, welches durch Busybox installiert wurde. Führe ich jetzt 'ip addr show' aus, bekomme ich bei tun0, alle anderen Verbindungen ausgenommen, folgendes angezeigt.
11: tun0: <POINTOPOINT,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/none
inet 10.8.0.6/30 scope gloabel tun0

Kannst du es mal mit dem anderen Installer probieren?
 
  • Danke
Reaktionen: Eisenhorn
Hey danke, dieser Installer hat mit meiner Konfiguration hingehauen :thumbsup:. Vielen Dank!
 
v2 ist gerade online gegangen.
 

Ähnliche Themen

Cpt.Hardy
Antworten
3
Aufrufe
522
chrs267
chrs267
Cpt.Hardy
Antworten
20
Aufrufe
5.299
chrs267
chrs267
M
Antworten
3
Aufrufe
1.306
MaGu64
M
Zurück
Oben Unten