---
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]].
