#!/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