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