60 lines
1.3 KiB
Bash
Executable File
60 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -x
|
|
|
|
GATEWAY_IP="192.168.5.1"
|
|
PING_DELAY_S=30
|
|
RECONNECT_ATTEMPTS=10
|
|
RECONNECT_DELAY=60
|
|
WG_INTERFACE="home"
|
|
REBOOT_AFTER_FAILED_ATTEMPTS=true
|
|
|
|
FAILED_ATTEMPTS=0
|
|
|
|
function is_host_reachable() {
|
|
for i in {1..5}; do
|
|
echo "Sending ping..."
|
|
if ping -c 1 "$1" > /dev/null; then
|
|
echo "Ping received"
|
|
return 0
|
|
fi
|
|
echo "WARNING: Failed to ping $GATEWAY_IP"
|
|
done
|
|
return 1
|
|
}
|
|
|
|
while : ; do
|
|
if ! wg show "$WG_INTERFACE" > /dev/null; then
|
|
echo "INFO: WG interface $WG_INTERFACE is not active, not doing anything"
|
|
sleep "$PING_DELAY_S"
|
|
continue
|
|
fi
|
|
|
|
if ! is_host_reachable "$GATEWAY_IP" > /dev/null; then
|
|
echo "ERROR: ($GATEWAY_IP) is not reachable. Restarting interface $WG_INTERFACE"
|
|
wg-quick down "$WG_INTERFACE"
|
|
echo "INFO: Stopped WG interface $WG_INTERFACE"
|
|
sleep "$RECONNECT_DELAY"
|
|
if ! wg-quick up "$WG_INTERFACE"; then
|
|
echo "WARNING: Failed starting the interface..."
|
|
else
|
|
echo "INFO: Started WG interface $WG_INTERFACE"
|
|
fi
|
|
|
|
FAILED_ATTEMPTS=$(( FAILED_ATTEMPTS + 1))
|
|
if (( FAILED_ATTEMPTS > RECONNECT_ATTEMPTS )); then
|
|
echo "Failed $FAILED_ATTEMPTS times to recover connection..."
|
|
if $REBOOT_AFTER_FAILED_ATTEMPTS; then
|
|
echo "Rebooting..."
|
|
reboot
|
|
else
|
|
echo "Will continue trying..."
|
|
FAILED_ATTEMPTS=$(( 0 ))
|
|
fi
|
|
fi
|
|
fi
|
|
sleep "$PING_DELAY_S"
|
|
|
|
done
|
|
|