Resposta rápida para que a questão tenha algum encerramento:
O comentário de @ user535733 é a melhor maneira na minha opinião. A VPN está desativada na inicialização e iniciada manualmente neste sistema, por systemd disable openvpn
.
Eu adicionei o seguinte ao script vpn-up.sh
, que é executado depois que a VPN é iniciada por systemctl start openvpn
:
#!/bin/bash
# Disable ipv6 to prevent leaks
echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6
# Start services e.g. transmission
service transmission-daemon start
# Heredoc for crontab entry in /etc/cron.d
MINUTE='date +%M'
tee /etc/cron.d/piaport <<-EOF >/dev/null
# /etc/cron.d/piaport: crontab entries for pia-port script
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
${MINUTE} * * * * root /usr/local/bin/pia-port >> /var/log/piaport.log 2>&1
EOF
O script é iniciado e gera um arquivo piaport
in /etc/cron.d
, que executa um script uma hora após sua geração e, novamente, a cada hora a seguir.
O script vpn-down.sh
que é executado quando o serviço VPN é interrompido por systemctl stop openvpn
:
#!/bin/sh
# Stop service like Transmission
service transmission-daemon stop
# Prevent DNS leaks
/etc/openvpn/update-resolv-conf
# Reenable ipv6
echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6
# Remove cronjob / heredoc
rm /etc/cron.d/piaport
Para reinicializações inesperadas, o script chamado pelo cronjob verifica a existência da VPN e exclui o cronjob /etc/cron.d/piaport
se ele foi deixado:
parte do script :
# Check for tun0
tuncheck=$( { /sbin/ifconfig tun0; } 2>&1 )
tunnotfound="not found"
if [ "${tuncheck/$tunnotfound}" = "$tuncheck" ] ; then
echo "- VPN tunnel appears to be up and connected (Good!)"
else
echo "Error detected! tun0 does not exist."
echo "Please make sure both internet and the VPN is connected!"
echo ""
echo "Then run this script again!"
echo ""
[[ -f /etc/cron.d/piaport ]] && rm -f /etc/cron.d/piaport
exit
No total, o cronjob só é executado quando necessário e quando a VPN está ativa.