Wie kann ich ein Skript mit OpenVPN verknüpfen, damit es ausgeführt wird, wenn die VPN-Verbindung erfolgreich hergestellt wurde?
network-manger-openvpn
.
Wie kann ich ein Skript mit OpenVPN verknüpfen, damit es ausgeführt wird, wenn die VPN-Verbindung erfolgreich hergestellt wurde?
network-manger-openvpn
.
Antworten:
network-manager-openvpn
Stellt diese Funktionalität nicht zur Verfügung, müssen Sie diese openvpn
direkt nutzen .
Übergeben Sie --script-security 2 --up /path/to/your/script
es beim Anschließen. Wenn Sie eine Konfigurationsdatei unter verwenden /etc/openvpn/
, 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 Kontrolle auf Richtlinienebene über die Nutzung von OpenVPN von externen Programmen und Skripten. Niedrigere Werte sind mehr restriktiv, höhere Werte sind eher tolerant. Einstellungen für Niveau: 0 - Streng kein Aufruf externer Programme. 1 - (Standard) Ruft nur integrierte ausführbare Dateien wie ifconfig, ip, route oder netsh. 2 - Aufrufen von integrierten und benutzerdefinierten ausführbaren Dateien zulassen Skripte. 3 - Zulassen, dass Passwörter über die Umgebung an Skripte übergeben werden Variablen (möglicherweise unsicher). --up cmd Shell-Befehl, der ausgeführt wird, nachdem das TUN / TAP-Gerät erfolgreich geöffnet wurde (Pre --UID-Änderung des Benutzers). Das up-Skript ist nützlich zum Angeben Routing-Befehle, die IP-Verkehr für private Zwecke weiterleiten Subnetze, die am anderen Ende der VPN-Verbindung in existieren Der Tunnel. 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 auf der Manpage zu finden sind .
Erstellen /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 User
und Group
-Einstellung angegeben haben, führt OpenVPN auch Skripte wie down
root aus.
openvpn
direkt zu verwenden . Beim Einrichten eines Servers ist mir aufgefallen, dass OpenVPN versucht, die Verbindung wiederherzustellen, wenn der Server ausfällt. Nicht sicher, ob OpenVPN weiterhin versucht, wenn Ihre Netzwerkschnittstelle ausfällt.
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 geliefert hat . 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.
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 in Betracht ziehen, die Datei zu bearbeiten /etc/default/openvpn
. Untersuchen Sie folgende Zeilen:
# Optional arguments to openvpn's command line
OPTARGS=""
Von der Community OpenVPN Manpage auf--script-security
--script-Sicherheitsstufe Diese Direktive bietet eine Kontrolle auf Richtlinienebene über die Verwendung von external durch OpenVPN Programme und Skripte. Niedrigere Werte sind restriktiver und höher Werte sind freizügiger. Einstellungen für Level: 0 - Streng kein Aufruf externer Programme. 1 - (Standard) Ruft nur integrierte ausführbare Dateien wie ifconfig, ip, route, oder netsh. 2 - Aufrufen von integrierten ausführbaren Dateien und benutzerdefinierten Skripten zulassen. 3 - Zulassen, dass Kennwörter über Umgebungsvariablen an Skripts übergeben werden (möglicherweise unsicher). OpenVPN-Releases vor v2.3 unterstützten auch ein Methodenflag, das angibt, wie OpenVPN sollte externe Befehle und Skripte aufrufen. Dies kann entweder ausgeführt werden oder System. Ab OpenVPN v2.3 wird dieses Flag nicht mehr akzeptiert. In den meisten * nix Umgebungen, in denen der Ansatz execve () ohne Probleme verwendet wurde. Einige Anweisungen wie --up ermöglichen die Übergabe von Optionen an das externe Skript. Stellen Sie in diesen Fällen sicher, dass der Skriptname keine Leerzeichen oder das Zeichen enthält Der Konfigurationsparser wird ersticken, da nicht festgestellt werden kann, wo sich das Skript befindet Der Name endet und die Skriptoptionen beginnen.
Kombiniert mit einem abgekürzten Abschnitt auf --up
--up cmd Führen Sie den Befehl cmd aus, nachdem das TUN / TAP-Gerät erfolgreich geöffnet wurde (UID-Änderung vor dem Benutzer). cmd besteht aus einem Pfad zum Skript (oder ausführbaren Programm), dem optional gefolgt wird durch Argumente. Der Pfad und die Argumente können in einfache oder doppelte Anführungszeichen gesetzt werden und / oder Escapezeichen mit einem Backslash und sollte durch ein oder mehrere Leerzeichen getrennt werden.
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 /etc/openvpn/[client or server].conf
und die /etc/default/openvpn
Dateien ordnungsgemäß konfiguriert wurden, kann openvpn mit den folgenden Schritten gestartet oder gestoppt werden:
sudo service openvpn start
sudo service openvpn stop
Weitere nützliche Optionen für service openvpn
include cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Da dies ein ziemlich alter Thread ist, bin ich mir nicht sicher, ob er noch von Interesse ist. Wenn Sie den NetworkManager weiterhin zum Herstellen einer Verbindung mit einem VPN verwenden möchten, 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.
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) wie folgt 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 der openvpn-Konfiguration (normalerweise /etc/openvpn/server.conf
) die folgenden Zeilen hinzu . 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>