O problema básico que você está vendo é que o OpenVPN permanece em execução - portanto, o sudo openvpn /etc/openvpn/connection1.ovpn
nunca retorna. Seu script, portanto, nunca chega à próxima linha. (Também: scripts init são executados como root, então não deve haver um sudo
). Então, trivialmente, você precisa adicionar um e comercial ( &
) ao final dessa linha ou, melhor ainda, dar ao OpenVPN a opção --daemon
(mas leia os documentos do OpenVPN sobre as limitações disso).
É claro que você deve apenas usar a maneira de o Debian ativar uma VPN: em Jessie, seria systemctl enable [email protected]
. Pré-jessie, ou no Jessie sem systemd, que estaria editando /etc/default/openvpn
e alterando a linha AUTOSTART
. (Provavelmente você precisará alterar a extensão de .ovpn
para .conf
também).
Então você encontrará o próximo problema: o OpenVPN retornará antes da VPN. Mas você não pode iniciar a montagem até que a VPN esteja realmente passando tráfego. A maneira mais fácil que encontrei para consertar isso é um serviço systemd que pinga a extremidade remota da VPN:
$ cat vpn-really-up.service
[Unit]
Description=Ping Einstein to make sure the VPN is really up
[email protected]
[email protected]
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/ping -c 2 -w 300 192.168.X.Y
TimeoutStartSec=330
Claro, você pode usar essa linha de ping em um script init.d também. (Observe que isso pode não ser a melhor maneira de fazer isso, por exemplo, talvez um comando --route-up
seja melhor, não tenho certeza se eles não existiam quando eu configurá-lo ou se Eu não sabia sobre eles. Minha máquina está realmente executando testes.)
Em seguida, você pode criar unidades de montagem systemd para o seu sistema de arquivos (note que este também depende dnsmasq, porque eu uso isso para obter alguns domínios encaminhados para um servidor DNS através da VPN, para que os nomes internos funcionem):
$ cat mnt-Einstein-music.mount
[Unit]
Description=/mnt/Einstein/music
Requires=dnsmasq.service vpn-really-up.service
After=dnsmasq.service vpn-really-up.service remote-fs-pre.target
[Mount]
Where=/mnt/Einstein/music
What=Einstein.home:/srv/music
Options=nosuid,nodev,intr,rsize=4096,wsize=4096,nfsvers=3,fsc
Type=nfs
TimeoutSec=180s
[Install]
WantedBy=multi-user.target
(Montar em uso também funcionaria e é bem fácil com o systemd - veja man 5 systemd.automount
).
Por fim, seu destino de parada precisa ser corrigido: você deve desmontar os sistemas de arquivos antes de interromper a VPN. Caso contrário, sua máquina irá travar na reinicialização / desligamento. E você deve testar se funciona - caso contrário, você vai ssh para a máquina um dia e reiniciá-lo, e tem que fazer uma viagem não planejada para apertar o botão de reset.
PS: Eu também tenho este arquivo:
$ cat [email protected]/local-after-ifup.conf
[Unit]
Requires=networking.service
After=networking.service
... meu palpite está em um ponto que era necessário para garantir que o OpenVPN (e, portanto, todos os sistemas de arquivos sobre VPNs) fossem interrompidos antes que o systemd parasse as interfaces de rede.