Comment puis-je associer un script à OpenVPN pour qu'il s'exécute lorsque le VPN est connecté avec succès?
network-manager-openvpn
ne fournit pas de telles fonctionnalités, vous devez utiliser directement openvpn
.
Passez --script-security 2 --up /path/to/your/script
à 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
À partir 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 scripts, ceux-ci peuvent être trouvés sur la page de manuel .
Créez /etc/openvpn/up.sh
et attribuez-lui des droits d'exécution (par exemple, 755 ou 700). Exemple de contenu pour ajouter une adresse IPv6 et 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ètre User
et Group
, OpenVPN exécutera également des scripts tels que down
en tant que root.
À la question: "Comment puis-je associer un script à OpenVPN pour qu'il s'exécute lorsque le VPN est connecté avec succès?" Je tiens à souligner que Lekensteyn est un excellent réponse . 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 la ligne de commande openvpn devaient être fournis pour démarrer openvpn sur une machine ubuntu, en particulier pour qu’elle fonctionne de la même manière après les redémarrages.
Naturellement, on peut lancer openvpn à partir d’une ligne de commande avec toutes les options juridiques 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, ils doivent 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 openvpn de la communauté sur --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 --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.
Sur ma machine avec openpvn server.conf, j'ai les lignes suivantes dans mon fichier /etc/default/openvpn
:
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Indécemment, le nat.sh configure la traduction d’adresses réseau pour acheminer le trafic 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 pouvoir 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
D'autres options utiles disponibles pour service openvpn
incluent cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Comme il s’agit d’un fil assez ancien, je ne suis pas certain qu’il soit encore intéressant. Si vous souhaitez toujours utiliser NetworkManager pour vous connecter à un VPN, vous pouvez ajouter une règle 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.