Files
knowledge-base/decisions/2026-04-28-netbird-watchdog-lxc-132-137.md

67 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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? провайдер режет?).