OpenVPN-Verbindungen aufbauen: Teil 1 - Heimischen Router mit Android verbinden

Im Artikel “Mit Tomato (shibby-Mod) eine VPN-Verbindung mit Android herstellen” hatte ich schon über den Aufbau einer sicheren Verbindung, mittels PPTP-Protokoll geschrieben. Da dieser VPN-Server nicht auf jedem Router installiert ist und das PPTP-Protokoll in Zeiten von NSA und Co nicht ganz sicher ist, stelle ich euch den Verbindungsaufbau mittels OpenVPN vor. OpenVPN ist in den meisten Routern (FRTITZ!Box, DD-WRT, Tomato by Shibby) schon vorhanden, oder lässt sich nachträglich installieren.

Im ersten Teil der Tutorialserie wird die Einrichtung des Servers auf einem Router mit Tomato by Shibby – Firmware gezeigt und wie man sich mit einem Android Smartphone darauf verbindet.

OpenVPN-Server einrichten

Für eine VPN-Verbindung benötigen wir Zertifikate und Schlüssel für den Server (Router) und einem Client (Android-Smartphone). Mit dem Paket “easy-rsa”, kann man sich alle benötigten Dateien bequem erstellen.

Benötigte Software herunterladen

Da “easy-rsa” nicht mehr im OpenVPN-Paket enthalten ist, müssen wir dieses unter GitHub downloaden. Wir entscheiden uns für den release/2.x – Branch, da dieses am einfachsten zu benutzen ist.

openvpn_part_1_github

Damit wir Zertifikate und Co. erstellen können, benötigen wir OpenSSL. Auch unter einem 64-Bit Windows benötigen wir nur das kleine Paket: Win32 OpenSSL v1.0.1f Light.

openvpn_part_1_openssl

OpenSSL installieren und einrichten

Bei der Installation von OpenSSL Light gibt es nichts weiter zu beachten. Spenden könnt Ihr natürlich am Ende gerne, die Entwickler werden sich freuen Zwinkerndes Smiley. Damit die OpenSSL-Befehle ausgeführt werden können, muss das bin-Verzeichnis noch zu den Umgebungsvariablen hinzugefügt werden. Drückt dazu Win » Pause *und paar Klicks auf *Erweiterte Systemeinstellungen » Umgebungsvariablen. Bei Systemvariablen die Variable Path bearbeiten und am Ende, getrennt mit einem Semikolon, dass bin-Verzeichnis (“C:\OpenSSL-Win32\bin”) von OpenSSL angeben.

openvpn_part_1_openssl_path

easy-rsa entpacken und benutzen

Als nächstes entpacken wir das heruntergeladene easy-rsa - Paket. Im Anschluss erstellen wir unter C: die Ordnerstruktur “C:\temp\easy-rsa” und kopieren den Inhalt vom easy-rsa – Windowsverzeichnis (“easy-rsa-release-2.x\easy-rsa\Windows”) nach “C:\temp\easy-rsa”. Anschließend muss die Konfigurationsdatei “openssl-1.0.0.cnf”, welche sich im easy-rsa 2.0-Verzeichnis (“easy-rsa-release-2.x\easy-rsa\2.0”) befindet, nach “C:\temp\easy-rsa” kopiert werden. Das Verzeichnis sollte somit folgende Dateien enthalten:

openvpn_part_1_easy-rsa_step_1

Wir starten als nächstes die Windowskonsole und navigieren zu C:\temp\easy-rsa:

cd C:\temp\easy-rsa

Als erstes wird die Datei “init-config.bat” gestartet. Wir sehen das unsere “vars.bat.sample” als Kopie mit dem Namen “vars.bat” abgespeichert wird.

openvpn_part_1_easy-rsa_step_2

Die “vars.bat” bearbeiten wir mit einem ordentlichen Texteditor, wie beispielsweise Notepad++. Als erstes setzen wir die Variable HOME. Dieses ist unser Hauptverzeichnis von easy-rsa, also “C:\temp\easy-rsa\”.

openvpn_part_1_easy-rsa_step_4

Im nächsten Schrittbearbeiten wir die Variablen am Ende der Datei, welche für die Zertifikatserstellung von Bedeutung sind:

openvpn_part_1_easy-rsa_step_5

Wichtig ist hierbei, dass ihr bei KEY_CN die Adresse angibt, unter welcher der VPN-Server später erreichbar sein wird. Das kann hierbei ein Standard-DDNS-Provider (DynDNS, FreeDNS, oder was auch immer euer Router unterstützt) sein oder in meinem Fall eine Subdomain, welche auf die IP des VPN-Servers zeigt. Wie man eine Subdomain als DDNS benutzt, könnt ihr hier nachlesen. Wir begeben uns wieder in die Windowskonsole und starten die Datei “vars.bat”. Somit werden unsere Variablen gesetzt.

openvpn_part_1_easy-rsa_step_6

Im nächsten Schritt starten wir die Datei “clean-all.bat”. Mit dieser Batch-Datei wird der Ordner “keys” angelegt und die Dateien “index.txt” und” “serial” angelegt. Die Fehlermeldungen braucht einen nicht zu verunsichern, da die Datei, welche gelöscht werden soll, noch nicht existiert.

openvpn_part_1_easy-rsa_step_7

Mit “build-ca.bat” erstellen wir unsere eigene Zertifizierungsstelle. Sollte jetzt die Fehlermeldung:

WARNING: can't open config file: /usr/local/ssl/openssl.cnf

…erscheinen, muss der Konfigurationspfad von OpenSSL noch in den Umgebungsvariablen eingefügt werden. Das kann man einfach über die Konsole mit folgenden Befehl erledigen:

set OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cfg

Danach wieder die “vars.bat” und “clean-all.bat” ausführen. Jetzt sollte auch die “build-ca.bat” ohne Fehler starten. Jetzt werden wir zu den Zertifikatsangaben gefragt. Da wir diese schon in der “vars.bat” festgelegt haben, können wir alle Angaben mit Enter bestätigen.

openvpn_part_1_easy-rsa_step_8

Da wir jetzt eine Zertifizierungsstelle haben, können wir im nächsten Schritt unser Zertifikat und den Schlüssel für den Server erstellen. Dazu geben wir “build-key-server.bat server”. Wieder bestätigen wir alle Angaben mit Enter und geben zweimal “y” ein, damit unser Zertifikat-Schlüssel-Paket erstellt wird.

openvpn_part_1_easy-rsa_step_9

Jetzt ist unser Zertifikat für das Telefon an der Reihe. Dieses erstellen wir mit “build-key.bat android”. Beim Signieren des Zertifikats kann es wieder zu einem Fehler kommen:

TXT_DB error number 2

Diesen können wir einfach beheben in dem wir in der Datei “index.txt.attr” unique_subject auf no setzen. Der Inhalt der Datei sollte nun so aussehen:

unique_subject = no

Jetzt dürfte die Zertifizierungserstellung reibungslos funktionieren.
Im letzten Zertifizierungsschritt wird die Diffie Hellman-Datei mit “build-dh.bat” erzeugt. Das dauert mitunter eine Weile.

OpenVPN-Server auf dem Router einrichten

War die Zertifikatserstellung erfolgreich, kann den OpenVPN-Server eingerichtet werden. In meinem Beispiel konfiguriere ich meinen Router, welcher mit Tomato by Shibby läuft. Dazu loggt ihr euch auf den Router ein und navigiert zu VPN Tunneling » OpenVPN Server. Die Einstellungen bei Basic …

openvpn_part_1_config_server_step_1

…und bei Advanced können wie abgebildet übernommen werden. Für das Surfen über VPN, ist der Haken bei “Direct clients to redirect Internet traffic” essentiell!

openvpn_part_1_config_server_step_2

Im Tab “Keys” fügt ihr eure Zertifikate und Schlüssel ein. Die Dateien befinden sich im Ordner “C:\temp\easy-rsa\keys. Mit Notepad++ werden die Dateien geöffnet und der Inhalt kopiert. Für “Certificate Authority” brauchen wir den Inhalt aus der Datei: “ca.crt”. Bei “Server Certificate” ist es die Datei “server.crt” (Den Text vor -----BEGIN CERTIFICATE----- braucht ihr nicht kopieren). “Server Key benötigt“ die Datei “server.key” und die Diffie Hellman Parameter (Diffie Hellman parameters) benötigt den Inhalt aus “dh2048.pem”

openvpn_part_1_config_server_step_3

Mit einem Klick auf “Start Now” können wir unseren OpenVPN-Server starten. Wenn alles geklappt hat wechselt der Button zu “Stop Now”. Wir wechseln auf Status und klicken auf “Refresh Status” und warten auf unsere Clients :).

OpenVPN auf Android einrichten

Als erstes benötigen wir eine App. Ich kann die App OpenVPN für Android von Arne Schwabe empfehlen. OpenVPN Connect kann man jedoch auch benutzen. Hat jedoch keine bequeme Startbildschirmsverknüpfung. Vorteil von beiden Apps, diese benötigen keinen root-Zugriff.
Wir entscheiden uns für OpenVPN für Android, welches wir über Googles Playstore auf das Telefon installieren. Um uns zum OpenVPN-Server zu verbinden, benötigen wir die zuvor erstellten Android-Zertifikate. Auf dem internen Speicher des Smartphones erstellen wir einen Ordner “openvpn”. In dieses Verzeichnis kopieren wir die Dateien: “android.crt”, “android.key” und “ca.crt”. Im Anschluss erstellen wir eine Datei namens config.ovpn mit folgenden Inhalt:

client
dev tun
proto udp
remote subdomain.xuad.net 1194
resolv-retry infinite
nobind
persist-key
persist-tun
script-security 2
redirect-gateway def1

ca ca.crt
cert android.crt
key android.key
comp-lzo
verb 4

openvpn_part_1_config_android_step_1

Relevant ist die Zeile “remote subdomain.xuad.net 1194”, hier gebt ihr eure Adresse und den Port des OpenVPN-Servers an. Jetzt startet ihr “OpenVPN für Android” und klickt auf das Ordner-Symbol.

openvpn_part_1_config_android_step_2

Wir navigieren zum erstellen openvpn-Ordner und wählen die “config.ovpn” Datei aus.

openvpn_part_1_config_android_step_3

Mit dem Klick auf das Symbol für Speichern wird unsere Konfiguration angelegt.

openvpn_part_1_config_android_step_4

Unter Grundeinstellungen kann die Konfiguration optional umbenannt werden.

openvpn_part_1_config_android_step_5

Das war’s! Wenn ihr euch noch im heimischen WLAN befindet, schaltet dieses auf dem Handy aus und aktiviert das mobile Datennetz. Jetzt brauchen wir nur noch auf die Verbindung klicken und die VPN-Verbindung wird aufgebaut. Zuvor muss der Anwendung noch vertraut werden, sonst geht nix!

openvpn_part_1_config_android_step_6

Das Log füllt sich und es sollte am Ende oben “Verbunden:SUCCESS” stehen. Zur Kontrolle öffnen wir noch einen Browser unser Wahl und surfen wieistmeineip.de an:

openvpn_part_1_config_android_step_7

Es sollte schließlich eure WAN-IP-Adresse eures heimischen Internet-Anschlusses zu sehen sein. Ihr surft nun sicher über euren Router, auch wenn ihr euch im mobilen Datennetz befindet.