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 — Расширенный |
- | # * Проверяет наличие интерфейса wg0 | + | # * Проверяет наличие интерфейса wg0 и его состояние |
- | # * и перезапускает WireGuard при необходимости. | + | # * Загружает модуль, |
+ | # * Можно отключить через флаг / | ||
+ | # // | ||
sleep 15 | sleep 15 | ||
- | if [ -f / | + | WG_CONF="/ |
- | | + | WG_INTERFACE=" |
+ | SYSTEMD_UNIT=" | ||
+ | BASE_DIR=" | ||
+ | LOG_DIR=" | ||
+ | LOG_FILE=" | ||
+ | SYSTEMD_LOG_FILE=" | ||
+ | DISABLE_FLAG=" | ||
+ | |||
+ | mkdir -p " | ||
+ | |||
+ | log() { | ||
+ | local message=" | ||
+ | echo " | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | if [ -f " | ||
+ | | ||
exit 0 | exit 0 | ||
fi | fi | ||
- | LOG_FILE="/ | + | log "🔍 Проверка состояния WireGuard..." |
- | echo "$(date ' | + | |
- | # Проверка интерфейса wg0 и его | + | # 1. Проверка |
- | if ip link show wg0 &>/ | + | if [ ! -f " |
- | if ip link show wg0 | grep -q "state UP"; then | + | log "❌ Конфигурационный |
- | | + | 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 " | ||
+ | if sudo wg show " | ||
+ | | ||
else | else | ||
- | | + | |
- | sudo systemctl restart | + | sudo systemctl restart |
fi | fi | ||
else | else | ||
- | | + | |
- | sudo systemctl restart | + | sudo systemctl restart |
fi | fi | ||
+ | # 4. Проверка автозапуска systemd | ||
+ | if systemctl is-enabled " | ||
+ | log "✅ Автозапуск $SYSTEMD_UNIT уже включён" | ||
+ | else | ||
+ | log "🔁 Включаем автозапуск $SYSTEMD_UNIT..." | ||
+ | sudo systemctl enable " | ||
+ | log "❌ Не удалось включить автозапуск" | ||
+ | exit 1 | ||
+ | } | ||
+ | log "✅ Автозапуск включён" | ||
+ | fi | ||
+ | |||
+ | log "✅ Проверка завершена. WireGuard работает штатно." | ||
</ | </ | ||
- | '' | + | |
+ | '' | ||
+ | |||
+ | <code ini wg-watchdog.service> | ||
+ | [Unit] | ||
+ | Description=WireGuard Auto-Recovery Watchdog | ||
+ | After=network-online.target | ||
+ | Wants=network-online.target | ||
+ | |||
+ | [Service] | ||
+ | Type=oneshot | ||
+ | ExecStart=/ | ||
+ | </ | ||
+ | |||
+ | ''/ | ||
+ | |||
+ | <code ini wg-watchdog.timer> | ||
+ | [Unit] | ||
+ | Description=Запуск WG WatchDog по расписанию | ||
+ | |||
+ | [Timer] | ||
+ | OnBootSec=1min | ||
+ | OnUnitActiveSec=5min | ||
+ | Persistent=true | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=timers.target | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | **🚀 Команды для активации** | ||
+ | <code bash> | ||
+ | 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.1742757903.txt.gz · Последнее изменение: 2025/03/23 22:25 —