1. Möchtest Du unser Team im Android OS-Bereich unterstützen? Details dazu findest du hier!
  2. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

[HowTo] Android: OpenVPN Einwahl via Tomato

Dieses Thema im Forum "Android 4.1.x / 4.2.x / 4.3.x (Jelly Bean)" wurde erstellt von wuerg, 14.05.2012.

  1. wuerg, 14.05.2012 #1
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    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
    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.

    [​IMG]

    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:

    [​IMG]



    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.

    [​IMG]

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

    [​IMG]

    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:

    [​IMG]

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

    [​IMG]

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

    [​IMG]

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

    [​IMG]

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

    [​IMG]

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

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

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

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

    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.

    [​IMG]

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

    [​IMG]

    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.

    [​IMG]

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

    [​IMG]

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

    [​IMG]

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

    [​IMG]


    ---

    Fragen? Fragen!
     
    Zuletzt bearbeitet: 17.07.2013
  2. Schnello, 14.05.2012 #2
    Schnello

    Schnello Android-Guru

    Beiträge:
    3,816
    Erhaltene Danke:
    618
    Registriert seit:
    03.09.2010
    Phone:
    Samsung Galaxy S5 (G900)
    Gibt es nicht auch seit kurzem eine App für openVPN die kein Root benötigt?
     
  3. wuerg, 14.05.2012 #3
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    Kann ich nichts zu sagen. Kenne nur die Variante mit root.
     
  4. Schnello, 14.05.2012 #4
    Schnello

    Schnello Android-Guru

    Beiträge:
    3,816
    Erhaltene Danke:
    618
    Registriert seit:
    03.09.2010
    Phone:
    Samsung Galaxy S5 (G900)
  5. wuerg, 14.05.2012 #5
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    Damit spart man sich dann ein paar Schritte. ;)
     
  6. Eisenhorn, 02.09.2012 #6
    Eisenhorn

    Eisenhorn Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    28.01.2011
    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?
     
  7. wuerg, 02.09.2012 #7
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    Genau, das sollte durch "redirect-gateway def1" erzwungen werden. Kannst du mal mittels Terminal App ein "ifconfig" posten?
     
  8. Eisenhorn, 05.09.2012 #8
    Eisenhorn

    Eisenhorn Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    28.01.2011
    Hmm ifconfig zeigt auch nach su nichts an. Die Terminal App hat root rechte bekommen.
     
  9. wuerg, 05.09.2012 #9
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    Das ist komisch. Wenigstens der lo (loopback) sollte da sein.
     
  10. Eisenhorn, 11.09.2012 #10
    Eisenhorn

    Eisenhorn Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    28.01.2011
    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?
     
  11. wuerg, 11.09.2012 #11
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    Kriegst du denn etwas angezeigt, wenn du im WLAN oder WWAN bist und keine VPN-Verbindung aufgebaut hast?
     
  12. Eisenhorn, 12.09.2012 #12
    Eisenhorn

    Eisenhorn Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    28.01.2011
    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
     
  13. wuerg, 12.09.2012 #13
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    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.
    Kannst du es mal mit dem anderen Installer probieren?
     
    Eisenhorn bedankt sich.
  14. Eisenhorn, 13.09.2012 #14
    Eisenhorn

    Eisenhorn Neuer Benutzer

    Beiträge:
    9
    Erhaltene Danke:
    0
    Registriert seit:
    28.01.2011
    Hey danke, dieser Installer hat mit meiner Konfiguration hingehauen :thumbsup:. Vielen Dank!
     
  15. wuerg, 07.11.2012 #15
    wuerg

    wuerg Threadstarter Android-Experte

    Beiträge:
    624
    Erhaltene Danke:
    25
    Registriert seit:
    09.05.2010
    Phone:
    Motorola Moto X
    Tablet:
    Samsung Galaxy Tab 3 Lite
    v2 ist gerade online gegangen.
     

Diese Seite empfehlen