Anleitung: OpenVPN Script fuer automatische Kaskadierung und Verbindungsueberwachung

PrivateMember

New Member
Hallo zusammen,

erstmal wünsche ich allen ein gesundes neues Jahr. :)
Danke an Perfect Privacy für diesen wunderbaren VPN-Dienst, welcher wirklich alle Wünsche erfüllt. Weiter so - die Qualität passt!

Ich möchte euch etwas zur Verfügung stellen, was möglicherweise eher an die 'Geeks' gerichtet ist.
In den letzten Tagen hatte ich mir Gedanken zur Kaskadierung auf Linux-Servern gemacht, welche Headless unterwegs sind. Der Eigenaufwand sollte zwecks Verbindungsaufbau und Überwachung der Verbindung möglichst gering gehalten werden ==> also musste ein Script her!

Nach zahlreichen Stunden, Tests, Optimierungen und Debugging hatte ich eine Konfiguration, welche einfach zu handhaben ist und auch sehr stabil läuft.

-----------------------------------------------------------------

Erläuterung:
Diese Scripte ermöglichen es, anhand einer frei wählbaren Anzahl an HOP's (max. 8) und einer zufällig ermittelten Zeitspanne (Angabe einer max- und mintime in den Variablen vorausgesetzt), eine automatische Kaskadierung per openVPN-Configs durchzuführen. Die mitgelieferten Dienste sorgen dafür, dass die Scripte bei jedem Systemstart sofort abgearbeitet werden. Auch wenn die Scripte oder Dienste unerwartet beendet werden, starten diese sofort neu und bauen im Anschluss erneut die Kaskade auf.

Es werden für jede neue Verbindung zufällig die Server (openVPN-Configs) gewählt. Es muss also nicht angegeben werden, welche Server benutzt werden sollen. Wenn man nur eine bestimmte Auswahl an Server nutzen möchte, müssen diese lediglich aus dem Verzeichnis entfernt werden, welches durch das Script durchsucht wird (initial /etc/openvpn/connections/)


Beschaffungsmöglichkeiten:

Github: https://github.com/PrivateMemberPP/PP_openVPN_cascade

- Über das Github-Repository könnt ihr euch die Files im Klartext anschauen
- die wichtigesten Befehle sind auch auf der Github-Repository-Seite vermerkt


automatische Installation:

Bash:
sudo bash -c "$(wget -qO - https://raw.githubusercontent.com/PrivateMemberPP/PP_openVPN_cascade/master/install_ovpn_cascading.sh)"

Durch den o.g. Befehl wird die Installation vollständig automatisch durchgeführt. Es werden die notwendigen Pakete auf vorhandensein überprüft und im Bedarfsfall nachinstalliert. Im Anschluss werden die Skripte und Service-Dateien heruntergeladen, an die korrekten Stellen verschoben und ausführbar gemacht.
Im letzten Schritt wird noch aufgeräumt.
Wenn das Script im Terminal durchgelaufen ist, unbedingt die abschließenden Schritte durchlesen und ausführen!
Das Installationsscript schreibt den Output auch in eine Datei!

Bash:
less /var/log/install_ovpn_cascade.log


Update der Scripte

Falls ich ein Update poste, muss lediglich wieder der Befehl zur Installation ausgeführt werden:

Bash:
sudo bash -c "$(wget -qO - https://raw.githubusercontent.com/PrivateMemberPP/PP_openVPN_cascade/master/install_ovpn_cascading.sh)"

Das Installationsscript erkennt, dass das Hauptscript vorhanden ist und kopiert die, von euch am Anfangdes Hauptscripts festgelegten Variablen, in das neue Script, sodass ihr diese nicht erneut anpassen müsst.
Im Anschluss werden die Dienste automatisch wieder gestartet.


Anpassungsmöglichkeiten:

Hauptscript editieren:

Bash:
sudo nano /etc/systemd/system/openvpn_service_restart_cascading.sh

Hier können die Variablen am Anfang entsprechend angepasst werden. Empfehlenswerte Anpassungen wären 'mintime', 'maxtime' und 'maxhop'.

Nach der Anpassungen entweder das System neustarten oder den Dienst über folgenden Befehl mit erhöhten Rechten restarten:
Bash:
sudo systemctl restart openvpn-restart-cascading.service

Im Anschluss kann im LOG-Verzeichnis
Bash:
cd /var/log/ovpn_reconnect/
überprüft werden, ob die Verbindungen aufgebaut werden.
Es wird für jeden HOP ein eigenes LOG geschrieben (log.vpnhop'#hop'), das Hauptlog heißt vpnlog_restart.log


Hinweis:

Ich weise ausdrücklich darauf hin, dass jeder für die eigene Firewallkonfiguration selbst Sorge zu tragen hat!
Denn vor, nach, während und zwischen dem Verbindungsaufbau (quasi immer, wenn KEIN Tunnel aufgebaut ist), gehen die Datenpakete im Standardfall über die Standardschnittstelle und das Standardgateway.

Die Systeme unterscheiden sich zu stark, als das man hier eine 'one-size-fits-all'-Lösung bauen könnte.
Ferner weise ich auch noch darauf hin, dass ich die Scripte bisher nur unter Debian testen konnte.

-----------------------------------------------------------------

Schaut es euch bitte an, stellt Fragen, baut es bei Bedarf um... ich versuche auch jederzeit zu helfen, falls die Einrichtung mal nicht klappen sollte.
Ich würde mich sehr freuen, wenn auch jemand vom PP-Support sich die Scripte ansehen könnte.

Keep in mind: Momentan stehe ich noch recht weit am Anfang, was das Scripten unter Linux betrifft. Jedoch habe ich jederzeit mit bestem Wissen und Gewissen -und natürlich auch viel Liebe- die Scripte verfasst. Wenn es in Zukunft Updates geben wird, werde ich diese auch in diesem Thread online stellen.

Also dann, viel Spaß beim betrachten und ausprobieren. :)


P.S. falls jemand meine Arbeit in Form einer kleinen Spende wertschätzen möchte, würde ich mich riesig darüber freuen. ?
Gerne per PayPal an meine PayPal.me-Adresse: https://www.paypal.me/patricklwl


Danke und Beste Grüße
Patrick
 
Last edited:
Moin,

klar gern! Ich bin noch unterwegs, melde mich aber kurz, wenn ich das erledigt habe. ??

n = max 8
Exakt das hatte ich beim Testen herausgefunden - danke, dass das somit bestätigt wurde. ?

Wobei '8' wirklich mehr als paranoid wäre. ?
 
Nach Anpassung der Zeile gab es trotzdem Probleme mit den Routen.
8 HOP's gehen trotzdem weiterhin, wollte spaßeshalber mit 15 und dann mit 10 testen, kein Erfolg.
Aber auch nicht weiter schlimm, da das eh ein bisschen übertrieben wäre. :)

Ich poste mal noch ein paar Informationen, wenn man über 8 HOP's geht.
BTW: mein Anschluss ist ein VDSL 50 MBit/s mit einem Ping von 10ms zu spiegel.de, wenn KEIN VPN verbunden ist.

Logauszug meines Scripts:
user@host:/var/log/ovpn_reconnect$ less vpnlog_restart.log
------------------------------------------------------------------
Die folgende Verbindung bleibt fuer 5650 Sekunden bestehen
------------------------------------------------------------------


VPN-Verbindung Nr. 1 wird aufgebaut nach: Montreal
VPN-Verbindung Nr. 1 erfolgreich aufgebaut nach: Montreal

==> MaxHOP auf 8 festgelegt, nun folgen/folgt 7 Kaskade(n)!

Das Gateway von HOP Nr. 1 lautet: 10.1.19.1

VPN-Verbindung Nr. 2 wird aufgebaut nach: Amsterdam
VPN-Verbindung Nr. 2 erfolgreich aufgebaut nach: Amsterdam

Das Gateway von HOP Nr. 2 lautet: 10.4.64.1

VPN-Verbindung Nr. 3 wird aufgebaut nach: Madrid
VPN-Verbindung Nr. 3 erfolgreich aufgebaut nach: Madrid

Das Gateway von HOP Nr. 3 lautet: 10.5.33.1

VPN-Verbindung Nr. 4 wird aufgebaut nach: Belgrade
VPN-Verbindung Nr. 4 erfolgreich aufgebaut nach: Belgrade

Das Gateway von HOP Nr. 4 lautet: 10.5.67.1

VPN-Verbindung Nr. 5 wird aufgebaut nach: Stockholm
VPN-Verbindung Nr. 5 erfolgreich aufgebaut nach: Stockholm

Das Gateway von HOP Nr. 5 lautet: 10.4.19.1

VPN-Verbindung Nr. 6 wird aufgebaut nach: Bucharest
VPN-Verbindung Nr. 6 erfolgreich aufgebaut nach: Bucharest

Das Gateway von HOP Nr. 6 lautet: 10.0.113.1

VPN-Verbindung Nr. 7 wird aufgebaut nach: Copenhagen
VPN-Verbindung Nr. 7 erfolgreich aufgebaut nach: Copenhagen

Das Gateway von HOP Nr. 7 lautet: 10.4.2.1

VPN-Verbindung Nr. 8 wird aufgebaut nach: Malmoe
VPN-Verbindung Nr. 8 erfolgreich aufgebaut nach: Malmoe

Kaskade besteht jetzt

VPN-Verbindung mit Kaskade besteht seit: 10 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 20 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 30 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 40 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 50 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 60 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 70 Sekunden
VPN-Verbindung mit Kaskade besteht seit: 80 Sekunden

Anzahl der Routen
user@host:/var/log/ovpn_reconnect$ ip r | grep -c 'via'
519


PING-Laufzeit zu spiegel.de

user@host:/var/log/ovpn_reconnect$ ping spiegel.de
PING spiegel.de (128.65.210.8) 56(84) bytes of data.
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=1 ttl=58 time=505 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=2 ttl=58 time=508 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=3 ttl=58 time=502 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=4 ttl=58 time=503 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=5 ttl=58 time=506 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=6 ttl=58 time=514 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=7 ttl=58 time=511 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=8 ttl=58 time=526 ms
64 bytes from 128.65.210.8 (128.65.210.8): icmp_seq=9 ttl=58 time=502 ms

Speedtest
user@host:/var/log/ovpn_reconnect$ speedtest
Retrieving speedtest.net configuration...
Testing from Resilans AB (194.68.170.56)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by 31173 Services AB (Malmö) [3.51 km]: 694.371 ms
Testing download speed................................................................................
Download: 1.51 Mbit/s
Testing upload speed......................................................................................................
Upload: 1.34 Mbit/s
 
Hi PrivateMember,
super vielen Dank für die Anleitung, werde es demnächst mal ausprobieren.
SOWAS hätte ich mir halt die ganze Zeit schon von PerfectPrivacy direkt gewünscht.
Aber wichtig sind ja nur die 90% Windows Nutzer ... was sind Minderheiten schon wert ;)
 
Moin Morbis55,
gerne doch! Sag Bescheid, wenn du Hilfe benötigst. :)

Verständlich - mir hatte auch so eine Lösung gefehlt, da hatte ich mich selbst mal ans scripten gemacht und Spaß dran gefunden.
Die Jungs von PerfectPrivacy machen schon einen sehr guten Job, wie ich finde. Viele Lösungen sind ja schon vorhanden. Ich lehne mich mal aus dem Fenster mit der Vermutung, dass die wenigsten eine kaskadierte Verbindung wirklich 'haben möchten'. Dann besteht der Großteil ja auch noch aus Windows-Nutzern, wie du schon festgestellt hast. :)

Jedoch sollte man wirklich wissen, dass eine anonyme Internetnutzung schon bei der Wahl des OS beginnt - da kommt Windows bei mir nur in einigen Fällen zur Verwendung (Beispiel hier im Board).
Eine, mit Bedacht gewählte, Linux Distro ist in den meisten Fällen die -eindeutig- bessere Wahl.
 
Hallo zusammen,

im Moment bin ich von Zeit zu Zeit dran, eine Installationsroutine zu basteln und alles nach github umzulagern.

Ich melde mich die Tage nochmal und werde alles hier online stellen, wenn ich fertig bin.
 
Hallo zusammen,

erstmal wünsche ich allen ein gesundes neues Jahr. :)
Danke an Perfect Privacy für diesen wunderbaren VPN-Dienst, welcher wirklich alle Wünsche erfüllt. Weiter so - die Qualität passt!

Ich möchte euch etwas zur Verfügung stellen, was möglicherweise eher an die 'Geeks' gerichtet ist.
In den letzten Tagen hatte ich mir Gedanken zur Kaskadierung auf Linux-Servern gemacht, welche Headless unterwegs sind. Der Eigenaufwand sollte zwecks Verbindungsaufbau und Überwachung der Verbindung möglichst gering gehalten werden ==> also musste ein Script her!

Nach zahlreichen Stunden, Tests, Optimierungen und Debugging hatte ich eine Konfiguration, welche einfach zu handhaben ist und auch sehr stabil läuft.

Unter folgendem Link findet ihr ein 7z-Archiv (keine Sorge, garantiert virenfrei) -> https://drive.google.com/file/d/1q_gdVN0k1NJD1sGp5voxffIOxLy_rVLm/view?usp=sharing

Alternativ auch auf meinem Pastebin-Profil: https://pastebin.com/u/PrivateMember


Danke an dieser Stelle an PP, denn ab Verbindung 2 bis n wird das updown.sh-Script durch mein Script herangezogen.

Schaut es euch bitte an, stellt Fragen, baut es bei Bedarf um... ich versuche auch jederzeit zu helfen, falls die Einrichtung mal nicht klappen sollte.
In den Textdateien sind die Einrichtung und der Funktionsumfang soweit von mir beschrieben.
Es finden sich im Unterverzeichnis das Hauptscript, ein Watchdogscript, sowie die vorgefertigten Services dieser Scripte und das updown-Script von PP an.
Ich würde mich sehr freuen, wenn auch jemand vom PP-Support sich die Scripte ansehen könnte.

Keep in mind: Momentan stehe ich noch recht weit am Anfang, was das Scripten unter Linux betrifft. Jedoch habe ich jederzeit mit bestem Wissen und Gewissen -und natürlich auch viel Liebe- die Scripte verfasst. Wenn es in Zukunft Updates geben wird, werde ich diese auch in diesem Thread online stellen.

Also dann, viel Spaß beim betrachten und ausprobieren. :)


P.S. falls jemand meine Arbeit in Form einer kleinen Spende wertschätzen möchte, würde ich mich riesig darüber freuen. ?
Gerne per PayPal an meine PayPal.me-Adresse: https://www.paypal.com/paypalme2/patricklwl


Danke und Beste Grüße
Patrick
hallo , hab gerade 20 euronen via paypal ueberwiesen! danke fuer die super arbeit. wenn ich mal fragen habe (auch dumme) - darf ich mich melden? gruesse
 
hallo , hab gerade 20 euronen via paypal ueberwiesen! danke fuer die super arbeit. wenn ich mal fragen habe (auch dumme) - darf ich mich melden? gruesse

Hallo udbuc!

Ganz großes Dankeschön!!!
Da war die Verwunderung und auch die Freude ganz groß beim Blick auf's Smartphone. :)

Immer her mit den Fragen - nachher schiebe ich noch ein Update nach. Also am besten noch einen Moment warten. ?


Beste Grüße
Patrick
 
UPDATE ist im ersten Post!

- Script für automatische Installation hinzugefügt
- GoogleDrive Repository entfernt
- Repository auf Github hinzugefügt
- Repository auf Pastebin aktualisiert
- kurze Anleitung mit Hinweisen erstellt
 
UPDATE
Einfach die Anleitung erneut ausführen, dann werden die Scripte und Services ausgetauscht:
https://github.com/PrivateMemberPP/PP_openVPN_cascade/blob/master/Anleitung.txt

Changelog:
- Anpassung Ausgabetext bei zu wenig Configs -> Pfad zu den Configs wird ins LOG geschrieben
- Anpassung HauptLOG: kein staendiges schreiben mehr alle 10 Sekunden
- Sekundenangabe der Verbindunsdauer kann nun direkt erfolgen und muss nicht mehr durch 10 dividiert werden
- exakte Zeitausgabe im LOG
- Geschwindigkeitsoptimierungen (Verbindungen bauen schneller auf + kürzere Wartezeit bei erneuter Verbindung)
- exakter Paketcheck bei Ausführung des Installationsscripts
- saubere Ausgabe bei Ausführung des Installationsscripts
 
Last edited:
UPDATE

Changelog:
- optimiertes LOG
- saubere Textausgabe bei Ausführung des Installationsscripts
- Update-Erkennung bei Ausführung des Installationsscripts: es werden die eigens im Hauptscript definierten Variablen ausgelesen und in die neue Version übernommen + entsprechende Textausgabe
 
Last edited:
UPDATE - mal wieder :)

Changelog
- vollständige Umstrukturierung des Hauptscripts:
- saubere, aufgeräumte Funktionen

- Ablaufoptimierungen
- minimale LOG-Aufhübschung
 
Ich wollte gerne mal fragen, ob das Script denn schon bei jemanden Einsatz findet?
Ist zufällig auch jemand dabei, der/die eine andere Distribution als Debian nutzt?

Gibt es eventuell Verbesserungsvorschläge oder Funktionen, welche erwünscht werden?
 
Ich teste es mal, wenn ich Zeit dafür habe. Persönlich hab ich keine Verwendung dafür, da ich die Kaskadierung selbst über die Konsole mache.
 
UPDATE

Changelog
- vollständige Codeoptimierung Hauptscript und Watchdogscript: Anpassung auf mind. Bash 4.4 -> dadurch leichte Geschwindigkeitsverbesserungen
- Optimierung des Reconnect-Timeouts: Script wird nicht mehr vollständig neugestartet, sondern Auswahl nächster Server, wenn der erste nicht erreichbar ist -> effizientere Scriptabarbeitung
- Überwachung der Anzahl vorhandener/nutzbarer Server beim Connect -> wenn die Anzahl nicht ausreichend ist (in Folge mehrerer Timeouts), wird das Script/der Dienst neugestartet
- Anpassung Timeoutzeit -> keine Verdopplung des Timeouts je Hop, sondern Erweiterung um jeweils 10 Sekunden (Verdopplung war vollkommen übertrieben)
 
@PP Frank :
Wie wäre es wenn ihr den Mann hier einfach bezahlt, damit sich mal was bei der Entwicklung tut?
Ein "Auto Reconnect" Feature, wenn ein Server down ist, bemängel ich schon lange und das wäre
ein deutlicher Mehrwert für euren Dienst.
(Bzw eine Funktion, dass ein anderer Server genommen wird, wenn der derzeitige zu stark ausgelastet ist fände ich noch besser)

PrivateMember macht das hier mal eben nebenbei und freiwillig. Schon seltsam dass euch sowas nicht möglich ist.
Ihr gebt immer an, dass eure zeitlichen Ressourcen stark begrenzt sind.
Nun ja ... dann müsst ihr halt zusätzlich Leute einstellten bzw Dienstleistungen in Auftrag gegeben.
 
@Morbis55
Vielen Dank für den Zuspruch und deine verbale Unzterstützung. :)
Es freut mich immer zu hören, wenn meine Arbeit wertgeschätzt wird.

Der von Dir genannte "Auto Reconnect" ist ja schon in meinem Script implementiert. Hier arbeite ich letztendlich mit dem, was die openVPN-Logs ausgeben.
Der Schwenk auf einen anderen Server wäre bestimmt, seitens PP, möglich - jedoch für mich schwer zu realisieren, da ich keine Referenzwerte zur Auslastung der Server beziehen kann. Lediglich die Serverauflistung auf der PP Website - jedoch weiß ich nicht, wie 'aktuell' diese Daten immer sind.
 
UPDATE

Changelog
- Bug im Array zur Serverlistung behoben -> fehlende Funktion zur 'Freigabe' sämtlicher Server, wenn die letzte Sitzung abgelaufen ist --> nun werden bei jedem neuen Verbindungsaufbau wieder sämtliche Server herangezogen
- leichte Geschwindigkeitsoptimierung -> zum Startzeitpunkt des Script wurde eine 'doppelte' Bereinigung eventuell vorhandener Sessions durchgeführt --> nun auf 1x begrnzt (spart knapp 3 Sekunden)
 
Back
Top