59 lines
5.2 KiB
Markdown
59 lines
5.2 KiB
Markdown
---
|
||
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]].
|