#!/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 работает штатно."