From 983086249239dfea7f4cc549a8ba3a6caed7a1eb Mon Sep 17 00:00:00 2001 From: dttb Date: Mon, 29 Jun 2026 17:32:55 +0300 Subject: [PATCH] =?UTF-8?q?niikn:=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20=D1=81=D1=82=D0=BE=D1=80=D0=BE=D0=B6=20VPN-=D1=85?= =?UTF-8?q?=D0=B0=D0=B1=D0=B0=20=D0=BD=D0=B0=20LXC137=20(cron=20*/5,=20TG+?= =?UTF-8?q?email,=20=D0=B4=D0=B5=D0=B4=D1=83=D0=BF+=D0=BE=D1=82=D0=B1?= =?UTF-8?q?=D0=BE=D0=B9)=20+=20=D1=81=D0=BD=D0=B0=D0=BF=D1=88=D0=BE=D1=82?= =?UTF-8?q?=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=D0=B0;=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?self-heal=20=D1=83=D0=B6=D0=B5=20=D0=B5=D1=81=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- claude-memory/niikn-vpn-status.md | 6 ++++ snippets/finland-hub-watchdog.sh | 46 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 snippets/finland-hub-watchdog.sh diff --git a/claude-memory/niikn-vpn-status.md b/claude-memory/niikn-vpn-status.md index 9c028db..06f3715 100644 --- a/claude-memory/niikn-vpn-status.md +++ b/claude-memory/niikn-vpn-status.md @@ -6,6 +6,12 @@ originSessionId: 8c23ee07-26c7-4c9d-b7cc-8fd9d2b3c266 --- ## VPS 78.17.4.225 (Finland AdminVPS) — восстановлен 2026-06-29 (был DOWN из-за неоплаты) +## Мониторинг и самовосстановление (настроено 2026-06-29) +- **Контейнерный self-heal (на хабе):** все критичные контейнеры `restart: always` + `watchtower` → при снятии блокировки/ребуте VM поднимаются сами. +- **Внешний сторож:** `/root/finland-hub-watchdog.sh` на **openclaw LXC 137**, cron `*/5`. Проверяет хаб `78.17.4.225` снаружи (ICMP + TCP 443/9443). Если оба порта молчат → алерт «хаб лёг (возможно неоплата AdminVPS)». **Только алерт** (коробка провайдерская, удалённо не поднять). Канал: TG Олегу (1292155421) + email support@dttb.ru через `/root/.wd-mail.env`; дедуп (раз в час) + «отбой». Образец — `antoshka-watch-self.sh`. Копия: [[../snippets/finland-hub-watchdog]]. NB: SSH:22 хаба для LXC137 закрыт (только Mac-IP) → глубокую проверку handshake оттуда не делаем. +- **TODO (предложено, не сделано):** (1) self-heal на стороне OpenWrt НИИКН (boot-self-heal + podkop-watchdog как в Бужарово) — против залипа sing-box; (2) truly-external dead-man's switch на случай падения дома. + + > 2026-06-29: весь Docker-стек не слушает порты (22/443/9443/1080/39202 → refused), панель vpn.niikn.com недоступна, AmneziaWG handshake мёртв → лёг весь обход НИИКН (Claude/TG/WA/instagram). ICMP отвечает 18мс, ХОТЯ в норме на этом VPS ICMP закрыт → значит отвечает шлюз провайдера за остановленную VM. SSH:22 refused и с Мака, и с openclaw → удалённо не поднять. Фикс: vps.sweb.ru (it5870yand) → старт/ребут VM, проверить автозапуск docker. ## VPS 78.17.4.225 — норма (когда работает) diff --git a/snippets/finland-hub-watchdog.sh b/snippets/finland-hub-watchdog.sh new file mode 100644 index 0000000..c5951bd --- /dev/null +++ b/snippets/finland-hub-watchdog.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Внешний сторож VPN-хаба НИИКН (AdminVPS 78.17.4.225) — на openclaw LXC 137, cron */5. +# Ловит "хаб лёг целиком": приостановка AdminVPS за неоплату / упавшая VM — сервисы не слушают порты. +# Самолечить нельзя (коробка провайдерская/выключена) → ТОЛЬКО алерт. TG (Олег) + email, дедуп + "отбой". +# Контейнерный self-heal живёт на самом хабе (restart:always + watchtower). Образец: antoshka-watch-self.sh. +export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +HUB=78.17.4.225 +CHAT=1292155421 +CFG=/root/.openclaw/openclaw.json +STATE=/root/.finland-hub-watchdog.last +TOKEN=$(grep -oE '[0-9]{8,}:[A-Za-z0-9_-]{30,}' "$CFG" 2>/dev/null | head -1) + +send(){ + [ -n "$TOKEN" ] && curl -s --max-time 20 "https://api.telegram.org/bot${TOKEN}/sendMessage" \ + --data-urlencode "chat_id=$CHAT" --data-urlencode "text=$1" >/dev/null 2>&1 + [ -f /root/.wd-mail.env ] && . /root/.wd-mail.env + if [ -n "${MAILTO:-}" ]; then + printf 'From: dttb watchdog <%s>\nTo: %s\nSubject: %s\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\nDate: %s\n\n%s\n' \ + "$SMTPUSER" "$MAILTO" "[Finland-hub LXC137] watchdog" "$(date -R)" "$1" > /tmp/.fhwd.eml + curl -s --max-time 25 --url "smtp://${MAILHOST}:587" --ssl-reqd --resolve "${MAILHOST}:587:${MAILIP}" \ + --mail-from "$SMTPUSER" --mail-rcpt "$MAILTO" --user "${SMTPUSER}:${SMTPPASS}" --upload-file /tmp/.fhwd.eml >/dev/null 2>&1 + fi +} + +tcp(){ timeout 5 bash -c "echo >/dev/tcp/$HUB/$1" 2>/dev/null && echo 1 || echo 0; } + +icmp=$(ping -c2 -W2 "$HUB" >/dev/null 2>&1 && echo 1 || echo 0) +p443=$(tcp 443); p9443=$(tcp 9443) + +# Хаб "лежит", если оба сервисных порта молчат (как было при приостановке AdminVPS) +if [ "$p443" = "0" ] && [ "$p9443" = "0" ]; then + if [ "$icmp" = "1" ]; then + msg="🚨 VPN-хаб НИИКН ($HUB) НЕ обслуживает: TCP 443/9443 молчат, ICMP есть. Похоже на приостановку AdminVPS (неоплата) или зависшую VM — лёг весь обход (Claude/TG/WA/VLESS у НИИКН и клиентов). Проверь биллинг AdminVPS / vps-панель." + else + msg="🚨 VPN-хаб НИИКН ($HUB) полностью недоступен (ни ICMP, ни TCP 443/9443). Лёг весь обход. Проверь AdminVPS." + fi + now=$(date +%s); last=$(cat "$STATE" 2>/dev/null || echo 0) + if [ $((now - last)) -gt 3600 ]; then send "$msg"; fi # повтор не чаще раза в час + [ -f "$STATE" ] || echo "$now" > "$STATE" + echo "ALERT: $msg" + exit 1 +fi + +# всё ок — если был в алерте, шлём отбой +if [ -f "$STATE" ]; then send "✅ VPN-хаб НИИКН ($HUB) снова в строю (TCP 443=$p443, 9443=$p9443)."; rm -f "$STATE"; fi +echo "OK: hub up (icmp=$icmp 443=$p443 9443=$p9443)"