Retry ping several times to avoid spurious packet drops

Signed-off-by: Milan Pandurov <milanpandurov@pm.me>
This commit is contained in:
2025-02-18 15:34:40 +01:00
parent 958c2c3cbd
commit 14ce355190
2 changed files with 44 additions and 26 deletions

View File

@@ -4,6 +4,10 @@ Shell script and systemd service that will monitor if wireguard link is active.
### Installation
Assumption is that wireguard is already installed on the system, this script does not handle installation of wireguard itself. This script assumes that wireguard interface name is `home`. Script assumes that IP address for gateway is set to 192.168.5.1.
For more details look at the `wireguard-monitor` script.
To install simply run:
```
sudo ./install.sh

View File

@@ -1,5 +1,7 @@
#!/bin/bash
set -x
GATEWAY_IP="192.168.5.1"
PING_DELAY_S=30
RECONNECT_ATTEMPTS=10
@@ -9,35 +11,47 @@ 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 ! 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 ! ping -c 1 "$GATEWAY_IP" > /dev/null; then
echo "ERROR: Failed to ping the gateway ($GATEWAY_IP). 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
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
# 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"