===== WG Wathcdog =====
Проверка наличия интерфейса и перезапуск при необходимости
версия от 2025-03-27
#!/bin/bash
# ==AUTOEXEC==
# === WG WatchDog (расширенный) ===
# * wg-watchdog.sh — Расширенный наблюдатель WireGuard
# * Проверяет наличие интерфейса wg0 и его состояние
# * Загружает модуль, включает автозапуск, если нужно
# * Можно отключить через флаг /tmp/wg-watchdog.disabled
# //строка ниже служит для обозначения окончания описания
sleep 15
WG_CONF="/etc/wireguard/wg0.conf"
WG_INTERFACE="wg0"
SYSTEMD_UNIT="wg-quick@$WG_INTERFACE"
BASE_DIR="$(dirname "$0")"
LOG_DIR="$BASE_DIR/../logs"
LOG_FILE="$LOG_DIR/wg-watchdog.log"
SYSTEMD_LOG_FILE="$LOG_DIR/systemd/wg-watchdog-timer.log"
DISABLE_FLAG="/tmp/wg-watchdog.disabled"
mkdir -p "$LOG_DIR/systemd"
log() {
local message="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
echo "$message" | tee -a "$LOG_FILE"
echo "$message" >> "$SYSTEMD_LOG_FILE"
}
if [ -f "$DISABLE_FLAG" ]; then
log "🛑 Watchdog отключён флагом $DISABLE_FLAG"
exit 0
fi
log "🔍 Проверка состояния WireGuard..."
# 1. Проверка конфигурационного файла
if [ ! -f "$WG_CONF" ]; then
log "❌ Конфигурационный файл не найден: $WG_CONF"
exit 1
fi
log "✅ Конфигурация найдена: $WG_CONF"
# 2. Проверка и загрузка модуля wireguard
if ! lsmod | grep -q wireguard; then
log "🧩 Модуль wireguard не загружен. Пробуем загрузить..."
sudo modprobe wireguard || {
log "❌ Не удалось загрузить модуль wireguard"
exit 1
}
log "✅ Модуль wireguard загружен"
fi
# 3. Проверка активности по handshake
if ip link show "$WG_INTERFACE" &>/dev/null; then
if sudo wg show "$WG_INTERFACE" | grep -q "latest handshake"; then
log "✅ Интерфейс $WG_INTERFACE активен (handshake обнаружен)"
else
log "⚠️ Интерфейс $WG_INTERFACE существует, но нет handshake. Перезапуск..."
sudo systemctl restart "$SYSTEMD_UNIT"
fi
else
log "❌ Интерфейс $WG_INTERFACE не найден. Пробуем запустить..."
sudo systemctl restart "$SYSTEMD_UNIT"
fi
# 4. Проверка автозапуска systemd
if systemctl is-enabled "$SYSTEMD_UNIT" &>/dev/null; then
log "✅ Автозапуск $SYSTEMD_UNIT уже включён"
else
log "🔁 Включаем автозапуск $SYSTEMD_UNIT..."
sudo systemctl enable "$SYSTEMD_UNIT" || {
log "❌ Не удалось включить автозапуск"
exit 1
}
log "✅ Автозапуск включён"
fi
log "✅ Проверка завершена. WireGuard работает штатно."
''/etc/systemd/system/wg-watchdog.service''
[Unit]
Description=WireGuard Auto-Recovery Watchdog
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/home//scripts/wg-watchdog.sh
''/etc/systemd/system/wg-watchdog.timer''
[Unit]
Description=Запуск WG WatchDog по расписанию
[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Persistent=true
[Install]
WantedBy=timers.target
**🚀 Команды для активации**
sudo systemctl daemon-reload
sudo systemctl enable --now wg-watchdog.timer
**Проверка:**
systemctl list-timers --all | grep wg-watchdog
**Логи (по journalctl):**
journalctl -u wg-watchdog.service --no-pager --since today