Como associar um script ao OpenVPN para que ele seja executado quando a VPN for conectada com êxito?
network-manger-openvpn
.
Como associar um script ao OpenVPN para que ele seja executado quando a VPN for conectada com êxito?
network-manger-openvpn
.
Respostas:
network-manager-openvpn
não fornece essa funcionalidade, você deve usar openvpn
diretamente.
Passe --script-security 2 --up /path/to/your/script
para ele ao 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 [método] Esta diretiva oferece controle no nível da política sobre o uso do OpenVPN de programas e scripts externos. Valores de nível mais baixo são mais valores restritivos e mais altos são mais permissivos. Configurações para nível: 0 - Estritamente nenhuma chamada de programas externos. 1 - (Padrão) Apenas chama executáveis internos, como ifconfig, ip, rota ou netsh. 2 - Permitir a chamada de executáveis internos e definidos pelo usuário scripts. 3 - Permitir que senhas sejam passadas para scripts via ambiente variáveis (potencialmente inseguras). --up cmd Comando Shell para executar após a abertura bem-sucedida do dispositivo TUN / TAP - alteração do UID do usuário). O script up é útil para especificar Comandos de rota que direcionam o tráfego IP destinado a sub-redes existentes na outra extremidade da conexão VPN em o tunel. Ordem de execução do script --up Executado após ligação do soquete TCP / UDP e TUN / TAP aberto. --down Executado após o fechamento do TCP / UDP e TUN / TAP.
Existem mais eventos para execução de scripts, esses podem ser encontrados na página de manual .
Crie /etc/openvpn/up.sh
e conceda permissões de execução (por exemplo, 755 ou 700). Exemplo de conteúdo para adicionar um endereço e rota IPv6 (mostrado para fins educacionais, não 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 este up
script é executado como raiz. Se você não especificou a User
e Group
, o OpenVPN também executará scripts como down
root.
openvpn
diretamente. Ao configurar um servidor, notei que o OpenVPN tentará se reconectar quando o servidor cair. Não tenho certeza se o OpenVPN continua tentando quando sua interface de rede cai.
Para a pergunta: "Como posso associar um script ao OpenVPN para que seja executado quando a VPN é conectada com êxito?" Quero ressaltar que Lekensteyn forneceu uma excelente resposta . Mas, no momento em que sua resposta foi composta, faltava um pouco de clareza sobre como os argumentos da linha de comando openvpn deveriam ser fornecidos para iniciar o openvpn em uma máquina ubuntu, especialmente para que funcionasse da mesma maneira após as reinicializações.
Naturalmente, pode-se iniciar o openvpn a partir de uma linha de comando com todas as opções legais disponíveis. Mas, em uma máquina Ubuntu, se alguém deseja iniciar o openvpn com os mesmos argumentos da linha de comando após uma reinicialização, deve considerar a edição do arquivo /etc/default/openvpn
. Examine as seguintes linhas:
# Optional arguments to openvpn's command line
OPTARGS=""
Na página de manual da comunidade openvpn em--script-security
- nível de segurança de script Esta diretiva oferece controle no nível da política sobre o uso de recursos externos pelo OpenVPN programas e scripts. Valores de nível mais baixo são mais restritivos, mais altos valores são mais permissivos. Configurações para nível: 0 - Estritamente nenhuma chamada de programas externos. 1 - (Padrão) Apenas chama executáveis internos, como ifconfig, ip, route, ou netsh. 2 - Permitir a chamada de executáveis internos e scripts definidos pelo usuário. 3 - Permitir que senhas sejam passadas para scripts por meio de variáveis ambientais (potencialmente inseguro). As versões do OpenVPN anteriores à v2.3 também suportavam um sinalizador de método que indicava como O OpenVPN deve chamar comandos e scripts externos. Isso pode ser executado ou sistema. A partir do OpenVPN v2.3, esse sinalizador não é mais aceito. Na maioria dos * nix ambientes em que a abordagem execve () foi usada sem problemas. Algumas diretivas como --up permitem que opções sejam passadas para o script externo. Nesses casos, verifique se o nome do script não contém espaços ou o O analisador de configuração engasgará porque não pode determinar onde o script nome termina e as opções de script são iniciadas.
Combinado com uma seção abreviada em --up
--up cmd Execute o comando cmd após a abertura bem-sucedida do dispositivo TUN / TAP (alteração do UID pré-usuário). O cmd consiste em um caminho para o script (ou programa executável), seguido opcionalmente por argumentos. O caminho e os argumentos podem ser de aspas simples ou duplas e / ou escapou usando uma barra invertida e deve ser separado por um ou mais espaços.
Na minha máquina com um openpvn server.conf, tenho as seguintes linhas no meu /etc/default/openvpn
arquivo:
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Aliás, o nat.sh configura a conversão de endereços de rede para rotear o tráfego de rede privada dos clientes openvpn para a Internet pública; o que é bom para quem não confia em um ponto de acesso WIFI público.
Além de permitir a reinicialização conforme o esperado após uma reinicialização, quando /etc/openvpn/[client or server].conf
e os /etc/default/openvpn
arquivos estiverem configurados corretamente, o openvpn pode ser iniciado ou interrompido com:
sudo service openvpn start
sudo service openvpn stop
Outras opções úteis disponíveis para service openvpn
incluir cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Como esse é um tópico bastante antigo, não tenho certeza se ainda interessa. Se você ainda deseja usar o NetworkManager para conectar-se a uma VPN, pode adicionar uma regra simples do udev assim:
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
Isso deve executar qualquer script após a criação da VPN.
Eu me deparei com a resposta em minha pesquisa para resolver esse problema e descobri que a melhor solução é (usando o servidor openvpn) da seguinte maneira:
Crie um script para ser executado:
# 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>
Adicione as seguintes linhas à configuração do openvpn (normalmente /etc/openvpn/server.conf
). Na resposta acima, foi usado para cima e para baixo, que são usados quando o servidor é iniciado (reinicia). A diretiva cliente-conexão (e cliente-desconexão) são usadas quando o cliente se conecta (desconecta).
# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>