Files
knowledge-base/decisions/2026-06-26-benelux-podkop-recovery-watchdog.md

59 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-06-26
type: decision
tags: [benelux, podkop, watchdog, monitoring, self-heal, openwrt, amneziawg, failover]
status: stage1-done
---
# Бенелюкс — инструмент восстановления обхода (мониторинг + автолечение)
## Задача
Олег: «инструмент восстановления обхода блокировок, мониторинг + автоисправление, должно работать на 100%, наверное на внешних ресурсах от Бенелюкса».
## Калибровка «100%»
Буквальные 100% одним туннелём недостижимы (ISP/нода/NetBird могут лечь — удалённо не починить). Реальная цель: **обход никогда не остаётся сломанным незаметно, чинится сам за 13 мин, иначе алерт раньше клиента.** Достигается тремя слоями.
## Решения Олега (AskUserQuestion)
- Наблюдатель — **дома, LXC** (клон antoshka-watch-self, алерт через бота).
- Автофикс — **до ребута включительно**, с гистерезисом.
- Резерв выхода — **второй AWG-сервер** (не VLESS) → Finland-хаб.
## Архитектура (3 слоя)
1. **Резерв выхода:** awg0 Singapore (primary) + awg1 Finland (secondary). Этап 2.
2. **Лёгкое самолечение на роутере:** podkop `enable_badwan_interface_monitoring=1` (следит за wan, перезагружает sing-box) — уже было.
3. **Внешний сторож (главный):** `benelux-podkop-watchdog.sh` на LXC 137, cron `*/5`, проверки УДАЛЁННО по SSH через NetBird.
## Ключевой принцип — анти-flapping
Грабли OpenWrt_4/Оливье: собственный watchdog.sh агрессивно рестартовал sing-box и сам создавал обрывы. Поэтому: лечим только после **2 подряд провалов**, cooldown 5 мин между шагами, лимит **2 ребута/сутки**.
## Что проверяет сторож (изнутри роутера)
- sing-box жив + Clash API (`192.168.1.1:9090`) отвечает
- handshake текущего выхода < 200с + `ping -I awgN 1.1.1.1` (транзит, ловит rp_filter-ловушку)
- FakeIP: youtube → `198.18.x` (заворачивается)
- **анти-утечка:** ozon.ru НЕ `198.18.x` (страж рецидива `russia_outside`) — только алерт, не автофикс
- достижимость: SSH нет → различает «роутер пингуется, SSH моргнул» vs «Бенелюкс лёг»
## Лестница лечения (с гистерезисом)
0. `podkop restart`
1. флип `podkop.main.interface` awg0→awg1 (если awg1 поднят и здоров), иначе `ifdown/ifup` + restart
2. `reboot` (лимит 2/сутки)
3. сдаёмся → алерт «нужно руками»
Каждое срабатывание + восстановление (✅) → Telegram Олегу (1292155421) через токен бота из `/root/.openclaw/openclaw.json` (тот же тракт, что antoshka-watch-self).
## Деплой Этапа 1 (2026-06-26) — СДЕЛАНО
- Ключ LXC137 `root@openclaw` добавлен в `/etc/dropbear/authorized_keys` Бенелюкса.
- `/root/benelux-podkop-watchdog.sh` на LXC 137, cron `*/5`. Исходник в vault `snippets/benelux/benelux-podkop-watchdog.sh`.
- **Боевой тест пройден:** `podkop stop` → прогон1 DEGRADED 1/2 (без действий) → прогон2 2/2 → Шаг1 restart → sing-box поднят, FakeIP вернулся → прогон3 OK + ✅-отбой + сброс счётчика. ⚠️/✅ алерты дошли.
- Грабли при написании: busybox `pgrep -x` не работает (→ `pgrep`); `read < нет_файла` течёт ошибкой (→ guard `[ -f ]`).
## Этап 2 (TODO) — резервный выход Finland + failover
- Через Amnezia Web Panel (LXC 143 `10.0.0.143:5000`, admin/AmnPanel!2026-fi) нарезать пир Бенелюкса на Finland-хаб `151.241.234.241:41624` (AmneziaWG 2.0, subnet `10.8.1.0/24`).
- Поднять `awg1` на роутере (UCI-референс — HomeLab awg2, [[../projects/dttb/openwrt-router]]); awg1 в firewall WAN-зону; per-iface `rp_filter=2`.
- Failover уже заложен в watchdog (Шаг1 флипает на awg1) — активируется автоматически, как только `network.awg1` появится.
- Закрывает TODO из [[2026-06-23-amnezia-web-panel-lxc143]] «failover (AWG сам не переключается)».
## Опционально (Этап 3)
- Второй независимый сторож на Finland VPS (на случай падения дома) — взаимный догляд ближе к «100%».
См. [[../snippets/podkop-reference]], [[../claude-memory/benelux]].