ММФБ Юрий: апгрейд Win10→Win11 25H2 + отчёт клиенту PDF
This commit is contained in:
66
decisions/2026-04-28-netbird-watchdog-lxc-132-137.md
Normal file
66
decisions/2026-04-28-netbird-watchdog-lxc-132-137.md
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
date: 2026-04-28
|
||||
type: decision
|
||||
tags: [decision, openclaw, netbird, code-server, monitoring]
|
||||
---
|
||||
|
||||
# 2026-04-28: NetBird watchdog на LXC 132 и 137 (фикс "бот молчит")
|
||||
|
||||
## Симптом
|
||||
|
||||
Олег пишет Максимке (openclaw, LXC 137) с 10:10 до 11:09 — **9 сообщений без ответа**. В логах gateway:
|
||||
|
||||
```
|
||||
FailoverError: LLM request failed: network connection error
|
||||
502 [kiro/claude-sonnet-4.5]: fetch failed (reset after 1s)
|
||||
502 [claude/claude-sonnet-4-6]: fetch failed (reset after 5s)
|
||||
502 [codex/gpt-5.4]: fetch failed (reset after 2s)
|
||||
```
|
||||
|
||||
Все 3 модели в failover-цепочке падают с TCP-reset за 1-5 секунд.
|
||||
|
||||
## Корень
|
||||
|
||||
NetBird daemon на **LXC 132 (code-server, OmniRoute + CLIProxy)** в зомби-состоянии:
|
||||
|
||||
```
|
||||
Management: Connected
|
||||
Signal: Connected
|
||||
Relays: 0/4 Available ← застряло
|
||||
Nameservers: 0/0 Available
|
||||
```
|
||||
|
||||
DNS-запросы к `1.1.1.1` через `wt0`-туннель падают мгновенно с `write: required key not available` — WireGuard handshake с пиром не завершён, ключ не загружен в ядро. Поэтому curl на `api.anthropic.com` / `api.openai.com` отвечает `HTTP 000` за 0.0001s. CLIProxy без апстрима возвращает HTTP 500 на каждый POST.
|
||||
|
||||
Ручной `systemctl restart netbird` сразу чинит — Relays поднимаются 4/4, DNS работает, curl Anthropic = 405, OpenAI = 401.
|
||||
|
||||
## Решение
|
||||
|
||||
Watchdog на LXC 132 и LXC 137:
|
||||
|
||||
- `/usr/local/bin/netbird-watchdog.sh` — проверяет `netbird status`. Если `Relays: 0/N` или `Peers count: 0/N` (при N>0 и Management=Connected) — `systemctl restart netbird`. Минимум 5 мин между рестартами (lock-файл `/run/netbird-watchdog.last-restart`).
|
||||
- `netbird-watchdog.service` (oneshot) + `netbird-watchdog.timer` (каждые 2 мин).
|
||||
|
||||
## Деплой
|
||||
|
||||
```bash
|
||||
for CT in 132 137; do
|
||||
pct push $CT netbird-watchdog.sh /usr/local/bin/ --perms 0755
|
||||
pct push $CT netbird-watchdog.service /etc/systemd/system/
|
||||
pct push $CT netbird-watchdog.timer /etc/systemd/system/
|
||||
pct exec $CT -- systemctl daemon-reload
|
||||
pct exec $CT -- systemctl enable --now netbird-watchdog.timer
|
||||
done
|
||||
```
|
||||
|
||||
Скрипты — `snippets/netbird-watchdog/`.
|
||||
|
||||
## Логи
|
||||
|
||||
Решение пишет в journalctl с tag `netbird-watchdog`:
|
||||
|
||||
```bash
|
||||
journalctl -t netbird-watchdog -n 20
|
||||
```
|
||||
|
||||
Если за неделю не было ни одного срабатывания — проблема была разовой. Если срабатывает регулярно — нужно копать корень почему wireguard handshake разваливается (MTU? фрагментация UDP? провайдер режет?).
|
||||
Reference in New Issue
Block a user