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

5.2 KiB
Raw Blame History

date, type, tags, status
date type tags status
2026-06-26 decision
benelux
podkop
watchdog
monitoring
self-heal
openwrt
amneziawg
failover
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 «Бенелюкс лёг»

Лестница лечения (с гистерезисом)

  1. podkop restart
  2. флип podkop.main.interface awg0→awg1 (если awg1 поднят и здоров), иначе ifdown/ifup + restart
  3. reboot (лимит 2/сутки)
  4. сдаёмся → алерт «нужно руками» Каждое срабатывание + восстановление () → 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.