it-swarm.com.de

Wie führe ich ein Skript aus, nachdem sich OpenVPN erfolgreich verbunden hat?

Wie kann ich ein Skript mit OpenVPN verknüpfen, damit es ausgeführt wird, wenn die VPN-Verbindung erfolgreich hergestellt wurde?

49
Oxwivi

network-manager-openvpn bietet diese Funktionalität nicht, Sie müssen openvpn direkt verwenden.

Übergeben Sie --script-security 2 --up /path/to/your/script, wenn Sie eine Verbindung herstellen. Wenn Sie eine Konfigurationsdatei unter /etc/openvpn/ verwenden, hängen Sie die nächsten Zeilen an Ihre Konfigurationsdatei an:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Aus der OpenVPN-Manpage :

--script-Sicherheitsstufe [Methode] 
 Diese Direktive bietet eine Kontrolle auf Richtlinienebene über die Verwendung 
 externer Programme und Skripte durch OpenVPN. Niedrigere Werte sind restriktiver, höhere Werte sind toleranter. Einstellungen für die Ebene 
: 
 
 0 - Streng kein Aufruf externer Programme. 
 1  Standard) Nur integrierte ausführbare Dateien wie ifconfig aufrufen, 
 ip, route oder netsh. 
  2 - Ermöglicht das Aufrufen von integrierten ausführbaren Dateien und benutzerdefinierten 
 Skripten.  
 3 - Zulassen, dass Passwörter über Umgebungsvariablen 
 (Möglicherweise unsicher) an Skripte übergeben werden. 
 --Up cmd 
 Shell-Befehl nach erfolgreichem Öffnen des TUN/TAP-Geräts ausführen (vor 
 - Benutzer-UID-Änderung). Das Skript up ist nützlich, um 
 Routenbefehle anzugeben, mit denen IP-Verkehr für private 
 Subnetze, die am anderen Ende der VPN-Verbindung vorhanden sind, in den 
 Tunnel geleitet wird. 
 Skript-Ausführungsreihenfolge 
 --Up Wird ausgeführt, nachdem das TCP/UDP-Socket gebunden und TUN/TAP geöffnet wurde. 
 --Down Wird ausgeführt, nachdem TCP/UDP und TUN/TAP geschlossen wurden. 

Es gibt weitere Ereignisse für die Skriptausführung, die Sie auf der Seite --- (Handbuch finden.

Erstellen Sie /etc/openvpn/up.sh und erteilen Sie ihm Ausführungsberechtigungen (z. B. 755 oder 700). Beispielinhalt zum Hinzufügen einer IPv6-Adresse und einer IPv6-Route (zu Bildungszwecken angezeigt, nicht direkt kopieren):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Beachten Sie, dass dieses up Skript als root ausgeführt wird. Wenn Sie keine Einstellung für User und Group angegeben haben, führt OpenVPN auch Skripte wie down als Root aus.

62
Lekensteyn

Auf die Frage: "Wie kann ich OpenVPN ein Skript zuordnen, damit es ausgeführt wird, wenn die VPN-Verbindung erfolgreich hergestellt wurde?" Ich möchte darauf hinweisen, dass Lekensteyn eine hervorragende Antwort lieferte. Zu dem Zeitpunkt, als seine Antwort verfasst wurde, fehlte es jedoch an Klarheit darüber, wie openvpn-Befehlszeilenargumente bereitgestellt werden sollten, um openvpn auf einem Ubuntu-Computer zu starten, insbesondere, damit es nach einem Neustart genauso funktioniert.


Openvpn-Befehlszeilenargumente unter Ubuntu:

Natürlich kann man openvpn von einer Kommandozeile aus mit allen verfügbaren legalen Optionen starten. Wenn man aber auf einem Ubuntu-Rechner openvpn nach einem Neustart mit denselben Befehlszeilenargumenten starten möchte, sollte man erwägen, die Datei /etc/default/openvpn zu bearbeiten. Untersuchen Sie folgende Zeilen:

# Optional arguments to openvpn's command line
OPTARGS="" 

Von der community openvpn man page auf --script-security

--script-Sicherheitsstufe 
 Diese Direktive bietet Kontrolle auf Richtlinienebene über die Verwendung von externen 
 Programmen und Skripten durch OpenVPN. Niedrigere Werte sind restriktiver, höhere 
 Werte sind toleranter. Einstellungen für Level: 
 0 - Streng kein Aufruf externer Programme. 
 1 - (Standard) Rufen Sie nur integrierte ausführbare Dateien wie ifconfig, ip, route, 
 Oder netsh auf. 
 2 - Aufrufen von integrierten ausführbaren Dateien und benutzerdefinierten Skripten zulassen. 
 3 - Zulassen, dass Passwörter über Umgebungsvariablen 
 (Möglicherweise unsicher) an Skripte übergeben werden. 
 
 OpenVPN-Versionen vor v2.3 unterstützten auch ein Methodenflag, das gab an, wie 
 OpenVPN externe Befehle und Skripte aufrufen soll. Dies kann entweder execve 
 Oder system sein. Ab OpenVPN v2.3 wird dieses Flag nicht mehr akzeptiert. In den meisten * nix 
 Umgebungen wurde der Ansatz execve () ohne Probleme verwendet. 
 
 Einige Direktiven wie --up erlauben die Übergabe von Optionen an das externe Skript. 
 Stellen Sie in diesen Fällen sicher, dass der Skriptname keine Leerzeichen enthält. Andernfalls wird der 
 Konfigurationsparser blockiert, da nicht festgestellt werden kann, wo der 
 Name des Skripts endet und die Skriptoptionen beginnen. 

Kombiniert mit einem abgekürzten Abschnitt auf --up

 - up cmd 
 Befehl cmd nach erfolgreichem Öffnen des TUN/TAP-Geräts ausführen (UID-Änderung vor dem Benutzer). 
 cmd besteht aus einem Pfad zu einem Skript (oder einem ausführbaren Programm). , optional gefolgt von 
 Argumenten. Der Pfad und die Argumente können in einfache oder doppelte Anführungszeichen gesetzt und/oder mit einem Backslash 
 Versehen werden und sollten durch ein oder mehrere Leerzeichen getrennt werden.

Beispiel:

Auf meinem Computer mit einer openpvn-server.conf habe ich die folgenden Zeilen in meiner /etc/default/openvpn -Datei:

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Im Übrigen richtet die Datei nat.sh die Netzwerkadressübersetzung ein, um den privaten Netzwerkverkehr von OpenVPN-Clients an das öffentliche Internet weiterzuleiten. Das ist gut, wenn man einem öffentlichen WIFI-Zugangspunkt nicht vertraut.


Abgesehen davon, dass ein Neustart nach einem Neustart wie erwartet zulässig ist, kann openvpn bei ordnungsgemäß konfigurierten /etc/openvpn/[client or server].conf - und /etc/default/openvpn -Dateien mit den folgenden Schritten gestartet oder gestoppt werden:

Sudo service openvpn start
Sudo service openvpn stop

Weitere nützliche Optionen für service openvpn sind cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.

5
Keith Reynolds

Da dies ein ziemlich alter Thread ist, bin ich mir nicht sicher, ob er noch von Interesse ist. Wenn Sie weiterhin den NetworkManager verwenden möchten, um eine Verbindung zu einem VPN herzustellen, können Sie eine einfache udev-Regel wie die folgende hinzufügen:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

Dies sollte jedes Skript ausführen, nachdem das VPN erstellt wurde.

3
Thomas

Ich bin auf die Antwort bei meinen Nachforschungen gestoßen, um dieses Problem zu lösen, und habe herausgefunden, dass die beste Lösung (unter Verwendung von OpenVPN-Server) folgendermaßen ist:

Erstellen Sie ein Skript, das ausgeführt werden soll:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

Fügen Sie die folgenden Zeilen in die openvpn-Konfiguration ein (normalerweise /etc/openvpn/server.conf). In der obigen Antwort wurde "up" und "down" verwendet, die beim Starten des Servers verwendet werden (Neustart). Die Direktive client-connect (und client-disconnect) wird verwendet, wenn der Client eine Verbindung herstellt (trennt).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
1
CozC