Comment associer un script à OpenVPN pour qu'il s'exécute lorsque le VPN est connecté avec succès?
network-manager-openvpn
ne fournit pas une telle fonctionnalité, vous devez utiliser openvpn
.
Passez --script-security 2 --up /path/to/your/script
lors de la connexion. Si vous utilisez un fichier de configuration situé à /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
Depuis la page de manuel OpenVPN :
--script-security level [méthode] Cette directive offre un contrôle au niveau politique sur l’utilisation par OpenVPN de programmes et de scripts externes. Les valeurs de niveau inférieur sont plus restrictives , Les valeurs élevées sont plus permissives. Réglages pour le niveau : 0 - Interdiction d'appeler des programmes externes. 1 Par défaut) Appeler uniquement les exécutables intégrés tels que ifconfig, ip, route ou netsh. 2 - Autoriser l’appel d’exécutables intégrés et de scripts définis par l’utilisateur . 3 - Autorisez les mots de passe à être transmis à des scripts via des variables d'environnement (Potentiellement dangereuses). --Up cmd Commande de shell à exécuter après l’ouverture réussie du périphérique TUN/TAP (avant - modification de l’UID de l’utilisateur). Le script up est utile pour spécifier les commandes Routant le trafic IP destiné à des sous-réseaux privés Situés à l’autre extrémité de la connexion VPN dans Dans le tunnel. Ordre d'exécution du script --Up Exécuté après la liaison du socket TCP/UDP et l'ouverture de TUN/TAP. - Down Exécuté après la fermeture de TCP/UDP et TUN/TAP.
Il y a plus d'événements pour l'exécution du script, ceux-ci peuvent être trouvés sur --- (page de manuel .
Créez /etc/openvpn/up.sh
et donnez-lui des autorisations d'exécution (par exemple, 755 ou 700). Exemple de contenu pour l'ajout d'une adresse IPv6 et d'un itinéraire (affiché à 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 ce script up
est exécuté en tant que root. Si vous n'avez pas spécifié de paramètres User
et Group
, OpenVPN exécutera également des scripts tels que down
en tant que root.
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 réponse . Mais, au moment où sa réponse a été composée, il manquait un peu de clarté sur la manière dont les arguments de ligne de commande openvpn devraient être fournis pour démarrer openvpn sur une machine Ubuntu, en particulier pour que cela fonctionne de la même manière après les redémarrages.
Naturellement, on peut démarrer openvpn à partir d’une ligne de commande avec toutes les options légales disponibles. Mais, sur une machine Ubuntu, si on veut démarrer openvpn avec les mêmes arguments en ligne de commande après un redémarrage, ils doivent envisager de modifier le fichier /etc/default/openvpn
. Examiner les lignes suivantes:
# Optional arguments to openvpn's command line
OPTARGS=""
Depuis la page de manuel community openvpn sur --script-security
--script-security level Cette directive offre un contrôle au niveau politique sur l'utilisation par OpenVPN de programmes et de scripts externes . Les valeurs de niveau inférieur sont plus restrictives, les valeurs supérieures Sont plus permissives. Paramètres de niveau: 0 - Pas d’appel de programmes externes. 1 - (Par défaut) N'appeler que les exécutables intégrés tels que ifconfig, ip, route, Ou netsh. 2 - Autoriser l’appel d’exécutables intégrés et de scripts définis par l’utilisateur. 3 - Autoriser la transmission de mots de passe aux scripts via des variables d'environnement (Potentiellement non sécuritaires). Les versions d'OpenVPN antérieures à la v2.3 prenaient également en charge un indicateur de méthode qui a indiqué comment OpenVPN devrait appeler des commandes et des scripts externes. Cela peut être execve Ou system. Depuis OpenVPN v2.3, cet indicateur n'est plus accepté. Dans la plupart des environnements * nix , La méthode execve () a été utilisée sans problème. Certaines directives, telles que --up, permettent de transmettre des options au script externe. .____.] Dans ces cas, assurez-vous que le nom du script ne contient aucun espace, sinon l'analyseur de configuration S'étouffera, car il ne peut pas déterminer où se termine le nom du script Et où les options de script commencent. .____.]
Combiné avec une section abrégée sur --up
- up cmd Exécutez la commande cmd après l’ouverture réussie du périphérique TUN/TAP (modification de l’UID pré-utilisateur). cmd consiste en un chemin vers un script (ou un programme exécutable) , éventuellement suivi par des arguments. Le chemin et les arguments peuvent être des guillemets simples ou doubles et/ou Échappés à l'aide d'une barre oblique inversée. Ils doivent être séparés par un ou plusieurs espaces.
Sur mon ordinateur avec un server.conf openpvn, j'ai les lignes suivantes dans mon fichier /etc/default/openvpn
:
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Incidemment, nat.sh configure la traduction d’adresse réseau pour acheminer le trafic réseau privé des clients OpenVPN vers l’Internet public; ce qui est bon lorsque l'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 les fichiers /etc/openvpn/[client or server].conf
et /etc/default/openvpn
sont correctement configurés, openvpn peut être démarré ou arrêté avec:
Sudo service openvpn start
Sudo service openvpn stop
Les autres options utiles disponibles pour service openvpn
include cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Comme il s’agit d’un sujet assez ancien, je ne sais pas s’il est toujours d’intérêt. Si vous souhaitez toujours utiliser NetworkManager pour vous connecter à un VPN, vous pouvez ajouter une règle udev simple comme celle-ci:
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
Cela devrait exécuter n'importe quel script après la création du VPN.
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 un serveur openvpn) comme suit:
Créez 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 openvpn (généralement /etc/openvpn/server.conf
). Dans la réponse ci-dessus, il a été utilisé de haut en bas, qui sont utilisés lorsque le serveur démarre (redémarre). La directive client-connect (et client-disconnect) est utilisée 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>