Comment puis-je associer un script à OpenVPN afin qu'il s'exécute lorsque le VPN est connecté avec succès ?
Réponses
Trop de publicités?network-manager-openvpn
ne fournit pas une telle fonctionnalité, vous devez utiliser openvpn
directement.
Passez --script-security 2 --up /path/to/your/script
lors de la connexion. Si vous utilisez un fichier de configuration situé à l'adresse suivante /etc/openvpn/
, ajoutez les lignes suivantes à votre fichier de configuration :
script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh
De la Page de manuel OpenVPN :
\--script-security level \[method\]
This directive offers policy-level control over OpenVPN’s usage
of external programs and scripts. Lower level values are more
restrictive, higher values are more permissive. Settings for
level:
0 -- Strictly no calling of external programs.
1 -- (Default) Only call built-in executables such as ifconfig,
ip, route, or netsh.
**2 -- Allow calling of built-in executables and user-defined
scripts.**
3 -- Allow passwords to be passed to scripts via environmental
variables (potentially unsafe).
--up cmd
Shell command to run after successful TUN/TAP device open (pre
--user UID change). The up script is useful for specifying
route commands which route IP traffic destined for private
subnets which exist at the other end of the VPN connection into
the tunnel.
Script Order of Execution
--up Executed after TCP/UDP socket bind and TUN/TAP open.
--down Executed after TCP/UDP and TUN/TAP close.
Il y a plus d'événements pour l'exécution de script, ceux-ci peuvent être trouvés sur la page page de manuel .
Créer /etc/openvpn/up.sh
et donnez-lui les droits d'exécution (disons 755 ou 700). Exemple de contenu pour l'ajout d'une adresse et d'une route IPv6 (présenté à des fins éducatives, ne le copiez pas directement) :
#!/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
Notez que cette up
script est exécuté en tant que root. Si vous n'avez pas spécifié un User
y Group
OpenVPN exécutera scripts comme down
comme racine aussi.
Comme il s'agit d'un fil de discussion assez ancien, je ne suis pas sûr qu'il soit toujours d'actualité. Si vous voulez toujours utiliser le NetworkManager pour vous connecter à un VPN, vous pouvez ajouter une simple règle udev comme celle-ci :
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
Ceci devrait exécuter tout script après la création du VPN.
A la question : "Comment puis-je associer un script à OpenVPN afin qu'il s'exécute lorsque le VPN est connecté avec succès ?". Je tiens à souligner que Lekensteyn a fourni un excellent 回答 . Mais, au moment où sa réponse a été composée, il manquait un peu de clarté sur la façon dont les arguments de ligne de commande openvpn doivent être fournis pour démarrer openvpn sur une machine ubuntu, en particulier pour qu'il fonctionne de la même façon après les redémarrages.
Arguments de la ligne de commande d'Openvpn sur Ubuntu :
Naturellement, on peut démarrer openvpn depuis une ligne de commande avec toutes les options légales disponibles. Mais, sur une machine Ubuntu, si l'on veut démarrer openvpn avec les mêmes arguments de ligne de commande après un redémarrage, il faut envisager de modifier le fichier /etc/default/openvpn
. Examinez les lignes suivantes :
# Optional arguments to openvpn's command line
OPTARGS=""
De la page de manuel de la communauté openvpn en --script-security
\--script-security level
This directive offers policy-level control over OpenVPN's usage of external
programs and scripts. Lower level values are more restrictive, higher
values are more permissive. Settings for level:
0 -- Strictly no calling of external programs.
1 -- (Default) Only call built-in executables such as ifconfig, ip, route,
or netsh.
2 -- Allow calling of built-in executables and user-defined scripts.
3 -- Allow passwords to be passed to scripts via environmental variables
(potentially unsafe).
OpenVPN releases before v2.3 also supported a method flag which indicated how
OpenVPN should call external commands and scripts. This could be either execve
or system. As of OpenVPN v2.3, this flag is no longer accepted. In most \*nix
environments the execve() approach has been used without any issues.
Some directives such as --up allow options to be passed to the external script.
In these cases make sure the script name does not contain any spaces or the
configuration parser will choke because it can't determine where the script
name ends and script options start.
Combiné avec une section abrégée sur les --up
\--up cmd
Run command cmd after successful TUN/TAP device open (pre --user UID change).
cmd consists of a path to script (or executable program), optionally followed
by arguments. The path and arguments may be single- or double-quoted and/or
escaped using a backslash, and should be separated by one or more spaces.
Exemple :
Sur ma machine avec un openpvn server.conf, j'ai les lignes suivantes dans mon /etc/default/openvpn
Datei:
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Incidemment, le fichier nat.sh configure la traduction d'adresse réseau pour le routage du trafic du réseau privé des clients openvpn vers l'internet public ; ce qui est bien quand on ne fait pas confiance à un point d'accès WIFI public.
En plus de permettre de redémarrer comme prévu après un redémarrage, lorsque /etc/openvpn/[client or server].conf
y /etc/default/openvpn
sont correctement configurés, openvpn peut être démarré ou arrêté avec :
sudo service openvpn start
sudo service openvpn stop
Autres options utiles disponibles pour service openvpn
inclure cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Je suis tombé sur la réponse dans mes recherches pour résoudre ce problème et j'ai découvert que la meilleure solution est (en utilisant le serveur openvpn) comme suit :
Créer un script à exécuter :
# 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>
Ajoutez les lignes suivantes dans la configuration d'openvpn (habituellement /etc/openvpn/server.conf
). Dans la réponse ci-dessus, il a été utilisé up et down, qui sont utilisés lorsque le serveur démarre (redémarre). Les directives client-connect (et client-disconnect) sont utilisées lorsque le client se connecte (se déconnecte).
# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
Voici la configuration pour OpenVPN, afin d'envoyer du courrier après une connexion réussie :
-
Créer un répertoire
mkdir /mailOpenVPN
-
Rendez-le accessible dans le monde entier
chmod 777 /mailOpenVPN
-
vim /etc/openvpn/up.sh
#! /bin/sh python3 /mailOpenVPN/sendMail.py $X509_0_CN $trusted_ip $ifconfig_pool_remote_ip
-
Faire
up.sh
exécutablechmod +x /etc/openvpn/up.sh
-
Ajouter
/etc/openvpn/server.conf
script-security 2 client-connect /etc/openvpn/up.sh
-
Redémarrer le service OpenVPN
service openvpn restart
-
vim /mailOpenVPN/sendMail.py
import sys import smtplib import datetime smtp_user = "SENDER MAIL" smtp_pass = "PASS" recipients = "DEST MAIL" smtp_server = "smtp.gmail.com" # This is in my case, because sender is gmail try: now = str(datetime.datetime.now()) subject = "New connection to home VPN" msg = "Hello chief,\n\n" msg += "New connection detected:\n" msg += "User: " + str(sys.argv[1]) + "\n" msg += "Public IP: " + str(sys.argv[2]) + "\n" msg += "Assigned IP: " + str(sys.argv[3]) + "\n" msg += "Timestamp: " + str(now) + "\n\n" msg += "Best regards,\n" msg += "Your humble Pi" sender = "OpenVPN Home" message = "From: OpenVPN Home\nSubject: {0}\n\n{1}".format(subject, msg) server = smtplib.SMTP_SSL(smtp_server, 465) server.ehlo() server.login(smtp_user, smtp_pass) server.sendmail(sender, recipients, message) server.close() except: pass
- Réponses précédentes
- Plus de réponses