linux bash-script VPN-Steuerung für die Konsole/Terminal Variante

swirlen

New Member
Guten Tag,

Ich habe es für diese Konsolen-Variante gemacht: https://www.perfect-privacy.com/de/manuals/linux_openvpn_terminal_cascading
Die Einstellung mit Passwort-Datei.

Ich kenne mich nur ein bisschen mit bash aus, damit ich mir zb solche Sachen oder auch kleinere Scripte für mein system bearbeiten oder fertigen kann. :>
In erster linie habe ich es für mich gebastelt, als ich angefangen hatte es zu Fertigen, habe ich etwas später erst das Forum Entdeckt :>

Es wird "tmux" benötigt, das ist wichtig.
less, tail, curl, wget, ufw, macchanger - ebenso
Man kann das Script so starten oder mit Argumente,
oder mit -v startet er nur eine VPN-Verbindung die man im Script eingetragen hat (das habe ich zb in der crontab drinnen stehen als @reboot Befehl)
- mit dem Argument "-vh" kann das Script die VPN-Überwachung direkt in den Hintergrund starten, zb für den Systemstart.

Wer die "updown.sh" nicht nutzt muss auch noch "VPN_OPTION1" und "VPN_OPTION2" auskommentieren.
Dann geht aber kein Multy-Hop

Es muss als root oder su Ausgeführt werden oder wer es hat, sudo, sudo ist nicht mit eingebaut.
Die Ortschaft von den den Openvpn PP-Configs muss evtl. noch angepasst werden.
Die befehle less und tail sind auch mit eingebaut.
Für die hop-verbindungen, den Status, die befehle less und tail logge ich die openvpn ausgabe in /tmp -- Die Loggs werden nach jeder neuen Verbindung zurück gesetzt.
less habe ich als laufende log eingebaut und tail um die letzten paar zeilen kurz anzeigen zu lassen (bei tail als laufende log hat mich gestört, das man dies nur mit STRG+C beenden kann und somit das script dann auch beendet war)
um bei less die laufende log zu verlassen STRG+C und dann q
wget für den IP_Check
cURL für den Serverstatus (wird in less gestartet)
ufw für den Killswitch
Die Killswitch muss angepasst, dein Netzwerk Interface muss in der Variable "NETZINTERFACE_1" eingetragen werden (zb. mit "ifconfig" oder mit "cat /proc/net/dev" Anzeigen lassen)
"NETZINTERFACE_2" dies ist nur für das 2te Netzwerk Interface, zb für das erste für lan und das 2te für wlan etc (Dort werden nur die Server-IP's in die ufw angehangen / nachgetragen)
macchanger benötigt auch die NETZINTERFACE_1 und NETZINTERFACE_2

Wenn man im Menü eine Falsche Eingabe abschickt oder einfach nur Enter drückt, Refresht er sozusagen.
Wenn man ein hop machen möchte, muss man warten bis die Verbindung fertig ist, man kann es überprüfen, im Menü einfach Enter betätigen, bei der VPN-Länder / Stadt Auswahl kann man den Status anzeigen lassen, indem man 90 eingibt.

Meine openvpn Version "OpenVPN 2.5.1 x86_64-pc-linux-gnu" < vllt ist das ja wichtig
So, es ist kein Meisterwerk (aber bei mir funktioniert es) :>

Da ich auf Debian eingeschossen bin und ich nicht wirklich andere linux benutze, kann ich nicht viel dazu sagen, ob das Script auf anderen Systemen läuft, außer auf Debian und deren Derviantes (auf meinen Laptop läuft das TuxedoOS das auf Ubuntu basiert, da läuft es auch - ubuntu stammt ja auch von Debian ab).

Steuerung:
Das ganze wird mit zahlen gesteuert und hier wird nur das Hauptmenü aufgelistet, da ich noch abgekürzt habe, zb.:
- 1 ist VPN-Server Auswahl also habe ich für Reconnecten für VPN die 1 am Anfang und dann Auswahl der hop 1 2 oder 3, oder:
- 4 ist UFW-Firewall ist dann also wie im Menü direkt 1 UFW einschalten und 2 ausschalten also im Hauptmenü 41 für UFW einschalten oder 42 zum abschalten

1) VPN : dort kommt man zur VPN Auswahl mit den zahlen wähl man einen Server aus, dann 1 für hop 1, für multyhop nach 2 oder 3.
11) Reconnect : er beendet hop 2 und 3 und versucht hop 1 zu reconnecten.
111) Reconnect : es wird wie 11) hop1 reconnect, solange bis er eine Verbindung aufgebaut hat, aber ohne hop2 und 3 zu beenden.
12) Reconnect : es wird hop 3 beendet und er versucht hop 1 und danach hop 2 neu zu Verbinden, solange bis er eine Verbindung aufgebaut hat.
122) Reconnect : es es wird nur versucht hop 2 zu neu zu Verbinden.
13) Reconnect : es wird versucht alle 3 Server nach der Reihe neu zu Verbinden, solange bis er eine Verbindung aufgebaut hat.
133) Reconnect : nur hop 3 wird neu Verbunden

4) UFW-Firewall : für die Killswitch, dort kann man Firewall regeln neu einlesen, an.- und ausschalten, etc
41) UFW-Firewall einschalten
42) UFW-Firewall abschalten

5) MAC-Adressen random ändern
51 Macadresse Random ändern netzwerk 1
52) Macadresse Random ändern netzwerk 2
53) Macadresse Random ändern netzwerk 1 und 2 gleichzeitig

6) VPN-Überwachung : die Einstellungen für die Überwachung und es können dort temporär die Verbindungen für das Überwachungsscript geändert werden (die Änderung wird in einer tmp datei geschrieben dann dann von dort übernommen) etc
61) VPN-Überwachung einschalten
62) VPN-Überwachung abschalten
63) VPN-Überwachung Reconnect-Schleife erzwingen

00) Zurück : geht einen Menüpunkt zurück

91) Stopt hop 1
92) Stopt hop 2
93) Stopt hop 3
9123) Stopt hop 1 2 3
923) Stopt hop 2 3
9213) Stopt wieder htop 1 2 3
9321)...
932)...
...etc


Neu:
https://pastebin.com/ATGz4Hu5 < vom 27.03.2024
- UFW-Firewall für die Killswitch wurde geändert:
*Frankfurt von den 2 Servern wurde einer entfernt und der andere hat eine neue IP


Alt:
https://pastebin.com/v56heatY < vom 26.03.2024
- Menü 999 wurde Überarbeitet:
1) Alles an: UFW-Firewall und die VPN-Überwachung wird gestartet.
2) Alles aus: VPN-Verbindungen, UFW-Firewall und die VPN-Überwachung wird beendet.
33) Zurücksetzen: Temporäre Datein löschen, tmux Sessions, VPN und Script Schließen.

https://pastebin.com/QD6CtJE2 < vom 18.02.2024
-Reconnect wurde etwas Überarbeitet, um es zu übernehmen einmal die alte Verbindung beenden und neu Verbinden und die Überwachung Neustarten.

https://pastebin.com/NgCg09Yg < vom 05.02.2024
 
Last edited:
Vielen Dank für deine Arbeit und dass du uns daran teilhaben lässt.

Damit hast du schon mehr geleistet, als die Entwickler hier selbst.
Die haben in den letzten Jahren nämlich rein gar nichts für Linux gemacht!
Warten wir mal ab in welchem Jahrhundert dieser ominöse neue Client für Linux kommen soll.
Ich rechne gar nicht mehr damit. In der zwischenzeit versuche ich lieber mal dein Script.
 
Ich habe jetzt noch wget und curl eingebaut,
wget für den IP-Check und
curl für den Server-Status
 
Last edited:
Cool wäre noch, wenn man noch ein Killswitch mit einbaut, dann hätte man quasi alles, was man braucht
Ein Check für Anfänger wäre auch nicht schlecht, ob die Programme/Tools alle installiert sind am Anfang:

Bash:
if which wget>/dev/null;
then
 echo "wget command found"
else
 echo "please install wget"
fi

if which openvpn>/dev/null;
then
 echo "openvpn command found"
else
 echo "please install openvpn"
fi

Und so weiter :)
 
Last edited:
Ein Check für Anfänger wäre auch nicht schlecht, ob die Programme/Tools alle installiert sind am Anfang:
Damit könntest du recht haben, hab ich mit rein gemacht.

Cool wäre noch, wenn man noch ein Killswitch mit einbaut, dann hätte man quasi alles, was man braucht
Wie ich in einem Post hier im Forum gesehen habe, wird der (oder die?) Killswitch in der iptaples konfiguriert.
 
Hm, man kann das Killswitch:innen mit einem Ein und Aus Schalter setzen und vllt. ein Backup für eine vorhandene oder geänderte iptables-Regel einbauen.
Sind die IP's davon noch aktuell?
 
Last edited:
Sind die IP's davon noch aktuell?
Ich denke schon, ich verwende das Script aktuell selber.
Jeden Server habe ich jetzt nicht getestet, aber die Server, die ich verwende, funktionieren ohne Probleme

@swirlen
Finde das Super, was du da auf die Beine stellst. Danke dir!!!
 
Ich denke schon, ich verwende das Script aktuell selber.
Jeden Server habe ich jetzt nicht getestet, aber die Server, die ich verwende, funktionieren ohne Probleme

@swirlen
Finde das Super, was du da auf die Beine stellst. Danke dir!!!
danke :>
ich sehe gerade, es wird gar nicht iptables genutzt, sondern ufw :D
 
so, ich habe es hinzugefügt und ich habe die IP's überprüft, es sind 2 raus genommen worden:
Melbourne Australien
Istanbul Türkei

für den Killswitch muss man im script noch sein Netzwerkinterface herausfinden, zb mit "ifconfig" oder mit "cat /proc/net/dev"
und dies muss dann in der Variable "NETZINTERFACE" geändert werden
 
Last edited:
einmal aktualisiert, für die UFW-Firewall habe ich eine IP bei Amsterdam geändert.
 
Last edited:
Ich habe das Script hier einmal aktualisiert
* es gab über der zeit immer mal wieder kleine Änderungen

Die Steuerung vom Hauptmenü aus:
* 11 macht ein reconnect von hop1, 12 von hop2 und 13 von hop3 (das Funktioniert aber nur mit dem letzten hop, wenn man 3 hat und dazwischen die 1 oder 2 reconnectet ist es Kaskadiert < das werde ich aber noch ändern )
* 41 ufw aktivieren, 42 deaktivieren und 43 den Status mit Regeln via less Anzeigen lassen
- so spart man sich dafür die Untermenüs

Und ein paar kleine Fehlerbehebungen
* zb. wenn man kein ufw hat und der Fehler "ufw status Befehl nicht gefunden" im Hauptmenü verschwindet etc.

der Server
"Bucharest"
ist raus...
Danke @BAM-BAM für die ufw Killswitch Aktualisierung
 
Last edited:
* 11 macht ein reconnect von hop1, 12 von hop2 und 13 von hop3 (das Funktioniert aber nur mit dem letzten hop, wenn man 3 hat und dazwischen die 1 oder 2 reconnectet ist es Kaskadiert < das werde ich aber noch ändern )
Habe ich jetzt geändert, jetzt reconnectet er auch hop 2 und 3.
 
Erstmal danke für die Bereitstellung des Skripts. Ich hatte dieses auf meinem alten Linux zum Luafen bringen können.
Leider erhalte auf meinem neu aufgesetzten Debian auch nach mehrmaligen Kopieren des orginal Skripts folgende Fehlemeldungen:

/vpn.sh: 89: [[: not found
tmux is a tracked alias for /usr/bin/tmux
openvpn is /usr/sbin/openvpn
ufw is /usr/sbin/ufw
wget is /usr/bin/wget
curl is /usr/bin/curl
tail is /usr/bin/tail
less is /usr/bin/less


######################
# STRG+C zum Beenden #
######################

./vpn.sh: 283: Syntax error: "do" unexpected (expecting ";;")
Könnte jemand behilflich sein?

Danke.
 
Danke für die schnelle Antwort.
Ich sollte, glaube ich, zu meinem aufgesetzten System, was mitteilen, kann zur Lösung helfen, hoffe ich.
Ich nutze ein Linux Fedora xfce unter Qubes OS.
Wenn ich das Skript im Root verzeichnis starte, findet es das openvpn nicht.
Daher habe ich den Anfang deines Skripst wie fogt angepasst:
clear
VPN_ARGUMENT="Nuremberg" # VPN über das Script mit einem Argument starten (-v), VPN-Namen a>
VPN_SCRIPT_NAME="vpn.sh"
SCRIPT_DIR="/etc/openvpn" # Ort des VPN Scripts.
OPENVPN_DIR="/etc/openvpn

Führe es auch mit sudo bash ./vpn.sh aus.
Das Skript startet auch erstmal ohne Fehler, nach der Auswahl der ersten VPN-Verbindung als hop1 erhalte ich folgenden Fehler:
can't find window: 1
can't find window: 1
#?
 
Das Skript startet auch erstmal ohne Fehler, nach der Auswahl der ersten VPN-Verbindung als hop1 erhalte ich folgenden Fehler:
can't find window: 1
can't find window: 1
Du musst da noch die
FENSTER_ID_1="1"
anpassen, weil mein tmux startet die Fenster mit der ID 1.
Ändere die Werte der FENSTER_ID_1="1" auf:
FENSTER_ID_1="0"
FENSTER_ID_2="1"
FENSTER_ID_3="2"
FENSTER_ID_4="3"

Nachtrag: am besten tmux nach der Änderung dann komplett abschalten / kill ... mit root "tmux kill-server" stoppen (solange die openvpn-verbindung nicht läuft)
 
Last edited:
Vielleicht sollte dein Skript ergänzt werden, dass bei weiterm Hop die virtuelle Netzwerkkarte dazu in den ufw-Regeln freigegeben werden sollte wie unten. Ist Wichtig bei aktiviertem Killswitch. Anderfalls sperrt dieser weiter Hops.
 

Attachments

  • Screenshot_2023-12-25_03-32-07.jpg
    Screenshot_2023-12-25_03-32-07.jpg
    94.1 KB · Views: 8
Back
Top