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

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


projects:wg_watchdog

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
projects:wg_watchdog [2025/03/23 22:25] projects:wg_watchdog [2025/04/06 19:07] (текущий)
Строка 2: Строка 2:
  
 Проверка наличия интерфейса и перезапуск при необходимости Проверка наличия интерфейса и перезапуск при необходимости
 +версия от 2025-03-27
 +
  
 <file bash wg_watchdog.sh> <file bash wg_watchdog.sh>
 #!/bin/bash #!/bin/bash
 # ==AUTOEXEC== # ==AUTOEXEC==
-# === WG WatchDog === +# === WG WatchDog (расширенный) === 
-# * wg-watchdog.sh — Мини-наблюдатель WireGuard +# * wg-watchdog.sh — Расширенный наблюдатель WireGuard 
-# * Проверяет наличие интерфейса wg0  +# * Проверяет наличие интерфейса wg0 и его состояние 
-# * и перезапускает WireGuard при необходимости.+# * Загружает модуль, включает автозапускесли нужно 
 +# * Можно отключить через флаг /tmp/wg-watchdog.disabled 
 +# //строка ниже служит для обозначения окончания описания
  
 sleep 15 sleep 15
  
-if [ -/tmp/wg-watchdog.disabled ]; then +WG_CONF="/etc/wireguard/wg0.conf" 
-  echo "🛑 Watchdog отключён флагом /tmp/wg-watchdog.disabled"+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   exit 0
 fi fi
  
-LOG_FILE="/var/log/wg-watchdog.log" +log "🔍 Проверка состояния WireGuard..."
-echo "$(date '+%Y-%m-%d %H:%M:%S') :: 🔍 Проверка состояния WireGuard..." >> "$LOG_FILE"+
  
-# Проверка интерфейса wg0 и его состояния +1. Проверка конфигурационного файла 
-if ip link show wg0 &>/dev/null; then +if [ ! -f "$WG_CONF" ]; then 
-  if ip link show wg0 | grep -q "state UP"; then +  log "❌ Конфигурационный файл не найден: $WG_CONF" 
-    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ Интерфейс wg0 существует и активен" >> "$LOG_FILE"+  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   else
-    echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ Интерфейс wg0 существует, но не активен. Перезапуск..." >> "$LOG_FILE+    log "⚠️ Интерфейс $WG_INTERFACE существует, но нет handshake. Перезапуск..." 
-    sudo systemctl restart wg-quick@wg0+    sudo systemctl restart "$SYSTEMD_UNIT"
   fi   fi
 else else
-  echo "[$(date '+%Y-%m-%d %H:%M:%S')] ❌ Интерфейс wg0 не найден. Перезапуск..." >> "$LOG_FILE+  log "❌ Интерфейс $WG_INTERFACE не найден. Пробуем запустить..." 
-  sudo systemctl restart wg-quick@wg0+  sudo systemctl restart "$SYSTEMD_UNIT"
 fi 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 работает штатно."
 </file> </file>
  
-''crontab -e''открывает + 
 +''/etc/systemd/system/wg-watchdog.service'' 
 + 
 +<code ini 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 
 +</code> 
 + 
 +''/etc/systemd/system/wg-watchdog.timer'' 
 + 
 +<code ini wg-watchdog.timer> 
 +[Unit] 
 +Description=Запуск WG WatchDog по расписанию 
 + 
 +[Timer] 
 +OnBootSec=1min 
 +OnUnitActiveSec=5min 
 +Persistent=true 
 + 
 +[Install] 
 +WantedBy=timers.target 
 +</code> 
 + 
 + 
 + 
 +**🚀 Команды для активации** 
 +<code bash> 
 +sudo systemctl daemon-reload 
 +sudo systemctl enable --now wg-watchdog.timer 
 +</code> 
 +**Проверка:** 
 +<code> 
 +systemctl list-timers --all | grep wg-watchdog 
 +</code> 
 +**Логи (по journalctl):** 
 +<code> 
 +journalctl -u wg-watchdog.service --no-pager --since today 
 +</code>
projects/wg_watchdog.1742757903.txt.gz · Последнее изменение: 2025/03/23 22:25 —

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