Como eu executo um script depois que o OpenVPN se conecta com sucesso?

38

Como posso associar um script ao OpenVPN para que ele seja executado quando a VPN for conectada com sucesso?

    
por Oxwivi 02.03.2011 / 16:35

3 respostas

46

network-manager-openvpn não fornece essa funcionalidade, você precisa usar openvpn diretamente.

Passe --script-security 2 --up /path/to/your/script para ele quando se conectar. Se você estiver usando um arquivo de configuração localizado em /etc/openvpn/ , anexe as próximas linhas ao seu arquivo de configuração:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Na página de manual do 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.

Existem mais eventos para a execução de scripts, que podem ser encontrados na página de manual .

Crie /etc/openvpn/up.sh e conceda permissões de execução (digamos, 755 ou 700). Exemplo de conteúdo para adicionar um endereço e rota IPv6 (mostrado para fins educacionais, não copie diretamente):

#!/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

Observe que esse script up é executado como root. Se você não tiver especificado uma configuração User e Group , o OpenVPN também executará scripts como down como root.

    
por Lekensteyn 02.03.2011 / 19:36
2

Para a pergunta: "Como posso associar um script ao OpenVPN para que ele seja executado quando a VPN for conectada com sucesso?" Gostaria de salientar que Lekensteyn forneceu um excelente responder . Mas, no momento em que sua resposta foi composta, faltava um pouco de clareza sobre como os argumentos de linha de comando do openvpn deveriam ser fornecidos para iniciar o openvpn em uma máquina Ubuntu, especialmente para que funcionasse da mesma forma após as reinicializações.

Argumentos de linha de comando Openvpn no Ubuntu:

Naturalmente, pode-se iniciar o openvpn a partir de uma linha de comando com qualquer opção legal disponível. Mas, em uma máquina Ubuntu, se alguém quiser iniciar o openvpn com os mesmos argumentos de linha de comando após uma reinicialização, eles devem considerar a edição do arquivo /etc/default/openvpn . Examine as seguintes linhas:

# Optional arguments to openvpn's command line
OPTARGS="" 

Na página man do openvpn da comunidade em --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.

Combinado com uma seção abreviada em --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.

Exemplo:

Na minha máquina com um server.conf openpvn, eu tenho as seguintes linhas no meu arquivo /etc/default/openvpn :

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Indecentemente, o nat.sh configura a conversão de endereços de rede para rotear tráfego de rede privada de clientes openvpn para a Internet pública; o que é bom quando não se confia em um ponto de acesso WIFI público.

Além de permitir a reinicialização conforme o esperado após a reinicialização, quando /etc/openvpn/[client or server].conf e /etc/default/openvpn estiverem corretamente configurados, o openvpn poderá ser iniciado ou interrompido com:

sudo service openvpn start
sudo service openvpn stop

Outras opções úteis disponíveis para service openvpn incluem cond-restart,force-reload,reload, restart,soft-restart, start, status, stop .

    
por Keith Reynolds 12.07.2016 / 20:21
1

Como esse é um tópico bastante antigo, não tenho certeza se ainda é interessante. Se você ainda quiser usar o NetworkManager para se conectar a uma VPN, você pode adicionar uma regra do udev simples como essa:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

Isso deve executar qualquer script depois que a VPN for criada.

    
por Thomas 11.07.2016 / 11:02