Files
vpnmon/vpnmon.sh
2023-11-16 19:50:01 -06:00

113 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# powerwall - CLI commands to control VM guest power
source /opt/idssys/defaults/colors.inc
source /opt/idssys/defaults/default.inc
source /opt/idssys/vpnmon/system.inc
logfile=/opt/idssys/vpnmon/logfile
touch $logfile
START(){
sudo mkdir -p /var/run/xl2tpd
sudo touch /var/run/xl2tpd/l2tp-control
[ "$(systemctl list-units --full -all | grep "strongswan.service")" != "" ] && sudo service strongswan restart
[ "$(systemctl list-units --full -all | grep "strongswan-starter.service")" != "" ] && sudo service strongswan-starter restart
sudo service xl2tpd restart
sudo service ipsec restart
sleep 8s
sudo /usr/sbin/ipsec up ${VPN_NAME}
sleep 8s
sudo bash -c 'echo "c ${VPN_NAME}" > /var/run/xl2tpd/l2tp-control'
sleep 8s
[ "${ROUTE_SUBNET1}" != "" ] && ip route add ${ROUTE_SUBNET1} via $(ip address show dev ppp0 | grep -Po '(?<=peer )(\b([0-9]{1,3}\.){3}[0-9]{1,3}\b)') dev ppp0
[ "${ROUTE_SUBNET2}" != "" ] && ip route add ${ROUTE_SUBNET2} via $(ip address show dev ppp0 | grep -Po '(?<=peer )(\b([0-9]{1,3}\.){3}[0-9]{1,3}\b)') dev ppp0
# if [ "${SYSTEM}" = "unifipoller" ]; then
# /usr/sbin/service unifi-poller start &
# elif [ "${SYSTEM}" = "rpicam" ]; then
# /usr/sbin/service rpisurv restart
# fi
rm -f /opt/idssys/vpnmon/vpn.stop
echo "$(date) - VPN started" >> $logfile
}
STOP(){
touch /opt/idssys/vpnmon/vpn.stop
# if [ "${SYSTEM}" = "unifipoller" ]; then
# /usr/sbin/service unifi-poller stop
# fi
sudo bash -c 'echo "d ${VPN_NAME}" > /var/run/xl2tpd/l2tp-control'
/usr/sbin/ipsec down ${VPN_NAME}
echo "$(date) - VPN stopped" >> $logfile
}
CHECK(){
if [ ! -f /opt/idssys/vpnmon/vpn.stop ]; then
touch /opt/idssys/vpnmon/vpn.stop
checked=false
cc=0
until [ "${checked}" = "" ]; do
OUT=$(ip link | grep "ppp0")
#OUT=`ip a show $VPN_INTERFACE up` >/dev/null 2>&1
if [ ${#OUT} -ne 0 ]; then
checked=""
elif [ ${cc} -eq 10 ]; then
if [ -f /opt/idssys/vpnmon/vpn.fail ]; then
echo "$(date) - VPN Failure #2 - stopping for 5mins" >> $logfile
touch /opt/idssys/vpnmon/vpn.fail2
rm -f /opt/idssys/vpnmon/vpn.fail
STOP
sleep 5m
START
exit 1
elif [ -f /opt/idssys/vpnmon/vpn.fail2 ]; then
echo "$(date) - VPN Failure #3 - Shutting down VPN system until repaired" >> $logfile
STOP
exit 1
else
echo "$(date) - VPN Failure #1 - stopping for 1min" >> $logfile
touch /opt/idssys/vpnmon/vpn.fail
STOP
sleep 1m
START
exit 1
fi
fi
((cc=${cc}+1))
sleep 1s
done
rm -f /opt/idssys/vpnmon/vpn.stop
if [ -f /opt/idssys/vpnmon/vpn.fail* ]; then
echo "$(date) - VPN Fixed" >> $logfile
rm -f /opt/idssys/vpnmon/vpn.fail*
fi
else
echo "VPN system is stopped and must be restarted manually"
fi
}
case ${1} in
start) START;;
stop) STOP;;
check) CHECK;;
esac
exit 0