VPN am Client mit Desktop-Icons starten und stoppen

VPN ON OFF

In meinem Beitrag -> Fernsteuerung und Homeworking mit Ubuntu habe ich die Möglichkeit vorgestellt, auf einem entfernten PC so zu arbeiten, als säße man davor. Voraussetzung dafür ist eine VPN-Verbindung, wobei ich aufgrund der einfachen Installation und Konfiguration -> OpenSSL gewählt habe. Da es hin und wieder Probleme mit dem Gnome-Network-Manager gibt, habe ich aus Gründen der Zuverlässigkeit den Start und Stopp der VPN-Verbindung dem User überlassen, indem ich ihm die Möglichkeit gebe, Open VPN am Client mit Desktop-Icons starten und stoppen zu können.

Im Beitrag -> SSL-VPN mit OpenVPN in Ubuntu 18.04 wird der Start bereits beim Login durchgeführt, was z.B. bei einem fremden (WLAN-)Netzwerk, zu dem man in diesem Moment noch keine Verbindung aufgebaut hat, ein Problem darstellt. Für diese Lösung benötigt man zwei Skripte und zwei Desktop-Icons. OpenVPN muss natürlich installiert sein und die Konfigurationsdatei von der Firewall heruntergeladen worden sein.

Die Konfigurationsdatei testuser@utm9-fw.ovpn speichere ich im home-Verzeichnis des Users unter /home/testuser/.vpn/ und erstelle die Scriptdatei zum Starten der VPN-Verbindung. Ich verwende hier den Parameter –daemon, um den Prozess im Hintergrund laufen zu lassen.

Das geht entweder ganz einfach mit folgender Zeile im Terminal

:~$ sudo openvpn --config /home/testuser/.vpn/testuser@utm9-fw.ovpn --daemon

oder man schreibt ein Script, das für den User noch prüft, ob die Verbindung tatsächlich steht:

#!/bin/bash
WEISS="3[1;37m"
ROT="3[1;31m"

# File vpn.sh (startet die VPN-Verbindung)
echo -e "${WEISS}Die VPN-Verbindung wird aufgebaut. Bitte warten..."
if ( sudo systemctl status openvpn | grep " active" >/dev/null )
then
	sudo openvpn --config /home/testuser/.vpn/testuser@utm9-fw.ovpn --daemon >/dev/null
else
echo "openvpn service start"
	sudo systemctl start openvpn >/dev/null
	sleep 3
echo "openvpn start"
	sudo openvpn --config /home/testuser/.vpn/testuser@utm9-fw.ovpn --daemon >/dev/null
fi

# Prüfe den Status des Daemon
if ( ps -eo 'comm' | grep "openvpn" >/dev/null )
then
	echo "Der Daemon wurde erfolgreich gestartet."
else
	echo -e "${ROT}### ERROR ###"
	echo "OpenVPN konnte nicht gestartet werden!"
	echo -e "${WEISS}Beliebiger Taste für WEITER..." 
	read INP
	exit 1
fi
sleep 15
echo -e "\n"

# Prüfen on Verbindung besteht
# IP des Hosts, der geprüft werden kann (z.B. eine NAS oder ein Server)
HOST="10.10.0.1"
echo "Prüfung, ob das entfernte Netz erreicht werden kann..."
ping -w5 -c1 $HOST 1>/dev/null 2>/dev/null
SUCCESS=$?
if [ $SUCCESS -eq 0 ]
then
	echo -e "Der Host ${WATCH_IP} wurde erreicht."
	echo "Die Verbindung wurde erfolgreich hergestellt."
else
	echo -e "${ROT}### ERROR ###"
	echo "Die Ziel-IP kann nicht erreicht werden!"
	echo "Der Service OpenVPN wird wieder gestoppt und die Verbindung getrennt."
	echo -e "${WEISS}Beliebiger Taste für WEITER..." 
	read INP
 	sudo pkill "openvpn --config /home/testuser/.vpn/testuser@utm9-fw.ovpn" > /dev/null
 	sudo ip link delete tun0 > /dev/null
	exit 1
fi
echo -e "\n"
echo -e "${WEISS}Beliebige Taste für WEITER..." 
read INP
exit 0

Zu beachten ist hier, dass mein testuser eigentlich kein sudo ausführen kann, ohne ein Passwort einzugeben. Das muss ihm explizit erlaubt werden, indem man die Liste der sudoers erweitert. Vertraut man seinem User, kann man anstelle der für die Skripte benötigten Rechte auch alle Aktionen von der Eingabe des sudo-Passworts ausnehmen.. Dazu gibt es einen schönen Artikel -> hier.
Um dem testuser nur die für diese beiden Scripte notwendigen sudo-Rechte zu geben editiert man die Datei custom-users mit visudo:

~$: sudo visudo -f /etc/sudoers.d/custom-users

In diese in der Regel leere Datei trägt man folgende Zeile ein:

testuser ALL=(ALL) NOPASSWD:/usr/sbin/openvpn, /bin/systemctl status openvpn, /bin/systemctl start openvpn, /usr/bin/pkill, /sbin/ip

Jetzt speichert man und schliesst die Datei. In der zweiten Scriptdatei kille ich den Prozess openvpn einfach, um die VPN-Verbindung zu beenden.

#!/bin/bash
WEISS="3[1;37m"
ROT="3[1;31m"

# File vpnkill.sh (stoppt die VPN-Verbindung)
echo -e "${WEISS}Die VPN-Verbindung wird unterbrochen. Bitte warten…"
sudo pkill "openvpn --config /home/testuser/.vpn/testuser@utm9-fw.ovpn" > /dev/null
echo "Der Prozess wurde gekillt."
sleep 10
if ( ifconfig | grep "tun0" >/dev/null )
then
	echo -e "${ROT}Die VPN-Schnittstelle tun0 ist noch aktiv!"
	sudo ip link delete tun0 >/dev/null
	sleep 2
	echo -e "${WEISS}Die VPN-Schnittstelle tun0 wurde erfolgreich gelöscht."
else
	sleep 1
fi
echo "Die Verbindung wurde getrennt."
echo -e "\n"
echo "Beliebige Taste für WEITER..."
read INT
EXIT 0

Die beiden Desktop-Icons erstelle ich aus einer Kopie des Terminals und speichere sie als VPN_ON.desktop und VPN_OFF.desktop in /home/testuser/Desktop (bzw. Schreibtisch in der deutschen Version).

[Desktop Entry]
Name=VPN ON
Comment=Use the command line
TryExec=gnome-terminal
Exec=gnome-terminal --command="/home/testuser/vpn.sh"
Icon=utilities-terminal
Type=Application
X-GNOME-DocPath=gnome-terminal/index.html
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-terminal
X-GNOME-Bugzilla-Component=BugBuddyBugs
X-GNOME-Bugzilla-Version=3.6.2
Categories=GNOME;GTK;Utility;TerminalEmulator;
StartupNotify=true
OnlyShowIn=GNOME;Unity;
Keywords=Run;
Actions=New
X-Ubuntu-Gettext-Domain=gnome-terminal
Name[de_DE]=VPN ON
[Desktop Action New]
Name=New Terminal
Exec=gnome-terminal
OnlyShowIn=Unity
[Desktop Entry]
Name=VPN OFF
Comment=Use the command line
TryExec=gnome-terminal
Exec=gnome-terminal --command="/home/testuser/vpnkill.sh"
Icon=utilities-terminal
Type=Application
X-GNOME-DocPath=gnome-terminal/index.html
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-terminal
X-GNOME-Bugzilla-Component=BugBuddyBugs
X-GNOME-Bugzilla-Version=3.6.2
Categories=GNOME;GTK;Utility;TerminalEmulator;
StartupNotify=true
OnlyShowIn=GNOME;Unity;
Keywords=Run;
Actions=New
X-Ubuntu-Gettext-Domain=gnome-terminal
Name[de_DE]=VPN OFF
[Desktop Action New]
Name=New Terminal
Exec=gnome-terminal
OnlyShowIn=Unity

Die beiden Desktop-Icons müssen beim ersten Start noch als vertrauenswürdig eingestuft werden. Danach lässt sich der VPN-Tunnel bequem durch den User starten und stoppen.

Buy Me a Coffee at ko-fi.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Nobody is perfect
Einen Fehler gefunden?
Verbesserungsvorschläge, Lob oder Kritik?

Schreiben Sie mir mit dem -> Kontaktformular
oder per -> E-Mail.
DANKE!