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


50

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


Dans le cas du client, je suppose? Quel logiciel utilises-tu? OpenVPN ou un wrapper (par exemple, NetworkManager)?
Lekensteyn

@ Lekensteyn, wrapper network-manger-openvpn.
Oxwivi

Réponses:


62

network-manager-openvpnne fournit pas une telle fonctionnalité, vous devez utiliser openvpndirectement.

Passez --script-security 2 --up /path/to/your/scriptà lui 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 d'OpenVPN.
              des programmes externes et des scripts. Les valeurs de niveau inférieur sont plus
              restrictif, les valeurs élevées sont plus permissives. Paramètres pour
              niveau:

              0 - Strictement 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 définis par l’utilisateur
              les scripts.
              3 - Autoriser les mots de passe à être transmis aux scripts via l'environnement
              variables (potentiellement dangereuses).
       --up cmd
              Commande Shell à exécuter après l’ouverture réussie du périphérique TUN / TAP (avant
              - changement d'utilisateur UID). Le script up est utile pour spécifier
              commandes de routage qui acheminent le trafic IP destiné au secteur privé
              sous-réseaux qui existent à l’autre extrémité de la connexion VPN dans
              le tunnel.
Ordre d'exécution du script
       --up Exécuté après une liaison TCP / UDP et une 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 de script, ceux-ci peuvent être trouvés sur la page de manuel .

Créez /etc/openvpn/up.shet 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 upscript est exécuté en tant que root. Si vous n'avez pas spécifié de paramètre Useret Group, OpenVPN exécutera également des scripts en downtant que root.


Si vous ne savez pas comment utiliser directement openvpn, ajoutez les détails de votre configuration actuelle: type de connexion (par exemple, certificats X509), port de passerelle, compression LZO, force de TCP, utilisation de périphérique Tap, de chiffrement, HMAC et TLS. Mentionnez également vos paramètres IP s'ils ne sont pas automatiques. Pour votre vie privée, omettez vos adresses réelles.
Lekensteyn

D'accord, j'ai décidé d'utiliser OpenVPN directement (et oui, j'ai le fichier .conf), mais est-ce qu'il se reconnectera automatiquement si la connexion est perdue? Et comment puis-je le connecter automatiquement chaque fois qu'il y a une connexion Internet? Et enfin, je ne comprenais pas où je devais ajouter les lignes que vous avez mentionnées dans la réponse.
Oxwivi

J'ai élargi la réponse à utiliser openvpndirectement. Lors de la configuration d’un serveur, j’ai remarqué que OpenVPN essaierait de se reconnecter lorsque le serveur serait en panne. Vous ne savez pas si OpenVPN continue d'essayer lorsque votre interface réseau tombe en panne.
Lekensteyn

Mon problème n'est pas lorsque l'interface réseau tombe en panne - il essaie de se reconnecter lorsque la connexion Internet est perdue et retrouvée. Je veux juste me connecter au VPN chaque fois que je reçois une connexion Internet.
Oxwivi

Oh, et le script s'applique-t-il à toutes les connexions VPN? Et s'il vous plaît taguer @ Oxwivi en répondant, je ne serai pas averti autrement.
Oxwivi

5

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 une excellente 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 devraient 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 openvpn de la communauté sur--script-security

Niveau de sécurité - script
    Cette directive offre un contrôle au niveau politique sur l’utilisation par OpenVPN de 
    programmes et scripts. Les valeurs de niveau inférieur sont plus restrictives, plus élevées
    les valeurs sont plus permissives. Paramètres de niveau:
0 - Strictement 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 les mots de passe à être transmis aux scripts via des variables d'environnement
(potentiellement dangereux).

Les versions OpenVPN antérieures à la v2.3 prenaient également en charge un indicateur de méthode indiquant comment 
OpenVPN doit appeler des commandes et des scripts externes. Cela pourrait être soit execve
ou système. Depuis OpenVPN v2.3, cet indicateur n'est plus accepté. Dans la plupart des * nix
environnements l'approche execve () a été utilisée sans aucun problème.

Certaines directives telles que --up autorisent la transmission d'options au script externe.
Dans ces cas, assurez-vous que le nom du script ne contient pas d’espace ou le 
analyseur de configuration va s'étouffer, car il ne peut pas déterminer où le script 
nom se termine et 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’ID utilisateur pré-utilisateur).
    cmd consiste en un chemin d'accès au script (ou programme exécutable), éventuellement suivi
    par des arguments. Le chemin et les arguments peuvent être simples ou doubles et / ou
    échappé en utilisant une barre oblique inverse, et doit être séparé par un ou plusieurs espaces.

Exemple:

Sur ma machine avec un server.conf openpvn, j'ai les lignes suivantes dans mon /etc/default/openvpnfichier:

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, quand /etc/openvpn/[client or server].confet /etc/default/openvpnfichiers 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 l' service openvpninclusion cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.


3

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.


1

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>

Comment voulez-vous inclure le nom de configuration du client dans le fichier journal?
callisto
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.