--- date: 2026-06-26 type: decision tags: [benelux, podkop, watchdog, monitoring, self-heal, openwrt, amneziawg, failover] status: stage1-done --- # Бенелюкс — инструмент восстановления обхода (мониторинг + автолечение) ## Задача Олег: «инструмент восстановления обхода блокировок, мониторинг + автоисправление, должно работать на 100%, наверное на внешних ресурсах от Бенелюкса». ## Калибровка «100%» Буквальные 100% одним туннелём недостижимы (ISP/нода/NetBird могут лечь — удалённо не починить). Реальная цель: **обход никогда не остаётся сломанным незаметно, чинится сам за 1–3 мин, иначе алерт раньше клиента.** Достигается тремя слоями. ## Решения Олега (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]].