--- 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? провайдер режет?).