Retry ping several times to avoid spurious packet drops
Signed-off-by: Milan Pandurov <milanpandurov@pm.me>
This commit is contained in:
@@ -4,6 +4,10 @@ Shell script and systemd service that will monitor if wireguard link is active.
|
|||||||
|
|
||||||
### Installation
|
### 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:
|
To install simply run:
|
||||||
```
|
```
|
||||||
sudo ./install.sh
|
sudo ./install.sh
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
GATEWAY_IP="192.168.5.1"
|
GATEWAY_IP="192.168.5.1"
|
||||||
PING_DELAY_S=30
|
PING_DELAY_S=30
|
||||||
RECONNECT_ATTEMPTS=10
|
RECONNECT_ATTEMPTS=10
|
||||||
@@ -9,35 +11,47 @@ REBOOT_AFTER_FAILED_ATTEMPTS=true
|
|||||||
|
|
||||||
FAILED_ATTEMPTS=0
|
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
|
while : ; do
|
||||||
if ! wg show "$WG_INTERFACE" > /dev/null; then
|
# if ! wg show "$WG_INTERFACE" > /dev/null; then
|
||||||
echo "INFO: WG interface $WG_INTERFACE is not active, not doing anything"
|
# echo "INFO: WG interface $WG_INTERFACE is not active, not doing anything"
|
||||||
sleep "$PING_DELAY_S"
|
# sleep "$PING_DELAY_S"
|
||||||
continue
|
# continue
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
if ! ping -c 1 "$GATEWAY_IP" > /dev/null; then
|
if ! is_host_reachable "$GATEWAY_IP" > /dev/null; then
|
||||||
echo "ERROR: Failed to ping the gateway ($GATEWAY_IP). Restarting interface $WG_INTERFACE"
|
echo "ERROR: ($GATEWAY_IP) is not reachable. Restarting interface $WG_INTERFACE"
|
||||||
wg-quick down "$WG_INTERFACE"
|
# wg-quick down "$WG_INTERFACE"
|
||||||
echo "INFO: Stopped WG interface $WG_INTERFACE"
|
# echo "INFO: Stopped WG interface $WG_INTERFACE"
|
||||||
sleep "$RECONNECT_DELAY"
|
# sleep "$RECONNECT_DELAY"
|
||||||
if ! wg-quick up "$WG_INTERFACE"; then
|
# if ! wg-quick up "$WG_INTERFACE"; then
|
||||||
echo "WARNING: Failed starting the interface..."
|
# echo "WARNING: Failed starting the interface..."
|
||||||
else
|
# else
|
||||||
echo "INFO: Started WG interface $WG_INTERFACE"
|
# echo "INFO: Started WG interface $WG_INTERFACE"
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
FAILED_ATTEMPTS=$(( FAILED_ATTEMPTS + 1))
|
# FAILED_ATTEMPTS=$(( FAILED_ATTEMPTS + 1))
|
||||||
if (( FAILED_ATTEMPTS > RECONNECT_ATTEMPTS )); then
|
# if (( FAILED_ATTEMPTS > RECONNECT_ATTEMPTS )); then
|
||||||
echo "Failed $FAILED_ATTEMPTS times to recover connection..."
|
# echo "Failed $FAILED_ATTEMPTS times to recover connection..."
|
||||||
if $REBOOT_AFTER_FAILED_ATTEMPTS; then
|
# if $REBOOT_AFTER_FAILED_ATTEMPTS; then
|
||||||
echo "Rebooting..."
|
# echo "Rebooting..."
|
||||||
reboot
|
# reboot
|
||||||
else
|
# else
|
||||||
echo "Will continue trying..."
|
# echo "Will continue trying..."
|
||||||
FAILED_ATTEMPTS=$(( 0 ))
|
# FAILED_ATTEMPTS=$(( 0 ))
|
||||||
fi
|
# fi
|
||||||
fi
|
# fi
|
||||||
fi
|
fi
|
||||||
sleep "$PING_DELAY_S"
|
sleep "$PING_DELAY_S"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user