Raspberry Pi VPN – Stunnel (SSL Tunnel) mit OpenVPN einrichten - GFW umgehen
Verfasst: 13.12.2020, 18:12
Hallo zusammen!
Weil hier immer wieder mal das Thema aufkommt, möchte ich hier einmal aufzeigen, wie ich vor kurzem Stunnel unter Android, Windows 10 und macOS (folgt) mit OpenVPN einrichte bzw. auf meinem Raspberry Pi eingerichtet habe und möchte das mit euch hier teilen, weil mir das hier gefehlt hat.
Vorab möchte ich darauf aufmerksam machen, dass ich keine Realitätsabgleich gemacht habe, also die Server und Konfigurationen nicht in China testen konnte. Evtl. kann man das in einem Netzwerk auch hier in Deutschland ausprobieren wo die VPN-Daten geblockt werden z. B. bei freien Wifi/WLAN Anbietern. In der Theorie sollte es eigentlich funktionieren.
Dieser Thread soll nicht unbedingt ein Erklär-Beitrag sein, indem ich alles bis auf kleinste Detail erläutere, sondern ist eher eine lose Sammlung von Artikeln in die ich mich eingelesen habe, um das vorhaben zu realisieren. Also als Hilfe zur Selbsthilfe. Ich gehe deshalb davon aus, diejenigen die das nachbauen wollen, sich auch etwas auskennen und auch gerne ein wenig experimentieren möchten Bei Fragen dürft Ihr gerne trotzdem fragen Erfahrungsberichte (insbesondere aus China) sind natürlich hier herzlich wilkommen.
Problemstellung/Ausgangslage
In China soll ja die Nutzung von VPNs untersagt sein. Die Great Firewall (GFW) blockt die Verwendung von OpenVPN. Man kann sie möglicherweise austricksen, indem man den VPN Server auf den TCP Port 443 verwendet. Dieser Port wird von HTTPS genutzt und sichert viele wichtige Websites ab.
Die GFW geht aber wohl noch weiter und verwendet DPI (Deep Packet Inspection) und die Technik kann zwischen HTTPS und VPN unterscheiden, indem sie die charakteristischen Handshakes von OpenVPN identifiziert, auch wenn man es hinter HTTPS versteck.
Es gibt grundsätzlich zwei Möglichkeiten, um die GFW zu umgehen.
Ich habe mich für die zweite Lösung entschieden.
Mehr zu diesem Thema findet man hier: https://de.vpnmentor.com/blog/vpns-russ ... ntsperren/
Grundlage
Meine Grundlage ist ein eigens aufgesetzter OpenVPN-Server unter IPv6 und einem TCP Port auf einem Raspberry Pi (hier in Deutschland).
Der VPN-Client sollte jetzt erstmal auf dieser Grundlage auf den VPN-Server zugreifen.
Hier findet hier auch nochmal ein schöne Schaubilder zum Thema VPN-Tunnel: https://blog.helmutkarger.de/raspberry- ... diagramme/
Stunnel und OpenSSL auf dem Raspi installieren
https://www.raspberrypi.org/forums/view ... hp?t=40389
In diesem Artikel wird erklärt, wie der Stunnel-Server und wie die SSL Zertifikate erstellt werden.
Was ich im Gegensatz zu den Artikeln anders gemacht habe: In der Server-Konfiguration habe ich unter dem Eintrag „connect“ 34567 durch 443 ersetzt. Den Part mit der Firewall habe ich ausgelassen und stattdessen den Port 993 (sowohl IPv4 und IPv6) im Router freigegeben.
Der Stunnel Sever sollte jetzt unter der Statusabfrage „active (running)“ anzeigen.
Android
Unter meinem Smartphone habe ich zugegebener maßen ein wenig gekämpft aber am Ende es doch hinbekommen.
Diese folgenden Artikel haben mir dabei geholfen:
TLS/SSL Tunnel
SimpleHttpServer (für SSL Zertifikatsdatei „.cert“)
OpenVPN für Android
Welche Dateien werden benötigt?
SSL-Zertifikatsdatei
OpenVPN Client-Konfigurationsdatei
Im ersten Artikel ist ein Video (https://youtu.be/_jk787bm6zA) enthalten, welches beschreibt, wie man die App TLS/SSL Tunnel einrichtet und die SSL-Zertifikatsdatei mithilfe von SimpleHttpServer importiert. Die Zertifikatsdatei und OpenVPN Client-Konfigurationsdatei habe ich mit FTP vom Raspberry Pi geholt.
Als localhost Port habe ich 1194 verwendet. Zum Remote Host habe ich den Port 993 (siehe SSL Server Konfiguration) verwendet. Am besten legt man eine Kopie von der OpenVPN Client-Konfigurationsdatei an. Somit hätten man zwei Alternativen (einmal ohne SSL und einmal mit SSL), falls eine Variante nicht funktioniert.
Bevor ich die App OpenVPN einrichte, bearbeite ich die OpenVPN Client-Konfigurationsdatei. Hier ersetze ich einfach im Eintrag „remote“ meinen Host Eintrag durch „localhost 1194“.
Im zweiten Artikel wird beschrieben, wie man nun die App OpenVPN für Android einrichtet und die App TLS/SSL Tunnel bei den ausnahmen hinzufügt. Unter Routing habe ich allerdings im Abschnitt IPv4 keinen Haken gesetzt.
Nun kann man die OpenVPN Client-Konfigurationsdatei in der App OpenVPN für Android importieren.
Zunächst startet man den Tunnel in der App TLS/SSL Tunnel und danach baut man eine Verbindung mit OpenVPN auf.
Windows 10
Unter Windows 10 war das dann (gefühlt) deutlich einfacher.
Hier kann man sich Stunnel für Windows 10 runterladen
http://www.stunnel.org/downloads.html
Für die Einrichtung von Stunnel bin ich einfach den Anweisung des letzten Abschnitts aus diesem Artikel gefolgt:
https://www.raspberrypi.org/forums/view ... hp?t=40389
Was ich im Gegensatz zu den Artikeln anders gemacht habe: Anstatt der aufgeführt OpenVPN Client-Konfigurationsdatei habe ich meine Datei unter dem Eintrag „remote“ angepasst und meinen ursprünglich Host durch „localhost 1194“ ersetzt.
Unter macOS (evtl. noch unterm Iphone) folgt noch eine Anleitung.
Viel Spaß beim experimentieren!
Weil hier immer wieder mal das Thema aufkommt, möchte ich hier einmal aufzeigen, wie ich vor kurzem Stunnel unter Android, Windows 10 und macOS (folgt) mit OpenVPN einrichte bzw. auf meinem Raspberry Pi eingerichtet habe und möchte das mit euch hier teilen, weil mir das hier gefehlt hat.
Vorab möchte ich darauf aufmerksam machen, dass ich keine Realitätsabgleich gemacht habe, also die Server und Konfigurationen nicht in China testen konnte. Evtl. kann man das in einem Netzwerk auch hier in Deutschland ausprobieren wo die VPN-Daten geblockt werden z. B. bei freien Wifi/WLAN Anbietern. In der Theorie sollte es eigentlich funktionieren.
Dieser Thread soll nicht unbedingt ein Erklär-Beitrag sein, indem ich alles bis auf kleinste Detail erläutere, sondern ist eher eine lose Sammlung von Artikeln in die ich mich eingelesen habe, um das vorhaben zu realisieren. Also als Hilfe zur Selbsthilfe. Ich gehe deshalb davon aus, diejenigen die das nachbauen wollen, sich auch etwas auskennen und auch gerne ein wenig experimentieren möchten Bei Fragen dürft Ihr gerne trotzdem fragen Erfahrungsberichte (insbesondere aus China) sind natürlich hier herzlich wilkommen.
Problemstellung/Ausgangslage
In China soll ja die Nutzung von VPNs untersagt sein. Die Great Firewall (GFW) blockt die Verwendung von OpenVPN. Man kann sie möglicherweise austricksen, indem man den VPN Server auf den TCP Port 443 verwendet. Dieser Port wird von HTTPS genutzt und sichert viele wichtige Websites ab.
Die GFW geht aber wohl noch weiter und verwendet DPI (Deep Packet Inspection) und die Technik kann zwischen HTTPS und VPN unterscheiden, indem sie die charakteristischen Handshakes von OpenVPN identifiziert, auch wenn man es hinter HTTPS versteck.
Es gibt grundsätzlich zwei Möglichkeiten, um die GFW zu umgehen.
- SSH Tunneling
- SSL Tunnel
Ich habe mich für die zweite Lösung entschieden.
Mehr zu diesem Thema findet man hier: https://de.vpnmentor.com/blog/vpns-russ ... ntsperren/
Grundlage
Meine Grundlage ist ein eigens aufgesetzter OpenVPN-Server unter IPv6 und einem TCP Port auf einem Raspberry Pi (hier in Deutschland).
- https://blog.helmutkarger.de/raspberry- ... nter-ipv6/
https://blog.helmutkarger.de/raspberry- ... nter-ipv6/
https://blog.helmutkarger.de/raspberry- ... pn-tunnel/
Der VPN-Client sollte jetzt erstmal auf dieser Grundlage auf den VPN-Server zugreifen.
Hier findet hier auch nochmal ein schöne Schaubilder zum Thema VPN-Tunnel: https://blog.helmutkarger.de/raspberry- ... diagramme/
Stunnel und OpenSSL auf dem Raspi installieren
https://www.raspberrypi.org/forums/view ... hp?t=40389
In diesem Artikel wird erklärt, wie der Stunnel-Server und wie die SSL Zertifikate erstellt werden.
Was ich im Gegensatz zu den Artikeln anders gemacht habe: In der Server-Konfiguration habe ich unter dem Eintrag „connect“ 34567 durch 443 ersetzt. Den Part mit der Firewall habe ich ausgelassen und stattdessen den Port 993 (sowohl IPv4 und IPv6) im Router freigegeben.
Der Stunnel Sever sollte jetzt unter der Statusabfrage „active (running)“ anzeigen.
Android
Unter meinem Smartphone habe ich zugegebener maßen ein wenig gekämpft aber am Ende es doch hinbekommen.
Diese folgenden Artikel haben mir dabei geholfen:
- https://usefulvid.com/stunnel-unter-and ... en-airvpn/
https://help.vpntunnel.com/support/solu ... gurations-
TLS/SSL Tunnel
SimpleHttpServer (für SSL Zertifikatsdatei „.cert“)
OpenVPN für Android
Welche Dateien werden benötigt?
SSL-Zertifikatsdatei
OpenVPN Client-Konfigurationsdatei
Im ersten Artikel ist ein Video (https://youtu.be/_jk787bm6zA) enthalten, welches beschreibt, wie man die App TLS/SSL Tunnel einrichtet und die SSL-Zertifikatsdatei mithilfe von SimpleHttpServer importiert. Die Zertifikatsdatei und OpenVPN Client-Konfigurationsdatei habe ich mit FTP vom Raspberry Pi geholt.
Als localhost Port habe ich 1194 verwendet. Zum Remote Host habe ich den Port 993 (siehe SSL Server Konfiguration) verwendet. Am besten legt man eine Kopie von der OpenVPN Client-Konfigurationsdatei an. Somit hätten man zwei Alternativen (einmal ohne SSL und einmal mit SSL), falls eine Variante nicht funktioniert.
Bevor ich die App OpenVPN einrichte, bearbeite ich die OpenVPN Client-Konfigurationsdatei. Hier ersetze ich einfach im Eintrag „remote“ meinen Host Eintrag durch „localhost 1194“.
Im zweiten Artikel wird beschrieben, wie man nun die App OpenVPN für Android einrichtet und die App TLS/SSL Tunnel bei den ausnahmen hinzufügt. Unter Routing habe ich allerdings im Abschnitt IPv4 keinen Haken gesetzt.
Nun kann man die OpenVPN Client-Konfigurationsdatei in der App OpenVPN für Android importieren.
Zunächst startet man den Tunnel in der App TLS/SSL Tunnel und danach baut man eine Verbindung mit OpenVPN auf.
Windows 10
Unter Windows 10 war das dann (gefühlt) deutlich einfacher.
Hier kann man sich Stunnel für Windows 10 runterladen
http://www.stunnel.org/downloads.html
Für die Einrichtung von Stunnel bin ich einfach den Anweisung des letzten Abschnitts aus diesem Artikel gefolgt:
https://www.raspberrypi.org/forums/view ... hp?t=40389
Was ich im Gegensatz zu den Artikeln anders gemacht habe: Anstatt der aufgeführt OpenVPN Client-Konfigurationsdatei habe ich meine Datei unter dem Eintrag „remote“ angepasst und meinen ursprünglich Host durch „localhost 1194“ ersetzt.
Unter macOS (evtl. noch unterm Iphone) folgt noch eine Anleitung.
Viel Spaß beim experimentieren!