Инструменты пользователя

Инструменты сайта


Action unknown: copypageplugin__copy
projects:wg_watchdog

WG Wathcdog

Проверка наличия интерфейса и перезапуск при необходимости версия от 2025-03-27

wg_watchdog.sh
#!/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

wg-watchdog.service
[Unit]
Description=WireGuard Auto-Recovery Watchdog
After=network-online.target
Wants=network-online.target
 
[Service]
Type=oneshot
ExecStart=/home/<USER>/scripts/wg-watchdog.sh

/etc/systemd/system/wg-watchdog.timer

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
projects/wg_watchdog.txt · Последнее изменение: 2025/04/06 19:07 —

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki