web-dev-qa-db-fra.com

Comment exécuter un script après qu'OpenVPN s'est connecté avec succès?

Comment associer un script à OpenVPN pour qu'il s'exécute lorsque le VPN est connecté avec succès?

49
Oxwivi

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.

62
Lekensteyn

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.


Arguments de ligne de commande Openvpn sur Ubuntu:

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.

Exemple:

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.

5
Keith Reynolds

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.

3
Thomas

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>
1
CozC