Googles mobiles Betriebssystem Android bringt in der Version 4 und höher (Ice Cream Sandwich, Jelly Beans, etc. pp.) endlich nicht nur im Stock Kernel ein ‚tun‘ Modul mit, sondern auch für Apps die Möglichkeit, ein VPN aufzubauen. Waren in früheren Versionen noch gewaltige Querelen nötig, um um die schwachbrüstige IPSEC Implementierung ein funktionierendes VPN Setup herumzubauen, kann man nun getrost was Vernünftiges verwenden, was nicht nur zuverlässiger funktioniert, sondern auch noch deutlich einfacher einzurichten ist und dabei keinen Streß mit NAT und co. macht. Die Rede ist von OpenVPN, welches ich schon seit Jahren für VPN einsetze – derzeit auf meinem pfsense als Server. pfsense erwähne ich nur, weil ich es momentan sehr zufrieden verwende, das ist für das Gelingen einer OpenVPN Verbindung mit dem Mobilgerät aber keinesfalls ein Muss, ein nacktes Linux, *BSD oder gar Windows mit dem OpenVPN Server erfüllt seinen Zweck genauso gut.

Ich gehe in diesem Artikel davon aus, dass das serverseitige Setup bereits läuft und konfiguriert ist und – je nach Sicherheitsbedürfnis – ein Clientzertifikat und/oder Benutzer/Passwort eingerichtet wurde. Anderenfalls, ist das OpenVPN 2.0 Howto wärmstens zu empfehlen.

Ich benutze OpenVPN for Android von Arne Schwabe als Client auf dem Androiden, da dieses eine brauchbare GUI aufweist (und damit meine ich auch die Möglichkeit, sich zur Fehlerdiagnose, den reinen Log anschauen zu können) und auf unmodifizierten Geräten (nicht einmal root-Zugriff wird benötigt!) funktioniert.

OpenVPN kann sowohl Config und Zertifikate in einzelnen Dateien, als auch ein Configfile mit den Zertifikaten inline eingebettet verwende. Für welchen Weg man sich entscheidet ist dabei egal und bleibt der eigenen Präferenz überlassen – ‚OpenVPN for Android‘ kann beides verwenden.

Zuerst müssen alle benötigten Dateien auf das Telefon gebracht werden. Dabei ist es egal, wie das passiert. Man kann die Zertifikate via Herausnehmbarer SD-Karte, über USB-Verbindung zum PC, Bluetooth usw. auf das Gerät kopieren.

Um sich nerviges Klicken und Tippen am Gerät zu ersparen, kann man neben Zertifikaten auch die Config Datei für den Client mit auf das Gerät kopieren, dieses kann dann importiert werden. Dazu benutzt man in der „VPN Liste“ das Ordner-Icon. Dabei werden referenzierte Zertifikatsdateien (Achtung: Relative Pfade verwenden!) als auch Eingebettete erkannt und übernommen. Unbekannte Direktiven werden auch ausgewertet und unter Advanced -> Eigene Optionen eingetragen. pfsense hat die Optionen

1
passtos

und 

1
resolv-retry infinite

exportiert, die nicht verstanden werden. Diese kann man dort wieder löschen, oder man deaktiviert „Eigene Optionen“ via Checkbox darüber, sonst schlägt der erste Verbindungsversuch fehl.

Selbstverständlich kann man alle Optionen, die in der Config stehen, auch selbst über die GUI setzen und die Zertifikatsdateien im Dateisystem auswählen.

Ist alles eingestellt, kann die Verbindung durch „Antippen“ des Eintrags in der VPN-Liste gestartet werden. Man bekommt den Log gezeigt, an dessen Ende nun bald „Initialization Sequence Completed“ stehen sollte, anderenfalls hat man hier einen Anhaltspunkt darauf, was schief gelaufen sein könnte. Ist die Verbindung hergestellt, wird dies mit einem Schlüsselsymbol in der Statuszeile des Telefons angezeigt, im Benachrichtigungsbereich kann man sich dann auch Infos zur Verbindung ansehen und diese trennen.

Zuletzt noch der Hinweis, dass man sowohl in der Clientconfig auf dem Android, als via serverseitiger Push-Option einstellen kann, ob der gesamte Traffic durch den VPN-Tunnel geleitet werden soll (default gateway). Der gepushte DNS Server wird per default auch verwendet, was praktisch ist, wenn man Hostnamen überschreiben oder eigene, lokale TLDs zur internen Namensauflösung verwenden möchte.